こんにちは。配信/インフラチームの佐々木です。
少し前の話になりますが、Bypass(DSP)のRDBをEC2上のMySQLからからRDS(Aurora)に移行しました。 データ容量が膨大なためmysqldumpを利用した移行は出来ず、色々苦労しましたのでそう言った点を記載します。
移行時のレプリケーション構成
移行するにあたり、事前に本番のデータをRDSに移しレプリケーションさせておく必要があるのですが、移行対象のMySQLはステートメントベースのレプリケーションのため、構成としては以下のようになります。
本番のMySQL(EC2)
↓ステートメントベースでレプリケーション
レプリケーション用のMySQL(EC2)
↓行ベースでレプリケーション
Aurora
AMIイメージを利用したMySQLのレプリケーション
前述の通りEC2 to EC2のレプリケーションをmysqldumpでは出来ないため、AMIイメージでMySQLをインスタンス丸ごとコピーしレプリケーションすることで実現しました。 あまり一般的なやり方では無いのですが、イメージを取得する直前(バイナリログの最後のポジション)のポジションを探し出し、レプリケーション開始時にそのポジションを指定することで実現しました。
RDSへのレプリケーション
EC2からRDSにレプリケーションする際はDMS(Database Migration Service)を利用するのが一般的と思います。
ですがDMSを利用してのレプリケーションが上手くいかなかったため、XtraBackupというMySQL用のバックアップツールを利用してS3上にデータをバックアップし、そのデータをRDSにリストア後、レプリケーションを開始することで実現しました。 このツールはバックアップ時にバイナリログのポジションもinfoとして残るため、バイナリログの差分を探す必要もありません。XtraBackup はDMSと違いCLIでの設定になりますが、使ってみた感じでは特に難しいところはなく、バックアップ時間もmysqldumpに比べると大幅に削減できますので、大容量のDBのバックアップ時にはオススメ出来るツールです。
Auroraの設定
RDSの仕様として文字コードが一部変更されてしまっていたので、クラスターのパラメータグループで設定し直しました。
参考:https://qiita.com/reoy/items/e355debf1e2b2abd703b
またユーザ関連の設定も一部差分が出ましたが、大きな問題はありませんでした。
今回は以上となります。