RDS for MySQLからAuroraに移行しました
RDS for MySQLで運用していたデータベースをAuroraに移行しました。
3行まとめ
・簡単
・AWSコンソールだけで作業が完了する
・タイムゾーンの扱いに注意
・AWSコンソールだけで作業が完了する
・タイムゾーンの扱いに注意
手順
1.RDSのAuroraリードレプリカを作成する
2.Auroraリードレプリカのレプリケーション状況を確認する
3.リードレプリカをマスターに昇格する
2.Auroraリードレプリカのレプリケーション状況を確認する
3.リードレプリカをマスターに昇格する
1.RDSのリードレプリカを作成する
1.RDSのリードレプリカを作成する
AWSコンソールからRDSのAuroraリードレプリカを作成します。アクション→Auroraリードレプリカの作成。
ここで1こはまって、タイムゾーン間違えました。要注意。RDS側のタイムゾーンがどのような場合でも、Auroraインスタンスはsystem_time_zone=UTC, time_zone=SYSTEMとして作成されます。
これを解決するにはAuroraクラスター側のパラメータグループで、time_zoneを移行前の状態に合わせる必要があります。
ただしAWSによると、DBレイヤーではUTCを利用したほうがいいよとのことです。
+------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | UTC | | time_zone | SYSTEM | +------------------+--------+そのため、JSTの環境からAuroraを作成すると時刻が9時間ずれてしまいます。
これを解決するにはAuroraクラスター側のパラメータグループで、time_zoneを移行前の状態に合わせる必要があります。
ただしAWSによると、DBレイヤーではUTCを利用したほうがいいよとのことです。
RDS DB インスタンスではすべて、デフォルトで UTC/GMT が使用されており、タイムゾーンの変更はオプションです。データベースレイヤーでは UTC タイムゾーンを使用することを強くお勧めします。ローカルタイムゾーンを使用する必要がある場合は、必ずアプリケーションレイヤーでタイムゾーンを変更してください。Amazon RDS データベースインスタンスのタイムゾーンを変更する方法を教えてくださいより
さて、リードレプリカが作成されると以下のように、RDSのロールが「マスター」に、Auroraクラスターのロールが「クラスター」、DBのロールが「書き込み」となります。
また、クラスタの詳細を表示すると、レプリケーションソースとしてマスターのARNが表示されます
2.Auroraリードレプリカのレプリケーション状況を確認する
Auroraのインスタンスにmysqlコマンドで接続します。
以下のコマンドでレプリケーションの状況を確認します。
以下のコマンドでレプリケーションの状況を確認します。
> show slave status \G Seconds_Behind_Master: 0また、master側でshow master statusコマンドを実行して表示されたPositionの値とレプリカ側で表示されたExec_Master_Log_Posの値を比較することもできます。
3.リードレプリカをマスターに昇格する
さて、いよいよレプリカ(slave)をマスターに昇格させます。作業は簡単で、アクション→リードレプリカの昇格を選択するだけです。
完了すると、マスターだったRDSが通常の「インスタンス」に戻ります。この時点でレプリケーションは解除され、それぞれ独立したDBになります。
データベース設定のクラスタロールが「レプリカ」から「マスター」になりました。
あとは旧DBのスナップショットを取得したら削除して作業完了です。