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
ByeCode 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.836sCode 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.015sCode 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.836sCode language: Bash (bash)

docker-compose.ymlを編集

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

$ sudo docker-compose downCode language: Bash (bash)

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

    image: mysql:5.6Code language: YAML (yaml)
    image: mysql:5.7Code 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/mysqlCode language: YAML (yaml)
    volumes:
      - ./docker/mysql57/var/lib/mysql:/var/lib/mysql
      - ./docker/mysql57/var/log/mysql:/var/log/mysqlCode language: YAML (yaml)

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

$ sudo docker-compose build

または

$ sudo docker compose upCode language: Bash (bash)

dockerコンテナを起動します

$ sudo docker-compose up -dCode 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
ByeCode 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.255sCode language: Bash (bash)

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