皆さんこんにちわ。
ここ最近、暑くて外に出るのも億劫になってきたディーネットの浜田です。
そういえば2021年2月5日にMySQL5.6のサポート終了したことにより、RDSも2021年8月3日に
MySQL5.6のサポート終了が発表されましたね。
そのため、MySQL5.7やMySQL8.0にバージョンアップする必要があります。
状況によっては、新しいサーバを準備して既存DBを移行する必要があったりもします。
そこで今回はMySQL8.0に移行するときの手順についてお伝えします。
目次
MySQL8.0への移行手順
今回利用した検証用サーバのスペックについては以下の通りです。
旧サーバ CentOS6.5 MySQL5.1
新サーバ CentOS7.7 MySQL8.0
ちょっと旧サーバ古い気がしますが… まあ、今回は気にしない方向で。
データベース名 sample-db
ユーザ名 sample-db_user
移行する予定のDB及びユーザは上の通りです。
それでは早速進めていきましょう。
実際の手順
(新サーバ)# mysqldump -u root -p[新パスワード] --all-databases --single-transaction
早速手順ですが、まず初めに新サーバのほうでdumpを取っておきましょう。
バックアップは大切です。
(旧サーバ)# mysqldump -u root -p --flush-logs sample-db > sample-db.sql
ここは旧サーバでの作業です。移行したいDBのdumpを取ります。
もし旧サーバのデータベースエンジンがMyISAMの場合、以下のコマンドでInnoDBに変換する必要があります。
(旧サーバ)# sed -i 's/ENGINE=MyISAM/Engine=InnoDB/g' sample-db.sql
これで旧サーバでの作業は終了です。
取得したdumpはrsyncやscpなどで新サーバに持ってきましょう。
(新サーバ)# mysql -u root -p
mysql> create database sample_db;
移行予定である新規データベースを作成します。
MySQL8.0ではデータベース名に‐(ハイフン)が使えないので、_(アンダースコア)を使います。
(新サーバ)# mysql -u root -p sample_db < sample-db.sql
旧サーバで取ったdumpをsample_dbに流し込みましょう。
(新サーバ)# mysql -u root -p
mysql> show databases;
+-----------------------+
| Database |
+-----------------------+
| sample_db |
+-----------------------+
無事、データベースが移行できました。
mysql> create user sample_db_user@localhost identified by 'PASSWD';
mysql> grant all on sample_db.* to 'sample_db_user'@'localhost';
mysql> show grants for 'sample_db_user'@'localhost';
mysql> flush privileges;
あとはユーザ作成など細かい作業を行ないましょう。
最後に
無事DB移行が完了しましたが、WordPressなどのDBを移行した場合は、WordPress内でデータベース名の指定を修正する必要があるかもしれません。
さて、今回はMySQL8.0へのデータベース移行方法をお伝えしました。
今回はこの辺で!
自称中堅のサーバエンジニアです。
過去にサーバ構築部門にいましたが今は保守チーム