概要
Dockerで実行していたMariaDB 10.4からMySQL 8.0へ移行しました。
ここでは、この移行の方法について紹介します。
環境
- MariaDB 10.4
- MySQL 8.0
移行理由
そもそもなぜMariaDBからMySQLしようと思ったかということですが、MariaDB 10.4から10.5への移行に失敗したということがあります。
これについて詳しく書くつもりはないので簡潔に書くと、更新後データが壊れたため、データをダンプしてリストアをするということをして解決したのですが、今度はユーザー周りでうまくいかず、色々と試してみたのですが解決せず、諦めたということがあります。
あくまでも予想ですが、DockerでMariaDBを使っているため、バグにぶつかったもしくはうまく問題を解決できなかったのかなと思っています。
そこで、もしかするとMySQLならばうまくいくのではないかと思い、今回のMariaDBからMySQLへの移行をやってみました。
MariaDBからMySQLへの移行の問題
MariaDBからMySQLへの移行の問題として、MariaDB10.3からMySQLとの互換性がなくなっているということがあります。今回私が利用しているMaria DBのバージョンは10.4のため、MySQLとの直接の互換性はありません。
そのため、データをそのまま使うということはできません。
そこで、今回移行のために実施した方法として、一度MariaDBでデータをダンプしてMySQLでリストアするということをしました。
移行
データのダンプで、MariaDB全体のダンプをしようとすると、MariaDB専用のテーブルやデータベースまでダンプしてしまう可能性が高いため、今回は、それぞれのデータベース単位でダンプすることにしました。
ダンプは次のようなコマンドで、移行したいデータベースの数だけ実行しました。
mysqldump -h localhost -u root -p -d データベース名 > database.sql
今回はMySQL 8.0へ移行するため、ダンプが終わったら、MySQL 8.0を起動し、リストアを実行しました。
mysql -h localhost -u root -p < database.sql
リストアが完了したら、ダンプに含まれていないユーザーの作成をします。
MySQL 8.0から、ユーザー作成の際に、GRANTの前にCREATE USERを使ってユーザーを作成する必要があります。
これで、MariaDBからMySQLへの移行が完了しました。
さいごに
MariaDBがいつのまにかMySQLと互換性がなくなっていたのには驚きました。