mysqlのデータを5.7→8に移行した記録

mysql

wordpressの引っ越しでmysql-5.7からmysql-8へデータを移行した。さすがにメジャーバージョンアップなだけあっていろいろと変更がされているようですんなりインポート、エクスポートで終わりという訳にはいかなかった。

データのエクスポート

移行元(mysql-5.7)でデータをエクスポートする。そのままだとそこそこの大きさのファイルになると思うので、圧縮する。これをローカルなりどこかへ退避させておく。

$ mysqldump -u root --all-databases -p > db_all.dump
$ gzip db_all.dump

データのインポート

移行先(mysql-8)へデータをインポートする。

# gzip -d db_all.dump.gz
# mysql -u root < db_all.dump

これで何も起こらずすんなりいったと思ったが、エラーが出るようになってしまった。

mysql> show tables;
ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist
mysql> grant ごにょごにょ
[ERROR] Column count of mysql.user is wrong. Expected 51, found 45. The table is probably corrupted.

いろいろ調べたら、mysql自身が使っているテーブル群でMyISAMからInnoDBに変更になったテーブルが結構あった。構成の補正にはmysql_upgradeを実行すればテーブルなどを再構成してくれるようなので、実行してみる。

# mysql_upgrade 
The mysql_upgrade client is now deprecated. The actions executed by the upgrade client are now done by the server.
To upgrade, please start the new MySQL binary with the older data directory. Repairing user tables is done automatically. Restart is not required after upgrade.
The upgrade process automatically starts on running a new MySQL binary with an older data directory. To avoid accidental upgrades, please use the --upgrade=NONE option with the MySQL binary. The option --upgrade=FORCE is also provided to run the server upgrade sequence on demand.
It may be possible that the server upgrade fails due to a number of reasons. In that case, the upgrade sequence will run again during the next MySQL server start. If the server upgrade fails repeatedly, the server can be started with the --upgrade=MINIMAL option to start the server without executing the upgrade sequence, thus allowing users to manually rectify the problem.

移行先のmysqlは8.0.23だったのだが、どうやらmysql_upgradeは8.0.1xで廃止になった模様。なので、上記の説明通りに–upgrade=FORCEオプションで起動してみる。データの量にもよるが少し時間がかかるので、気長に待つ。

# service mysql stop
# mysqld --upgrade=FORCE

終わったらmysqlでコマンドを叩いてみる。

mysql> show tables;
...

無事に一覧が取得できたのと、grantもエラーなく実行できたので完了。

WordPressのファイルの方は特にいじることはなかった。webサーバの実行ユーザにwp-contents/cacheの書き込み権限がなかったので、権限を与えたぐらい。メジャーバージョンアップはやはりいろいろ変更があるようなので、いろいろ調べないといけないかなぁ。。

コメント

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