RDBで利用しているMySQL5.7をMySQL8.0へアップデートする
MySQL5.7のEOL以後もRDBではMySQL5.7をご利用いただくことができますが、下記手順を用いてMySQL5.7からMySQL8.0へのバージョンアップを実施いただくことも可能です。
※バージョンアップにはRDBの再起動を伴う場合がございます。
※全ての環境で同一の手順が利用できる保証はできかねますので必要に応じて手順をご変更ください。
※お取り扱いのサービス・システムにアクセスが集中しない時間帯にご実施ください。
本移行は下記のような構成で実施いたします。

目次
- コンピューティングVMの準備
- レプリケーションの準備 (MySQL 5.7)
- レプリケーションの準備 (MySQL 8.0)
- MySQL 5.7のバックアップを取得し、MySQL 8.0へリストア
- MySQL 8.0からMySQL 5.7へレプリケーションを実施
コンピューティングVM・移行先RDBの作成・準備
- コンピューティングから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からログアウト
- MySQL8.0のRDBを作成
※こちらが移行先のRDBとなりますので必要に応じてパラメータグループ等を事前に設定ください。
※MySQL8.0のRDBはMySQL5.7のRDBと同一のネットワークで作成する必要があります。

レプリケーションの準備 (MySQL 5.7)
レプリケーションを始めるために既存データを移行する準備を行います。
- 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)コンソールからログアウト
- パラメータグループからRDB(MySQL8.0)に以下を設定して再起動

- RDB(MySQL8.0)にレプリケーション設定を追加
# コンピューティングVMにログイン
dig 【MySQL8.0のRDBのFQDN】
# コンピューティングVMからログアウト

- 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)コンソールからログアウト
レプリケーションの準備 (MySQL 8.0)
- 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)コンソールからログアウト
- パラメータグループからRDB(MySQL8.0)に以下を設定して再起動

- 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へリストア
- コンピューティング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
- コンピューティングVMからMySQL8.0へテーブル情報をリストア
mysql -h【RDB(MySQL8.0)のFQDN】 -ubackup_user -p【パスワード】 < table_dump.sql
- コンピューティング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からログアウト
- RDB(MySQL8.0)のGTID情報をリセット
# RDB(MySQL8.0)コンソールにログイン
RESET MASTER;
# RDB(MySQL8.0)コンソールからログアウト
- コンピューティングVMからMySQL8.0へデータをリストア
# コンピューティングVMにログイン
mysql -h【RDB(MySQL8.0)のFQDN】 -ubackup_user -p【パスワード】 < data_dump.sql
# コンピューティングVMからログアウト
MySQL 8.0からMySQL 5.7へレプリケーションを実施
- 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へ向けることで移行完了となります。