MySQL 5.6からエクスポート
まず、ターミナルで、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)