フロムスクラッチ開発者ブログ

from scratch Engineers' Blog

Amazon RDSでMySQLからAuroraに移行する方法

こんにちは。フロムスクラッチのインフラチームに所属している山崎です。
今回は「Amazon RDSでMySQLからAuroraへの移行」について投稿させて頂きます。

 
AWSの運用管理者の方の中には、「MySQLをAuroraに移行したい」という思いを抱いている方もいるのではないでしょうか?私もそのうちの1人でした。結局、移行を実施したのですが、移行の方法についてまとまっている手順がAWSドキュメントやネット記事に無かったので、断片的なドキュメントをまとめつつ、検証を行い完成させました。今回は、その手順について共有させて頂きます。

 

f:id:daisuke-yamasaki:20180322171802p:plain

 

結論から言うと、「Auroraリードレプリカを作成後、移行対象MySQLの更新を止め(Read-onlyにする)、Auroraリードレプリカを昇格、その後アプリの接続をMySQLからAuroraに切り替える」という方法をとります。簡単なイメージ図は次の通りです。

f:id:daisuke-yamasaki:20180322174341p:plain

 

 こちらが手順の目次になります。以降、手順を解説していきます。

----------------------------------------------------------------------- 

◆事前作業
 1.移行対象MySQL専用のパラメータグループを作成
 2.Auroraリードレプリカを作成

  
◆移行作業
 1.移行対象MySQLのパラメータグループを変更して、Read-onlyにする
 2.レプリカラグが無いことを確認
 3.Auroraリードレプリカの昇格
 4.アプリの切り替え(移行対象MySQL→昇格したAurora)
 5.事後確認
 6.移行対象MySQLの削除

----------------------------------------------------------------------- 

 

<手順の解説>

◆事前作業

本番の移行作業では、「移行対象MySQLの更新を止める(Read-only)」、「Auroraリードレプリカが作成されている」の2点が必要です。そのための準備をここで実施します。

 

1.移行対象MySQL専用のパラメータグループを作成

Read-onlyはRDSのパラメータグループを用いて実現します。

(1)移行対象MySQLのパラメータグループをコピーして、ユニークなパラメータグループを作成

AWS RDSダッシュボード>移行対象MySQLのパラメータグループを選択>コピー>名前を任意にして作成

 

(2)(1)で作成したパラメータグループを編集、read_onlyの値を1にする

AWS RDSダッシュボード>(1)で作成したパラメータグループを選択>パラメータの編集>read_onlyの値を1にして作成

 


2.Auroraリードレプリカを作成


移行作業前に作成します。作成時間は環境によるので、事前検証を行い作成時間を見積もっておいて下さい。

(1)Auroraリードレプリカを作成

AWS RDSダッシュボード>移行対象MySQLを選択>インスタンスの操作>Auroraリードレプリカの作成を選択

作成時の設定は、Aurora独自の設定(パラメータグループ)以外は移行対象MySQLと同じにする。

 

 (2)作成完了の確認 

次の項目で、作成の完了を確認する。
・移行対象MySQLのレプリケーション欄で、Auroraリードレプリカのロールが”レプリカ”となっていること
・Auroraリードレプリカのレプリケーション欄で、DBクラスターロールが”レプリカ”であること

 

 

◆移行作業


移行作業では、Read-only、接続断がそれぞれ数分発生するので、サービス影響が最も無い時間帯に実施します。


1.移行対象MySQLのパラメータグループを変更して、Read-onlyにする

(1)移行対象MySQLのパラメータグループを、事前準備の1で作成したものに変更

AWS RDSダッシュボード>移行対象MySQLを選択>インスタンスの操作>変更>パラメータグループを変更

 

(2)移行対象MySQLを再起動する 

AWS RDSダッシュボード>移行対象MySQLを選択>インスタンスの操作>再起動

 
(3)移行対象MySQLでRead-onlyであることを確認

移行対象MySQLに接続後、次のようなコマンドを実行し、Read-onlyであることを確認する。

 


 mysql> create table hogehoge;

 次のエラーが出ること。
 ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it  cannot execute this statement

 

 

2.レプリカラグが無いことを確認

移行対象MySQLとAuroraリードレプリカとでデータの差(レプリカラグ)が無いことを確認する。Auroraリードレプリカに接続し以下を実行、レプリケーションラグが無いこと.

 


 mysql> show slave status\G

(`Seconds_Behind_Master: 0`)を確認する。

 


3.Auroraリードレプリカの昇格

(1)昇格を実行する

Auroraリードレプリカを選択>インスタンスの操作>リードレプリカの昇格

 

(2)昇格完了を確認する

昇格したAuroraの詳細欄で、DBクラスターロール=マスターを確認

 

 


4.アプリの切り替え(移行対象MySQL→昇格したAurora)

アプリの接続先(エンドポイント)を「移行対象MySQL」から「昇格したAurora」に切り替えます。切り替えは、ご自身の環境に応じて実行して下さい。


なお、この方法では移行対象MySQL(インスタンス名をAとする)を別名の昇格したAurora(インスタンス名をBとする)に変える形なります。インスタンス名が変わるので、それを避けたい場合は、次の手順でインスタンス名の入れ替えを行って下さい。 

Bの昇格後、Aのインスタンス名をCにする。
その後、Bのインスタンス名をAにする。

 


5.事後確認

ご自身の環境に応じて、適切に正常性を確認して下さい。

 


6.移行対象MySQLの削除

不要な移行対象MySQLを削除します。

AWS RDSダッシュボード>移行対象MySQLを選択>インスタンスの操作>削除

 

  

 

以上です。作業実施前は、必ず作業の検証(リハーサル)を実施して下さい。
ご覧頂きありがとうございました。