ダンプと復元を使用して 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 フレキシブル サーバーへの移行の詳細については、「Azure Database for MySQL 単一サーバーの動作」を参照してください

この記事では、Azure Database for MySQL フレキシブル サーバーでデータベースをバックアップおよび復元する 2 つの一般的な方法について説明します。

  • コマンド ラインからのダンプと復元 (mysqldump を使用)。
  • PHPMy を使用したダンプと復元管理。

Azure Database for MySQL フレキシブル サーバーへの データベースの移行に関する詳細な情報とユース ケースについては、データベース移行ガイド を参照してください。 このガイドでは、Azure への MySQL 移行の計画と実行を成功させるためのガイダンスが提供されています。

開始する前に

このハウツー ガイドの手順を実行するには、以下が必要です。

ヒント

データベースのサイズが 1 TB を超える大規模なデータベースを移行しようとしている場合、並列エクスポートおよびインポートがサポートされる mydumper/myloader などのコミュニティ ツールの使用を検討してください。 大規模な MySQL データベースを移行する方法について確認します。

ダンプと復元の一般的なユースケース

最も一般的なユース ケースは次のとおりです。

  • 他のマネージド サービス プロバイダーからの移動 - ほとんどのマネージド サービス プロバイダーは、セキュリティ上の理由から物理ストレージ ファイルにアクセスできないようにしている可能性があるため、論理バックアップと復元が、移行するための唯一のオプションになります。

  • オンプレミス環境または仮想マシン からの移行 - Azure Database for MySQL フレキシブル サーバーでは、物理バックアップの復元はサポートされていません。これにより、論理バックアップと復元が唯一のアプローチになります。

  • バックアップ ストレージをローカル冗長ストレージから geo 冗長ストレージ に移動する - Azure Database for MySQL フレキシブル サーバーでは、バックアップ用にローカル冗長ストレージまたは geo 冗長ストレージを構成できます。これは、サーバーの作成時にのみ許可されます。 一度サーバーがプロビジョニングされると、バックアップ ストレージ冗長オプションを変更することはできません。 バックアップ ストレージをローカル冗長ストレージから geo 冗長ストレージに移動するには、ダンプと復元のみが唯一のオプションです。

  • 代替ストレージ エンジンから InnoDB への移行 - Azure Database for MySQL フレキシブル サーバーでは InnoDB ストレージ エンジンのみがサポートされるため、代替ストレージ エンジンはサポートされません。 テーブルが他のストレージ エンジンで構成されている場合は、Azure Database for MySQL フレキシブル サーバーに移行する前に、それらを InnoDB エンジン形式に変換します。

    たとえば、MyISAM テーブルを使用する WordPress または WebApp がある場合は、Azure Database for MySQL フレキシブル サーバーに復元する前に、最初に InnoDB 形式に移行してそれらのテーブルを変換します。 新しいテーブルを作成するときに、ENGINE=InnoDB 句によって使用するエンジンを設定し、復元前にデータを互換性のあるテーブルに転送します。

    INSERT INTO innodb_table SELECT * FROM myisam_table ORDER BY primary_key_columns
    

重要

  • 互換性の問題を回避するために、データベースをダンプするときに、ダンプ元とダンプ先のシステムで同じバージョンの MySQL が使用されていることを確認します。 たとえば、既存の MySQL サーバーがバージョン 5.7 の場合は、バージョン 5.7 を実行するように構成された Azure Database for MySQL フレキシブル サーバー インスタンスに移行する必要があります。 このコマンドは mysql_upgrade 、Azure Database for MySQL フレキシブル サーバー インスタンスでは機能せず、サポートされていません。
  • MySQL のバージョン間でアップグレードする必要がある場合は、まず、独自の環境の下位バージョンのデータベースを上位バージョンの MySQL にダンプまたはエクスポートします。 次に、Azure Database for MySQL フレキシブル サーバー インスタンスへの移行を試みる前に実行 mysql_upgrade します。

パフォーマンスに関する考慮事項

