mysql

MySQL8.0へのデータベース移行について

皆さんこんにちわ。

ここ最近、暑くて外に出るのも億劫になってきたディーネットの浜田です。

そういえば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へのデータベース移行方法をお伝えしました。

今回はこの辺で!

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA