異なるバージョンのMySQLを一台のパソコンで同時に動かす方法

IT
スポンサーリンク

異なるバージョンのMySQLを一台のパソコンで同時に動かす方法

どんなシチュエーション?

主に稼動中システムのバージョンアップ

MySQLに限った話ではありませんが、ソフトウェアはバージョンによって、微妙に初期設定や挙動が違ったりします

MySQL自体は開発が継続されていますので、バージョンが上がっていきます。

システム新規導入時はその時点の最新版を利用すれば良いのですが、現在稼動中のシステムの場合は古いバージョンの物を使い続けていることになります。

MySQLバージョンアップする時の確認ポイント

この現在稼動中のシステムのMySQLのバージョンを上げる作業というのは、かなりの危険を伴いますので、この類の依頼案件があった場合は、どのバージョンからどのバージョンにアップデートするのか慎重に検討を重ねる必要があります。

そういった場合、次のようなアクションを取ります。

  1. 公式サイトのリリースノートを確認
  2. 実機検証

1のリリースノートの確認は基本ですね。どこがどう変わったかまとめられているのでこれを確認するのがまず最初の一歩です。ただ、リリースノートだけではわからない場合もあります。実際のデータが入っている状態でバージョンアップしたら、どうなるのか、最終的には実機で確認するのが確実です。

実機検証のため、別のバージョンのMySQLを準備

すでにMySQLが動かしてて、別のバージョンを動かしたいけど、今使っているMySQLはアンインストールしたくないな

コンピュータをもう一台調達するのは難しいよ

ばったん
ばったん

はい! DockerコンテナのMySQLなら一台のコンピュータ上でいろんなバージョンを同時に起動できるよ

やり方

docker-composeでMySQLコンテナを1つ起動

docker-composeを使ってMySQLを複数バージョン動かしてみます。既に1つ動いている前提で説明します。まだ動かしていない方は、一つ前の記事を先にご覧ください。

別バージョンのMySQLのコンテナを追加して起動

前回、MySQLの最新版を動かすdocker-compose.yamlを作成しましたので、それにコンテナの定義を追記します。黄色の部分です。

version: '3'
services:
mysql-latest:
image: mysql:latest
container_name: mysql80
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_database
MYSQL_USER: scott
MYSQL_PASSWORD: tiger
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
volumes:
- "/docker/mysql80/data:/var/lib/mysql"
- "/docker/mysql80/conf:/etc/mysql/conf.d"
- "/docker/mysql80/initdb:/docker-entrypoint-initdb.d"
ports:
- 3306:3306
mysql-v5.7:
image: mysql:5.7
container_name: mysql57
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_database
MYSQL_USER: scott
MYSQL_PASSWORD: tiger
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
volumes:
- "/docker/mysql57/data:/var/lib/mysql"
- "/docker/mysql57/conf:/etc/mysql/conf.d"
- "/docker/mysql57/initdb:/docker-entrypoint-initdb.d"
ports:
- 13306:3306
  • サービス名、コンテナ名は重複しなければ何でもOKです。
  • volumesの先は、他のコンテナのDBをマッピングしないように注意してください。多分壊れます。
  • portsは3306は既にMySQL最新版で使われているので、別のポート番号にしてください。1024~65535で他のサービスが使っていないところならどこでもOKです。

docker-compose.yamlへの追加定義が完了したら、保存してdocker-composeコマンドで起動してください。うまく起動すると、次のように両方ともStateがUPになります。これで、ポート番号3306で接続するとMySQLの最新版、13306で接続するとMySQL 5.7に接続できます。

$ docker-compose up -d

 Name                Command               State               Ports
--------------------------------------------------------------------------------
mysql80   docker-entrypoint.sh mysql ...   Up      0.0.0.0:3306->3306/tcp,
                                                   33060/tcp
mysql57   docker-entrypoint.sh mysql ...   Up      0.0.0.0:13306->3306/tcp,
                                                   33060/tcp
スポンサーリンク

まとめ

Docker便利ですねー。バージョンごとにdocker-compose.yamlを分けておけば、使いたいバージョンだけを起動することも可能です。

今回はわかりやすく別のバージョンにしましたが、もちろん同じバージョンでも構築可能です。開発チームにメンバーが10人いたら、この要領でサーバ上のDockerに10人分のMySQLサーバを簡単に準備することが出来ますね。

ばったん
ばったん

ばったんのオススメ書籍紹介コーナー!

左の書籍から順番に一言コメントします。

  • 教科書というだけあって基本的なことも丁寧に記載されていてオススメ
  • 実際になにができるのかをすぐに知りたい、という方向け
  • GCPやAWSが絡むならKubernetesも一緒に
  • インフラ傾向にある場合はこちら
  • Dockerを深堀りしたい方は定番のオライリー本

コメント

タイトルとURLをコピーしました