パフォーマンスを最適化するには、大規模なデータベースをダンプするときに、次の考慮事項に注意してください。

  • データベースをダンプするときに、mysqldump で exclude-triggers オプションを使用します。 データの復元中にトリガー コマンドが実行されないように、ダンプ ファイルからトリガーを除外します。
  • データをダンプする前に、トランザクション分離モードを REPEATABLE READ に設定し、START TRANSACTION SQL ステートメントをサーバーに送信するには single-transaction を使用します。 1 つのトランザクション内の多数のテーブルをダンプすると、復元中に余分なストレージが使用されます。 LOCK TABLES により、保留中のトランザクションが暗黙的にコミットされるため、single-transaction オプションと lock-tables オプションは相互に排他的です。 大きなテーブルをダンプするには、single-transaction オプションと quick オプションを組み合わせてください。
  • 複数の値リストを含む複数行の構文 extended-insert を使用します。 その結果、ダンプ ファイルが小さくなり、ファイルの再読み込み時に挿入が高速化されます。
  • データベースをダンプするときに、mysqldump で order-by-primary オプションを使用します。このオプションを使用すると、主キー順にデータがスクリプト化されます。
  • データをダンプするときに、mysqldump で disable-keys オプションを使用して、読み込み前に外部キー制約を無効にします。 外部キーのチェックを無効にすると、パフォーマンスが向上します。 読み込み後に制約を有効にし、データを検証して参照整合性を確認します。
  • パーティション テーブルを適宜使用します。
  • データを並列で読み込みます。 リソースの上限に達するような過剰な並列処理を避け、Azure Portal で使用可能なメトリックを使用してリソースを監視します。
  • データベースをダンプするときに、mysqldump で defer-table-indexes オプションを使用します。このオプションを使用すると、テーブル データが読み込まれてからインデックスが作成されます。
  • バックアップ ファイルを Azure blob/ストアにコピーし、そこから復元します。これは、インターネット経由で復元するよりもかなり高速であるはずです。

ターゲットの Azure Database for MySQL フレキシブル サーバー インスタンスにデータベースを作成する

データを移行するターゲットの Azure Database for MySQL フレキシブル サーバー インスタンスに空のデータベースを作成します。 MySQL Workbench や mysql.exe などのツールを使用して、データベースを作成します。 データベースの名前は、ダンプされたデータが含まれるデータベースと同じにすることも、別の名前でデータベースを作成することもできます。

接続するには、Azure Database for MySQL フレキシブル サーバー インスタンスの概要接続情報を見つけます。

Find the connection information in the Azure portal

接続情報を MySQL Workbench に追加します。

MySQL Workbench Connection String

高速データ読み込みのためのターゲット Azure Database for MySQL フレキシブル サーバー インスタンスの準備

データの読み込みを高速化するためにターゲットの Azure Database for MySQL フレキシブル サーバー インスタンスを準備するには、次のサーバー パラメーターと構成を変更する必要があります。

  • max_allowed_packet – 1073741824 (それは、1GB) に設定して、行が長いために発生するオーバーフローイシューを防ぎます。
  • slow_query_log – OFF に設定して、低速のクエリ ログを無効にします。 これにより、データの読み込み中の低速クエリ ログによって発生するオーバーヘッドがなくなります。
  • query_store_capture_mode – NONE に設定し、クエリ ストアを無効にします。 これにより、クエリ データ ストアによるサンプリング アクティビティで発生するオーバーヘッドがなくなります。
  • innodb_buffer_pool_size – 移行中に、サーバーをポータルの価格レベルから 32 vCore メモリ最適化 SKU にスケールアップし、innodb_buffer_pool_size を増やします。 Innodb_buffer_pool_sizeは、Azure Database for MySQL フレキシブル サーバー インスタンスのコンピューティングをスケールアップすることによってのみ増やすことができます。
  • innodb_io_capacity & innodb_io_capacity_max - IO 使用率を向上させて移行速度を最適化するために、Azure portal のサーバー パラメーターから 9000 に変更します。
  • innodb_write_io_threads および innodb_write_io_threads - Azure portal のサーバー パラメーターで 4 に変更し、移行の速度を向上させます。
  • ストレージ層のスケールアップ – Azure Database for MySQL フレキシブル サーバーの IOPS は、ストレージ層の増加に伴って徐々に増加します。 読み込みを高速化するために、ストレージ層を増やして、プロビジョニングされる IOP を増やすことができます。 ストレージはスケールアップのみ可能で、スケールダウンはできないことに注意してください。

移行が完了したら、サーバー パラメーターとコンピューティング層の構成を前の値に戻すことができます。

mysqldump ユーティリティを使用したダンプと復元

mysqldump を使用したコマンド ラインからのバックアップ ファイルの作成

ローカルのオンプレミス サーバーまたは仮想マシンで既存の MySQL データベースをバックアップするには、次のコマンドを実行します。

mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql]

指定するパラメーターは次のとおりです。

  • [uname]: データベースのユーザー名
  • [pass]: データベースのパスワード (注 -p とパスワードの間にスペースがありません)
  • [dbname]: データベースの名前
  • [backupfile.sql]: データベース バックアップのファイル名
  • [--opt]: mysqldump オプション

