本移行は下記のような構成で実施いたします。
目次
コンピューティングVM・移行先RDBの作成・準備
1.コンピューティングからVMを作成し、パッケージを取得・インストールします。
※利用するコンピューティングのVMはCentOS7.7を推奨しています。
※コンピューティングVMはMySQL5.7のRDBと同一のネットワークで作成する必要があります。
# コンピューティングVMにログイン
# CentOS7ではMariaDBが標準でインストールされているため削除
yum list installed mariadb-libs
yum remove mariadb-libs
# /var/lib/mysqlディレクトリが存在していれば削除
ls -la /var/lib/mysql/
rm -rf /var/lib/mysql/
# 関連パッケージをインストール
yum install http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-8.0/mysql-community-common-8.0.20-1.el7.x86_64.rpm
yum install http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-8.0/mysql-community-libs-8.0.20-1.el7.x86_64.rpm
yum install http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-8.0/mysql-community-devel-8.0.20-1.el7.x86_64.rpm
yum install http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-8.0/mysql-community-client-8.0.20-1.el7.x86_64.rpm
yum install http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-8.0/mysql-community-server-8.0.20-1.el7.x86_64.rpm
yum install http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-8.0/mysql-community-libs-compat-8.0.20-1.el7.x86_64.rpm
# コンピューティングVMからログアウト
2.MySQL8.0のRDBを作成
※こちらが移行先のRDBとなりますので必要に応じてパラメータグループ等を事前に設定ください。
※MySQL8.0のRDBはMySQL5.7のRDBと同一のネットワークで作成する必要があります。
レプリケーションの準備(MySQL5.7)
レプリケーションを始めるために既存データを移行する準備を行います。
1.RDB(MySQL5.7)にユーザ作成
# RDB(MySQL5.7)コンソールにログイン
mysql> CREATE USER 'backup_user'@'【コンピューティングVMのip】' IDENTIFIED BY '【パスワード】';
mysql> GRANT ALL PRIVILEGES ON * . * TO 'backup_user'@'【コンピューティングVMのip】';
mysql> FLUSH PRIVILEGES;
# RDB(MySQL5.7)コンソールからログアウト
2.パラメータグループからRDB(MySQL5.7)に以下を設定して再起動
3.コンピューティングVMからレプリケーション先ipの確認
# コンピューティングVMにログイン
dig 【MySQL8.0のRDBのFQDN】
# コンピューティングVMからログアウト
4.RDB(MySQL5.7)でレプリケーションユーザを作成
# RDB(MySQL5.7)コンソールにログイン
mysql> CREATE USER 'repl_user'@'【digで引いたMySQL8.0のip】' IDENTIFIED BY '【パスワード】';
mysql> GRANT REPLICATION SLAVE ON * . * TO 'repl_user'@'【digで引いたMySQL8.0のip】';
mysql> FLUSH PRIVILEGES;
# RDB(MySQL5.7)コンソールからログアウト
レプリケーションの準備(MySQL8.0)
1.RDB(MySQL8.0)にユーザ作成
# RDB(MySQL8.0)コンソールにログイン
mysql> CREATE USER 'backup_user'@'【コンピューティングVMのip】' IDENTIFIED BY '【パスワード】';
mysql> GRANT ALL PRIVILEGES ON * . * TO 'backup_user'@'【コンピューティングVMのip】';
mysql> FLUSH PRIVILEGES;
# RDB(MySQL8.0)コンソールからログアウト
2.パラメータグループからRDB(MySQL8.0)に以下を設定して再起動
3.RDB(MySQL8.0)にレプリケーション設定を追加
# RDB(MySQL8.0)コンソールにログイン
CHANGE MASTER TO
MASTER_HOST='【MySQL5.7のfqdnもしくはip】',
MASTER_USER='repl_user',
MASTER_PASSWORD='【パスワード】',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1,
MASTER_SSL=1;
# RDB(MySQL8.0)コンソールからログアウト
MySQL5.7のバックアップを取得しMySQL8.0へリストア
1.コンピューティングVMからMySQL5.7のテーブル情報をバックアップ
※以下の操作では下記のようなwarningが表示されますが、今回はGTIDを用いた移行となりますので問題ございません。
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions,
even those that changed suppressed parts of the database. If you don't want to restore GTIDs,
pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.
# コンピューティングVMにログイン
mysqldump --skip-column-statistics --no-data --events --routines --triggers \
--databases 【移行が必要なデータベース1】 【移行が必要なデータベース2(必要なだけ記述)】 --ssl-mode=DISABLED \
-ubackup_user -p【パスワード】 -h【RDB(MySQL5.7)のFQDN】 > table_dump.sql
2.コンピューティングVMからMySQL8.0へテーブル情報をリストア
mysql -h【RDB(MySQL8.0)のFQDN】 -ubackup_user -p【パスワード】 < table_dump.sql
3.コンピューティングVMからMySQL5.7のデータをバックアップ
mysqldump --single-transaction --skip-column-statistics --events --routines --triggers \
--databases 【移行が必要なデータベース1】 【移行が必要なデータベース2(必要なだけ記述)】 --ssl-mode=DISABLED \
-ubackup_user -p【パスワード】 -h【RDB(MySQL5.7)のFQDN】 > data_dump.sql
※mysql.userテーブルなどはバックアップに含まれていないため必要に応じて設定を追加する必要があります。
# コンピューティングVMからログアウト
4.RDB(MySQL8.0)のGTID情報をリセット
# RDB(MySQL8.0)コンソールにログイン
RESET MASTER;
# RDB(MySQL8.0)コンソールからログアウト
5.コンピューティングVMからMySQL8.0のへデータをリストア
# コンピューティングVMにログイン
mysql -h【RDB(MySQL8.0)のFQDN】 -ubackup_user -p【パスワード】 < data_dump.sql
# コンピューティングVMからログアウト
MySQL8.0からMySQL5.7へレプリケーションを実施
1.MySQL8.0のRDBでバイナリログ情報のリセットを行いレプリケーションを開始する
# RDB(MySQL8.0)コンソールにログイン
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
# SHOW SLAVE STATUSの出力結果に下記が含まれていればレプリケーションは完了です
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
MySQL8.0でデータが最新になったのを確認したのちにMySQL5.7への書き込みを停止し、アプリケーションの書き込みをMySQL8.0へ向けることで移行完了となります。