Ateam Tech Blog

エイチームのエンジニアたちによるテックブログ

Google CloudのDatabase Migration Serviceを使ってデータベース移行を行う

エイチームライフデザインでWebエンジニアをしている久保田です。

とあるシステムで、Amazon RDSからCloud SQLへの移行を行うためにGoogle CloudのDatabase Migration Service(DMS)を使用しているため、使用方法などをまとめます。

Database Migration Service(DMS)とは

Google Cloudが提供するデータベース移行サービスです。

cloud.google.com

オンプレ環境や他のクラウドサービスからGoogle Cloudへの移行を支援するサービスになります。
最小限のダウンタイムと少ない操作で、安全に移行を実現できます。

やりたいこと

今回説明する手順では、Amazon RDS(MySQL 5.6)からCloud SQL(MySQL 5.7)への移行を行います。

注意点と事前準備

今回の移行では事前に以下の準備を行いました。
移行要件によって必要な前提条件が異なるので、事前に確認しておきましょう。

バイナリログのフォーマット

レプリケーションを行うsource側(今回はAmazon RDS側)で、バイナリログが有効になっており、バイナリログのフォーマットがROWになっている必要があります。
異なる場合は、RDSのパラメータグループからbinlog_formatを変更する必要があります。
binlog_formatは静的パラメータとなるため、反映にはDBインスタンスの再起動が必要となります。
(サービスを稼働している場合、停止期間が数分ほど発生します)

また、バイナリログの保持期間を最低2日間に設定する必要があるようです。
ログのpositionを見失う可能性を抑えるため、長めに設定しておくと良いかと思います。

MySQLのMASTER_HOSTの最大長

MySQL 5.6ではsource側のMASTER_HOSTの最大長が60文字となるため、移行設定時にRDSのエンドポイント名をそのまま使うことはできません。

dev.mysql.com

今回は、所有している独自ドメインのDNSでCNAMEレコードを登録し、replication.example.comのような形でアクセスできるようにすることで回避しました。

移行ジョブでは「IP許可リスト」を使って移行元データベースにアクセスを行うことができるため、設定中に指定されたIPでアクセス制限を行いました。

cloud.google.com

レプリケーション用のDBユーザーの作成

MySQLのレプリケーションでは、replica側からsource側へのアクセスを行う際にREPLICATION SLAVE権限を持ったユーザーが必要となります。
また、ダンプを行う際にはSELECTおよびSHOW VIEW権限が必要となります。
source側で上記の権限を付与したレプリケーション用のユーザーを作成しておきました。

移行の開始手順

Google Cloud側で移行ジョブを作成し、移行を開始する

Google Cloudにログインし、Database Migration Serviceの「移行ジョブの作成」を開きます。
(事前にreplica側のCloud SQLのリソースを作成する必要はありません)

画面の指示に沿って、設定内容の入力を進めます。

移行ジョブの説明

移行ジョブのIDや名前を入力し、移行元データベースエンジンで「Amazon RDS for MySQL」を選択します。
送信先リージョンは、source側(Amazon RDS)のリージョンと同一のリージョンを選択します。

移行ジョブの種類では、「継続的」と「1回限り」を選択できます。
今回は継続的なレプリケーションを行いたいため、「継続的」を選択します。

移行ジョブの説明

全て入力するとページ下部に必要な前提条件が表示されるため、よく確認しておきましょう。

移行元の定義

続いて、移行元の定義を入力します。

ソース接続プロファイルの選択

「ソース接続プロファイルの選択」を押下すると、「接続プロファイルの作成」ボタンが出てくるため、開きます。

接続プロファイルを作成

ここで、source側の接続情報を入力していきます。
「ホスト名またはIPアドレス」の項目には、事前準備の項目で用意したsource側データベースのホスト名を入力します。
ユーザー名・パスワードは事前準備の項目で用意したレプリケーション用のユーザー情報を入力します。

接続プロファイルを作成したら、「移行元の定義」の画面に戻り、「ソース接続プロファイルの選択」で作成した接続プロファイルを指定します。

「初期ダンプを自動生成する(推奨)」を選択し、次に進みます。

宛先の作成

続いて、宛先の作成を行います。

移行先インスタンスを作成するための情報を入力します。

宛先の作成

データベースのバージョンは、「Cloud SQL for MySQL 5.7」を選択しました。
ソースバージョンより1つ上のバージョンまでが指定できるようです。

マシンタイプやストレージ等必要な情報を入力したら、次に進みます。
(Cloud SQLインスタンスが作成されます)

作成されたCloud SQLインスタンス

接続方法の選択

次に、接続方法を選択します。

接続方法の選択

事前準備の項目にも記載した通り、今回は「IP許可リスト」を指定します。

続行すると、送信元のIPアドレスが表示され、使用できるようになります。
source側のDBのファイアウォールで、こちらのIPアドレスからAmazon RDSのポートへの接続を許可するよう設定することで、接続ができるようになります。

移行ジョブをテストする

全ての設定の入力が完了したら、移行ジョブをテストすることができます。

移行ジョブをテストする

「ジョブをテスト」を押下すると、接続テストが実行され、問題なければ成功します。
接続時に問題が発生した場合はエラー内容が表示されるため、指示に従って設定等を修正します。

成功したら、「ジョブを作成」を押下すると完了します!

移行の開始

移行ジョブの一覧で、作成したジョブを選択し、画面上部の「開始」を押下すると、レプリケーションを開始できます。

レプリケーションを開始すると、移行ジョブの詳細画面から遅延やストレージ使用量のモニタリングができます。

移行のモニタリング

移行ジョブの停止と昇格

移行ジョブの詳細画面

移行ジョブの詳細画面の上部で、「プロモート」を押下すると、レプリカを昇格し、移行を停止します。
一時停止する場合は、「停止」を押下します。

まとめ

画面に表示される案内に沿って入力を進めるだけで、とても簡単に移行を開始できました。
自分でレプリケーションを行おうと思うと本当に大変な作業ですし、人為的な作業ミスなども起きやすいので、こういった機能があると本当に助かります。
Google Cloudへの移行を考えている方は、ぜひ利用してみてはいかがでしょうか。