RDBで利用しているMySQL8.0をMySQL8.4へアップデートする | IDCFクラウド ご利用ガイド

RDBで利用しているMySQL8.0をMySQL8.4へアップデートする

MySQL8.0のEOL以後もRDBではMySQL8.0をご利用いただくことができますが、下記手順を用いてMySQL8.0からMySQL8.4へのバージョンアップを実施いただくことも可能です。

※バージョンアップにはRDBの再起動を伴う場合がございます。
※全ての環境で同一の手順が利用できる保証はできかねますので必要に応じて手順をご変更ください。
※お取り扱いのサービス・システムにアクセスが集中しない時間帯にご実施ください。

本移行は下記のような構成で実施いたします。


目次

  1. コンピューティングVMの準備
  2. レプリケーションの準備 (MySQL 8.0)
  3. レプリケーションの準備 (MySQL 8.4)
  4. MySQL 8.0のバックアップを取得し、MySQL 8.4へリストア
  5. MySQL 8.4からMySQL 8.0へレプリケーションを実施

コンピューティングVM・移行先RDBの作成・準備

  1. コンピューティングからVMを作成し、パッケージを取得・インストールします。

※利用するコンピューティングのVMはRockyOS8.10を推奨しています。
※コンピューティングVMはMySQL8.0のRDBと同一のネットワークで作成する必要があります。

# コンピューティングVMにログイン
# /var/lib/mysqlディレクトリが存在していれば削除
ls -la /var/lib/mysql/
rm -rf /var/lib/mysql/

# 関連パッケージをインストール
dnf install https://repo.mysql.com/mysql84-community-release-el8-1.noarch.rpm
dnf module switch-to mysql:8.4
dnf module disable mysql
dnf install mysql-community-server

# コンピューティングVMからログアウト
  1. MySQL8.4のRDBを作成

※こちらが移行先のRDBとなりますので必要に応じてパラメータグループ等を事前に設定ください。

※MySQL8.4のRDBはMySQL8.0のRDBと同一のネットワークで作成する必要があります。


レプリケーションの準備 (MySQL 8.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)コンソールからログアウト
  1. パラメータグループからRDB(MySQL8.4)に以下を設定して再起動
  1. RDB(MySQL8.4)にレプリケーション設定を追加
# コンピューティングVMにログイン

dig 【MySQL8.4のRDBのFQDN】

# コンピューティングVMからログアウト
  1. RDB(MySQL8.0)でレプリケーションユーザを作成
# RDB(MySQL8.0)コンソールにログイン

mysql>  CREATE USER 'repl_user'@'【digで引いたMySQL8.4のip】' IDENTIFIED BY '【パスワード】';
mysql>  GRANT REPLICATION SLAVE ON * . * TO 'repl_user'@'【digで引いたMySQL8.4のip】';
mysql>  FLUSH PRIVILEGES;

# RDB(MySQL8.0)コンソールからログアウト

レプリケーションの準備 (MySQL 8.4)

  1. RDB(MySQL8.4)にユーザ作成
# RDB(MySQL8.4)コンソールにログイン

mysql>  CREATE USER 'backup_user'@'【コンピューティングVMのip】' IDENTIFIED BY '【パスワード】';
mysql>  GRANT ALL PRIVILEGES ON * . * TO 'backup_user'@'【コンピューティングVMのip】';
mysql>  FLUSH PRIVILEGES;

# RDB(MySQL8.4)コンソールからログアウト
  1. パラメータグループからRDB(MySQL8.4)に以下を設定して再起動
  1. RDB(MySQL8.4)にレプリケーション設定を追加
# RDB(MySQL8.4)コンソールにログイン

CHANGE REPLICATION SOURCE TO
SOURCE_HOST='【MySQL8.0のfqdnもしくはip】',
SOURCE_USER='repl_user',
SOURCE_PASSWORD='【パスワード】',
SOURCE_PORT=3306,
SOURCE_AUTO_POSITION=1,
SOURCE_SSL=1;

# RDB(MySQL8.0)コンソールからログアウト

MySQL8.0のバックアップを取得しMySQL8.4へリストア

  1. コンピューティングVMからMySQL8.0のテーブル情報をバックアップ

※以下の操作では下記のような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(MySQL8.0)のFQDN】 > table_dump.sql
  1. コンピューティングVMからMySQL8.4へテーブル情報をリストア
mysql -h【RDB(MySQL8.4)のFQDN】 -ubackup_user -p【パスワード】  < table_dump.sql
  1. コンピューティングVMからMySQL8.0のデータをバックアップ
mysqldump --single-transaction --skip-column-statistics  --events --routines --triggers \
--databases 【移行が必要なデータベース1】 【移行が必要なデータベース2(必要なだけ記述)】 --ssl-mode=DISABLED \
-ubackup_user -p【パスワード】  -h【RDB(MySQL8.0)のFQDN】 > data_dump.sql

※当社が管理用に作成しているデータベース上のユーザー(idcf_admin、idcf_repl)がバックアップ対象に含まれると、移行後のMySQL8.4のRDBが正常に動作しなくなります。mysqldumpを実行する際はmysqlデータベースのデータを対象に含めないようお願いいたします。
※mysql.userテーブルなどは必要に応じて移行先RDBにて設定を追加する必要があります。
# コンピューティングVMからログアウト
  1. RDB(MySQL8.4)のGTID情報をリセット
# RDB(MySQL8.4)コンソールにログイン

RESET BINARY LOGS AND GTIDS;

# RDB(MySQL8.4)コンソールからログアウト
  1. コンピューティングVMからMySQL8.4へデータをリストア
# コンピューティングVMにログイン

mysql -h【RDB(MySQL8.4)のFQDN】 -ubackup_user -p【パスワード】 < data_dump.sql

# コンピューティングVMからログアウト

MySQL 8.4からMySQL 8.0へレプリケーションを実施

  1. MySQL8.4のRDBでバイナリログ情報のリセットを行いレプリケーションを開始する
# RDB(MySQL8.4)コンソールにログイン

mysql> START REPLICA;
mysql> SHOW REPLICA STATUS\G

# SHOW REPLICA STATUSの出力結果に下記が含まれていればレプリケーションは完了です
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
Seconds_Behind_Source: 0

MySQL8.4でデータが最新になったのを確認したのちにMySQL8.0への書き込みを停止し、アプリケーションの書き込みをMySQL8.4へ向けることで移行完了となります。