MySQL Workbench を使用して、Amazon RDS for MySQL を Azure Database for MySQL に移行する
適用対象: Azure Database for MySQL - シングル サーバー
重要
Azure Database for MySQL シングル サーバーは廃止パスにあります。 Azure Database for MySQL フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for MySQL フレキシブル サーバーへの移行の詳細については、Azure Database for MySQL シングル サーバーの現状に関するページを参照してください
Amazon RDS for MySQL を Azure Database for MySQL に移行するには、MySQL Workbench Export/Import、Azure Database Migration Service (DMS)、MySQL のダンプと復元など、さまざまなユーティリティを使用できます。 ただし、Amazon RDS for MySQL を Azure Database for MySQL に移行するには、MySQL Workbench Migration Wizard を使用するのが簡単で便利です。
Migration Wizard を使用すれば、移行するスキームとオブジェクトを簡単に指定できます。 さらに、サーバーのログを見て、エラーとボトルネックをリアルタイムで把握できます。 そうしてエラーを発見したら、移行作業中にテーブル、データベース構造体またはオブジェクトを編集、変更することができ、最初からやり直すことなく移行を再開できます。
Note
Migration Wizard を使用して、Microsoft SQL Server、Oracle、PostgreSQL、MariaDB など、それ以外のものを移動することもできますが、そのことについてはこの記事では説明しません。
前提条件
移行作業を始める前に、下で説明するいくつかのパラメーターと機能を適切に構成、設定できているか確かめることをお勧めします。
ソースとターゲットのデータベースの文字セットが同じであることを確認します。
インポートまたは移行するデータまたはワークロードの量に合わせて、タイムアウト時間を適切な長さに設定します。
インポートまたは移行するデータベースのサイズに合わせて、
max_allowed_packet parameter
を適切な量に設定します。Azure Database for MySQL Server では InnoDB Storage エンジンだけをサポートしているため、すべてのテーブルで InnoDB を使用していることを確認してください。
ルート ユーザーまたはスーパーユーザー定義子 を含むすべてのトリガー、ストアド プロシージャ、その他の関数を削除、置換または変更してください (Azure Database for MySQL では Super ユーザーの権限をサポートしていません)。 重要なプロセスを実行している管理者ユーザーの名前で定義子 を置き換えるには、次のコマンドを実行します。
DELIMITER; ;/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`127.0.0.1`*/ /*!50003 DELIMITER; /* Modified to */ DELIMITER; /*!50003 CREATE*//*!50017 DEFINER=`AdminUserName`@`ServerName`*/ /*!50003 DELIMITER;
ユーザー定義関数 (UDF) をデータベース サーバーで実行している場合は、その mysql データベースに対する権限を削除する必要があります。 サーバーで UDF を実行しているかどうかを判断するには、次のクエリを使用します。
SELECT * FROM mysql.func;
UDF を実行していることが分かった場合は、次のクエリでその UDF を停止できます。
DROP FUNCTION your_UDFunction;
特に非常に大規模なデータベースをエクスポートするときは、そのツールを実行しているサーバーとエクスポート先に、エクスポート作業を実行するのに十分なディスク領域と処理性能 (vCores と CPU とメモリ) があることを確認してください。
ワークロードがファイアウォールなどのネットワーク セキュリティ層で隔てられている場合は、オンプレミスまたは AWS のインスタンスと Azure Database for MySQL の間に経路を作ります。
移行作業を開始する
移行作業を開始するには、MySQL Workbench にサインインしてホームアイコンをクリックします。
左側のナビゲーション バーで、移行ウィザード アイコンを選択します。
移行ウィザードの Overview ページが表示されます。
MySQL Server の ODBC ドライバーをインストールしてあるかどうか確認するため、 [ODBC Administrator を開く] をクリックします。
MySQL ODBC ドライバーがインストールされていない場合は、MySQL Workbench のインストールに使用した MySQL Installer を用いてドライバーをインストールします。 MySQL ODBC ドライバーのインストールの詳細は、次の参考ページをご覧ください。
- MySQL :: MySQL Connector/ODBC Developer Guide :: 4.1 Installing Connector/ODBC on Windows (MySQL :: MySQL Connector/ODBC 開発者ガイド :: 4.1 Connecter/ODBC を Windows にインストールする)
- ODBC Driver for MySQL: How to Install and Set up Connection (Step-by-step) – {coding}Sight (codingsight.com) (MySQL のODBC ドライバー: Connection をインストール、設定する方法 (ステップ バイ ステップ) – {coding}Sight (codingsight.com))
[ODBC Data Source Administrator] ダイアログ ボックスを閉じ、移行作業を続けます。
ソース データベース サーバーの接続パラメーターを構成する
[概要] ページで [移行開始] をクリックします。
[ソース選択] ページが表示されます。 このページで、ソースの RDBMS と接続のパラメーターを確認します。
[データベース システム] 欄で MySQL を選択します。
[保存された接続] 欄で、その RDBMS の保存された構成設定の 1 つを選択します。
ページ下部のチェックボックスに印を入れて好きな名前を入力することで、接続を保存できます。
[接続方法] 欄で [標準 TCP/IP] を選択します。
[ホスト名] 欄で、ソース データベース サーバーの名前を指定します。
[ポート] 欄で、3306 を指定し、サーバーに接続するためのユーザー名とパスワードを入力します。
[データベース] 欄では、移行するデータベースの名前が分かる場合はそれを入力します。分からなければ、この欄は空白にします。
[接続のテスト] をクリックして、MySQL Server インスタンスへの接続を確認します。
正確なパラメーターが入力できていれば、接続の成功を示すメッセージが表示されます。
[次へ] を選択します。
ターゲット データベース サーバーの接続パラメーターを構成する
[ターゲット選択] ページで、ソース サーバーへの接続設定と同様の手順により、移行先の MySQL Server インスタンスに接続するためのパラメーターを設定します。
接続の成功を確認するために、 [接続のテスト] をクリックします。
[次へ] を選択します。
移行するスキーマを選択する
Migration Wizard では、MySQL Server インスタンスと通信し、スキームのリストをソース サーバーから取得します。
[ログの表示] をクリックしてこの操作の内容を表示ます。 [スキーマの一覧の取得] ページには、ソース データベース サーバーからスキーマがどのように取得されているかが表示されます。
[次へ] をクリックして、すべてのスキーマが取得できたことを確認します。 Schemas Selection ページには、フェッチされたスキーマの一覧が表示されます。 このリストに表示されるスキーマだけを移行できます。
移行するスキーマを選んで [次へ] をクリックします。
オブジェクトの移行
次に、移行するオブジェクトを指定します。
[選択したものを表示する] をクリックしてから、 [選択可能オブジェクト] で、移行するオブジェクトを選んで追加します。 オブジェクトを追加すると、 Objects to Migrateの下にオブジェクトが表示されます。
[次へ] を選択します。
データを編集する
このセクションでは、移行するオブジェクトを編集できます。
[編集] ページの右上隅に View ドロップダウン メニューがあります。
View ドロップダウン メニューには、次の 3 つの項目があります。
- すべてのオブジェクト – すべてのオブジェクトを表示します。 このオプションを使用すれば、生成された SQL を、ターゲット データベース サーバーに使用する前に編集できます。 そのためには、オブジェクトを選んで [コードとメッセージを表示] をクリックします。 選択したオブジェクトに対して生成された MySQL コードを見る (そして編集する) ことができます。
- 移行の問題 – 移行中に発生したすべての問題を表示します。問題は内容を確認できます。
- 列マッピング – 列マッピング情報を表示します。 この表示方法では、名前を編集し、ターゲット オブジェクトの列を変更できます。
[次へ] を選択します。
ターゲット データベースを作成する
[ターゲット RDBMS にスキーマを作成する] チェックボックスに印を入れます。
既存のスキーマを変更、更新せずに維持することもできます。
ターゲット RDBMS でスキーマを作成できますが、 SQL スクリプト ファイルの作成 チェック ボックスをオンにして、ローカル コンピューターまたはその他の目的でファイルを保存することもできます。
[次へ] を選択します。
MySQL スクリプトを実行してデータベース オブジェクトを作成する
この例ではターゲット RDBMS にスキーマを作成するので、移行した SQL スクリプトは、ターゲット MySQL サーバーで実行されます。
スキーマを作成してオブジェクトを完成させたら、 [次へ] をクリックします。
[ターゲット結果の作成] ページに、作成されたオブジェクトの一覧と、作成中に発生したエラーの通知が表示されます。
このページで詳細を確認し、すべてが意図したとおりに完了したことを確かめます。
この記事の例では、エラーはありません。 対処するべきエラー メッセージがなければ、移行用スクリプトを編集できます。
オブジェクト 欄で、編集するオブジェクトを選択します。
[選択したオブジェクトの SQL CREATE スクリプト] で、SQL スクリプトを変更し、 [適用] をクリックして変更を保存します。
[オブジェクトの再作成] をクリックし、変更点を含むスクリプトを実行します。
このスクリプトが失敗するときは、生成されたスクリプトを編集しなければならない場合があります。 それから手動で SQL スクリプトを修正し、すべてを再び実行できます。 この記事では、何も変更せずにスクリプトをそのままにします。
[次へ] を選択します。
データの転送
この作業では、ソースの MySQL Server データベース インスタンスから、新たに作成したターゲットの MySQL データベース インスタンスに、データを移動します。 [データ転送設定] ページでこの作業を構成します。
このページでは、データ転送を設定できます。 この記事では既定値を使用します。
データ転送作業そのものを始めるには、 [次へ] をクリックします。 データ転送の進行状況バーがあります。
Note
データ転送作業の所要時間は、移行するデータベースのサイズに直接関係します。 ソース データベースが大きくなるほど作業に時間がかかります。大規模なデータベースでは数時間かかることもあり得ます。
転送が完了したら [次へ] をクリックします。
Migration Report ページが表示され、プロセス全体を要約したレポートが表示されます。
[終了] をクリックして Migration Wizard を閉じます。
これで移行は完了です。
移行したスキーマとテーブルの整合性を確認する
次に、MySQL ターゲット データベース インスタンスにログインして、移行したスキーマとテーブルが、MySQL ソース データベースに一致することを確認します。
この例では、Amazon RDS for MySQL の MyjolieDB のスキーマ (sakila、moda、items、customer、clothes、world、world_x) をすべて、Azure Database for MySQL の azmysql インスタンスに移行できたことが分かります。
テーブルと行の数を確認するには、次のクエリを両方のインスタンスで実行します。
SELECT COUNT (*) FROM sakila.actor;
Amazon RDS MySQL の予想される行数は 200 で、これは Azure Database for MySQL インスタンスと一致します。
上のクエリをすべてのスキーマとテーブルで 1 回 1 回実行することもできますが、何百、何千あるいは何百万というテーブルを扱う場合はかなり手間がかかってしまいます。 下のクエリを使えば、その代わりに、スキーマ (データベース) とテーブルのサイズを確認できます。
データベースのサイズを確認するには、次のクエリを実行します。
SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema;
テーブルのサイズを確認するには、次のクエリを実行します。
SELECT table_name AS "Table", ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)" FROM information_schema.TABLES WHERE table_schema = "database_name" ORDER BY (data_length + index_length) DESC;
ソース Amazon RDS MySQL インスタンスのスキーマ (データベース) サイズは、ターゲットの Azure Database for MySQL インスタンスと同じである必要があります。
スキーマ (データベース) のサイズが両方のインスタンスで同じなので、個別のテーブルのサイズを確認しなくても問題はないでしょう。 いずれの場合も、必要に応じて、上のクエリでテーブルのサイズを確認できす。
これで、問題なく移行が完了したことを確認できました。
次のステップ
- Azure Database for MySQL へのデータベースの移行については、「データベース移行ガイド」をご覧ください。
- MySQL/PostgreSQL アプリを Azure マネージド サービスに簡単に移行する方法のビデオをご覧ください。MySQL アプリを Azure Database for MySQL に移行する方法を示すデモが含まれています。