たとえば、MySQL サーバー上の、ユーザー名が "testuser" で、パスワードが設定されていない "testdb" という名前のデータベースを、testdb_backup.sql ファイルにバックアップするには、次のコマンドを使用します。 このコマンドは、testdb データベースを testdb_backup.sql というファイルにバックアップします。このファイルには、データベースを再作成するために必要なすべての SQL ステートメントが含まれます。 ユーザー名 「testuser」 には、少なくとも、ダンプされたテーブルに対する SELECT 特権、ダンプされたビューの SHOW VIEW、ダンプされたトリガーの TRIGGER、および --single-transactionオプションが使用されていない場合は LOCK TABLES が含まれていることを確認してください。

GRANT SELECT, LOCK TABLES, SHOW VIEW ON *.* TO 'testuser'@'hostname' IDENTIFIED BY 'password';

mysqldump を実行した testdb データベースのバックアップの作成

mysqldump -u root -p testdb > testdb_backup.sql

バックアップするデータベースのテーブルを選択するには、テーブル名をスペースで区切って指定します。 たとえば、"testdb" の table1 テーブルと table2 テーブルだけをバックアップするには、次のように指定します。

mysqldump -u root -p testdb table1 table2 > testdb_tables_backup.sql

複数のデータベースを一度にバックアップするには、 --databaseのスイッチを使用して、データベース名をスペースで区切って指定します。

mysqldump -u root -p --databases testdb1 testdb3 testdb5 > testdb135_backup.sql

コマンド ラインを使用した MySQL データベースの復元

ターゲット データベースを作成したら、mysql コマンドを使用して、ダンプ ファイルから新しく作成された特定のデータベースにデータを復元できます。

mysql -h [hostname] -u [uname] -p[pass] [db_to_restore] < [backupfile.sql]

この例では、ターゲットの Azure Database for MySQL フレキシブル サーバー インスタンスで新しく作成されたデータベースにデータを復元します。

この mysql単一サーバーで使用する方法の例を次に示します:

mysql -h mydemoserver.mysql.database.azure.com -u myadmin@mydemoserver -p testdb < testdb_backup.sql

この mysqlフレキシブル サーバーで使用する方法の例を次に示します:

mysql -h mydemoserver.mysql.database.azure.com -u myadmin -p testdb < testdb_backup.sql

PHPMyAdmin を使用したダンプと復元

以下の手順に従って、PHPMyadmin を使用してデータベースをダンプおよび復元します。

注意

単一サーバーの場合、ユーザー名は "username@servername" という形式にする必要がありますが、フレキシブル サーバーの場合は "ユーザー名" だけを使用します。フレキシブル サーバーに "username@servername" を使用した場合、接続は失敗します。

PHPMyadmin を使用したエクスポート

エクスポートには一般的なツールである phpMyAdmin を使用できます。このツールは、既にローカル環境にインストールされている可能性があります。 PHPMyAdmin を使用して MySQL データベースをエクスポートするには、次の操作を行います。

  1. phpMyAdmin を開きます。
  2. データベースを選択します。 左側のリストでデータベース名を選択します。
  3. エクスポート リンクを選択します。 新しいページが表示され、データベースのダンプが表示されます。
  4. [エクスポート] 領域で [すべて選択] リンクを選択して、データベース内のテーブルを選択します。
  5. [SQL options](SQL オプション) 領域で、適切なオプションを選択します。
  6. [ファイルとして保存] オプションと対応する圧縮オプションを選択し、[ Go] ボタンを選択します。 ファイルをローカルに保存するよう求めるダイアログ ボックスが表示されます。

PHPMyAdmin を使用したインポート

データベースのインポート操作は、エクスポートと似ています。 次の操作を実行してください。

  1. phpMyAdmin を開きます。
  2. phpMy管理 セットアップ ページで、[追加] を選択して、Azure Database for MySQL フレキシブル サーバー インスタンスを追加します。 接続の詳細とログイン情報を指定します。
  3. データベースを作成して適切な名前を付けたら、画面の左側でそのデータベースを選択します。 既存のデータベースを書き換えるには、データベース名を選択して、テーブル名の横のチェック ボックスをすべてオンにし、 [ドロップ] を選択して既存のテーブルを削除します。
  4. [SQL] リンクを選択します。表示されたページで、SQL コマンドを入力したり、SQL ファイルをアップロードしたりできます。
  5. 参照ボタンを使用して、データベース ファイルを検索します。
  6. [実行] ボタンを選択して、バックアップをエクスポートし、SQL コマンドを実行し、データベースを再作成します。

既知の問題

既知の問題、ヒント、コツについては、テクニカルコミュニティのブログを参照することをお勧めします。

次のステップ