31
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS RDSでMySQL(5.6)からAuroraに移行した記録

Posted at

はじめに

先日、運用中のサービスで利用していたAmazon RDS for MySQLを
Amazon RDS for Auroraへ移行しました。
その際の移行手順を記録しておきます。

前提

MySQLからAuroraへ単純に移行だけ行うのであれば、
MySQLインスタンスからスナップショットを取り、スナップショットからAuroraを立ち上げるという手順で可能です。
ただし、今回は運用中のサービスで利用しているMySQLを移行するケースだったので、
メンテナンス期間を最小限に抑えることが必要でした。
そのため、
わずかなダウンタイムでの Amazon RDS MySQL または MariaDB DB インスタンスへのデータのインポート
を参考に、レプリケーションを利用して移行作業を行いました。


作業手順

1, MySQLにレプリケーション用のユーザを作成する

MySQLに接続し、レプリケーション用ユーザを作成します。

aws_1.png
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl_user@'.' IDENTIFIED BY 'repl_password';

2, AWSコンソール上でMySQLにリードレプリカを作成

AWS RDSコンソール上で、MySQLインスタンスを選択し
インスタンスの操作>リードレプリカの作成 からリードレプリカを作成します。
aws_2.png

3, レプリケーションの停止

手順2で作成したMySQLリードレプリカに接続し、レプリケーションを止めます。
またこの時にバイナリログファイル名、バイナリログポジションを記録しておきます。

mysql> call mysql.rds_stop_replication;
mysql> show slave status\G

show slave statusを実行した後に表示される
Master_Log_Fileがバイナリログファイル名、Read_Master_Log_Posがバイナリログポジションです。
※これらの情報は、後の手順でAuroraにレプリケーションを設定するときに使います。
aws_3.png

4, AWSコンソール上でMySQLリードレプリカからスナップショットを取得する

AWS RDSコンソール上で、MySQLリードレプリカを選択し
インスタンスの操作>スナップショットの取得 からスナップショットを作成します。

5, AWSコンソール上でAuroraインスタンスを作成する

AWSコンソールのスナップショット一覧から、手順4で作成したスナップショットを選択し
「スナップショットの移行」からAuroraインスタンスを作成します。

6, AWSコンソール上でパラメータグループを作成

AWSコンソール上でパラメータグループ>パラメータグループの作成 からパラメータグループを作成します。

Auroraではパラメータグループが
「パラメータグループ」「DBクラスターのパラメータグループ(Auroraのクラスタ全体に設定するパラメータグループ)」
の二タイプとなったので、それぞれのタイプについて作成します。

各々のパラメータについては適宜設定します。
今回は文字コードやスロークエリログなど、MySQLのパラメータグループと合わせた形で設定しました。

7, AWSコンソール上でAuroraインスタンスの設定を変更

AWS RDSコンソール上で、Auroraインスタンスを選択し
インスタンスの操作>変更 からAuroraインスタンス設定を変更します。
今回は、
・パラメータグループ(手順6で設定したものにする)
・セキュリティグループ
・バックアップ
・メンテナンスウィンドウ
を変更しました。
変更の保存後、AuroraインスタンスをAWS上で再起動し、パラメータグループの変更を適用します。

8, MySQL->Auroraのレプリケーションを開始する

Auroraにマスターユーザで接続し、レプリケーションの設定を行います。

mysql> call mysql.rds_set_external_master (
       "MySQLのエンドポイント"
       , "ポート(通常3306)"
       , "1で作成したユーザ名"
       , "1で作成したユーザパスワード"
       , "手順3で取得したバイナリログファイル名"
       , 手順3で取得したバイナリログポジション
       , 0
       );

設定が終わったら、↓のコマンドでレプリケーションを開始します。

mysql> call mysql.rds_start_replication;

レプリケーション開始後、show slave status\Gで確認できるSeconds_behind_masterを見て、ラグ状況を確認します。
aws_4.png

9, アプリケーションの参照系をAuroraに切り替え

アプリケーション側の参照系をAuroraに切り替えます。
問題ないようなら、AWSコンソール上でMySQLのリードレプリカを削除します。
aws_5.png
aws_6.png


ここからメンテナンス期間に入ります。

10, AWSコンソール上でMySQLのパラメータグループのread_onlyを1に変更

AWSコンソール上で、パラメータグループ一覧からMySQLに設定しているパラメータグループを編集し、read_onlyパラメータを1に変更します。
read_onlyパラメータは即時適用なので、
この時点からMySQLは参照はできますが更新ができなくなります。
aws_7.png

11, Auroraに接続し、MySQL->Auroraのレプリケーションを停止

Auroraにマスターユーザで接続し、以下のコマンドでレプリケーションを停止します。

mysql> call mysql.rds_stop_replication;

※停止前に、show slave status\Gを確認しレプリケーションラグが無いことを確認します
aws_8_1.png

12, アプリケーションの更新系をAuroraに切り替え

アプリケーション側の更新系をAuroraに切り替えます。
切り替えが終われば、アプリケーションでのデータベース参照・更新ともに可能になります。

aws_9_1.png

ここまででメンテナンス期間が終了です。


13, MySQLインスタンスの削除

しばらくサービスの監視を行い、問題ないようならMySQLインスタンスを削除します。
MySQLに接続し、レプリケーションを停止してからAWSコンソール上でインスタンス削除を行います。
aws_10.png

補足

今回の切り替えは以上の手順で行いました。
他に移行手順の例や、うちではこうやった! というような事例などありましたら教えて下さい。

#参考リンク
移行作業にあたって参考にさせていただいたページです。
わずかなダウンタイムでの Amazon RDS MySQL または MariaDB DB インスタンスへのデータのインポート
Amazon Auroraとのレプリケーション
実録!サービスを止めずに Amazon Aurora へ移行した話
RDS for MySQLからAuroraへ移行しました

31
35
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?