dockerのMySQLを5.6から5.7へ移行

MySQL 5.6からエクスポート

必要に応じて、mysqlコンテナのポート番号を mysqldumpコマンドやmysqlコマンドの--portオプションで指定してください。

まず、ターミナルで、mysqlコマンドで接続できることを確認します。-u はユーザー名、-p はパスワード入力、-h はデータベースホストを指定します。

サーバー側のバージョンは、いくつでしょうか?

$ mysql -u root -p -h 127.0.0.1 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4692 Server version: 5.6.45-log MySQL Community Server (GPL) 省略 mysql> \q Bye
Code language: Bash (bash)

5.6.45だね。

ところで、いちいち指示が細かいよね

ユーザとパスワードを間違っていたり、

そもそもdockerを起動していなかったり、mysqldump以前の凡ミスが多いのよ

mysqldumpコマンドで、データベースサーバ全体をエクスポートします。

$ mysqldump --version mysqldump Ver 10.13 Distrib 5.7.32, for osx10.16 (x86_64) $ time mysqldump -u root -p -x --all-databases -h 127.0.0.1 >mysql56.sql Enter password: real 0m21.613s user 0m1.984s sys 0m0.836s
Code language: Bash (bash)

もし、次のエラーが表示されたら、

$ time mysqldump -u root -p -x --all-databases -h 127.0.0.1 >mysql56.sql Enter password: mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"') FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = 'fuga_db' AND TABLE_NAME = 'auth_group';': Unknown table 'column_statistics' in information_schema (1109) real 0m5.865s user 0m0.015s
Code language: Bash (bash)

MySQL 8.0用のmysqldumpです。--skip-column-statistics オプションをつけることで、エラーを回避できます。

$ mysqldump --version mysqldump Ver 8.0.21 for osx10.15 on x86_64 (Homebrew) $ time mysqldump --skip-column-statistics -u root -p -x --all-databases -h 127.0.0.1 >mysql56.sql Enter password: real 0m21.613s user 0m1.984s sys 0m0.836s
Code language: Bash (bash)

docker-compose.ymlを編集

dockerコンテナを停止します。

$ sudo docker-compose down
Code language: Bash (bash)

docker-compose.yml の mysqlのdocker imageを5.6から5.7に変更します。

image: mysql:5.6
Code language: YAML (yaml)
image: mysql:5.7
Code language: YAML (yaml)

dockerコンテナの /var/lib/mysql /var/log/mysql をマウントしていると思います。ホスト側のマウントディレクトリを変更します。

volumes: - ./docker/mysql/var/lib/mysql:/var/lib/mysql - ./docker/mysql/var/log/mysql:/var/log/mysql
Code language: YAML (yaml)
volumes: - ./docker/mysql57/var/lib/mysql:/var/lib/mysql - ./docker/mysql57/var/log/mysql:/var/log/mysql
Code language: YAML (yaml)

dockerコンテナをビルドします。

$ sudo docker-compose build または $ sudo docker compose up
Code language: Bash (bash)

dockerコンテナを起動します

$ sudo docker-compose up -d
Code language: Bash (bash)

MySQL 5.7へインポート

mysqlコマンドで接続できるかどうか確認します。

サーバー側のバージョンはいくつになっているでしょうか?

$ mysql -u root -p -h 127.0.0.1 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 16 Server version: 5.7.31-log MySQL Community Server (GPL) 省略 mysql> \q Bye
Code language: Bash (bash)

5.7.31になっているよ!

MySQL 5.6からエクスポートしたファイルをインポートします。

$ time mysql -u root -p -h 127.0.0.1 <mysql56.sql Enter password: real 0m59.035s user 0m1.869s sys 0m0.255s
Code language: Bash (bash)

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