AzureのDatabase Migration Serviceを使ってAzure Database for MySQL 単一サーバーからAzure Database for MySQLフレキシブルサーバへデータを移行してみました。
mysql単一サーバ作成
mysql-single-orignという名前でインスタンスを作成しました。
こちら を使用して、dummyデータを作成しました。サイズは約15GBほど。
また、DMSで使用するユーザ (azure_migration) を作成しました。
単一サーバ前提条件確認
確認事項はチュートリアルから。
- コマンド SHOW VARIABLES LIKE 'log_bin' を実行して、ソース サーバーで log_bin が有効になっていることを確認します。
mysql> SHOW VARIABLES LIKE 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set (0.10 sec)
- bin ログを読み取って適用するために、ユーザーがソース サーバーで “REPLICATION CLIENT” と “REPLICATION SLAVE” のアクセス許可を持っていることを確認します。
mysql> SHOW GRANTS FOR 'azure_migration'@'%'; +------------------------------------------------------------------------------------------------------------------------+ | Grants for azure_migration@% | +------------------------------------------------------------------------------------------------------------------------+ | GRANT SELECT, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'azure_migration'@'%' | +------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.04 sec)
- 変更のレプリケートの移行をターゲットにしている場合は、ソース サーバーで binlog_expire_logs_seconds パラメーターを構成して、レプリカが変更をコミットする前に binlog ファイルが消去されないようにします。
サーバパラメータから確認する。 ひとまず2日に設定
mysqlフレキシブルサーバ作成
mysql-flex-targetという名前でmysqlフレキシブルサーバを作成しました。 何も手を付けていない真っ新なDBインスタンスに対して移行を実施してみます。
以下の構成で作成しました。
※作業を進めて分かったのですが、ソースサーバにあるデータベースと同名のデータベースをターゲットサーバに用意しないと移行できませんでした。
- Standard_D2ds_v4
- ストレージ32GB
- 396 IOPS
Azure Database Migration Service作成
移行シナリオはソースサーバ:mysqlのAzure Database for MySQL 単一サーバー、ターゲットサーバはAzure Database for MySQLを選択します。
移行サービスで移行に使うインスタンスの価格レベルはせっかくなら価格が高いものを選択してみたいと思います。価格はこちら
Microsoft.AzureDMS デプロイには30分ほどかかりました。
立ち上がったら移行プロジェクトを作成します。
ソースサーバ、ターゲットサーバでサーバパラメータに差異があると移行に失敗しました。
今回は5GB程度だったので、30分しないで移行が完了しました。
所感
DMSを使用しての移行は難しくはなかったです。ソースとターゲットの接続情報を入力するだけだし。
実稼働しているDBを移行する場合、データの移行よりもDBの設計や移行計画の作成に頭を悩ませるんじゃないかと思いました。