ダンプと復元を使用した Azure Database for MySQL - フレキシブル サーバーへの MySQL データベースの移行
この記事では、Azure Database for MySQL フレキシブル サーバーでデータベースをバックアップして復元する一般的な 2 つの方法について説明します。
- コマンド ラインからのダンプと復元 (mysqldump を使用)。
- PHPMyAdmin を使用したダンプと復元。
データベースを Azure Database for MySQL フレキシブル サーバーに移行する方法の詳細とユース ケースについては、「データベース移行ガイド」を参照することもできます。 このガイドでは、Azure への MySQL 移行の計画と実行を成功させるためのガイダンスが提供されています。
開始する前に
このハウツー ガイドの手順を実行するには、以下が必要です。
- Azure Database for MySQL フレキシブル サーバー インスタンス - Azure portal
- コンピューターにインストールされている mysqldump コマンド ライン ユーティリティ
- ダンプおよび復元コマンドを実行する MySQL Workbench、またはサード パーティ製の他の 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 フレキシブル サーバー インスタンスの [概要] で接続情報を見つけます。
接続情報を MySQL Workbench に追加します。
高速データ読み込みの対象となる 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 フレキシブル サーバーの IOP は、ストレージ層の増加に合せて徐々に増加します。 読み込みを高速化するために、ストレージ層を増やして、プロビジョニングされる 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 データベースをエクスポートするには、次の操作を行います。
- phpMyAdmin を開きます。
- データベースを選択します。 左側のリストでデータベース名を選択します。
- エクスポート リンクを選択します。 新しいページが表示され、データベースのダンプが表示されます。
- [エクスポート] 領域で [すべて選択] リンクを選択して、データベース内のテーブルを選択します。
- [SQL options](SQL オプション) 領域で、適切なオプションを選択します。
- [ファイルとして保存] オプションと対応する圧縮オプションを選択し、[ Go] ボタンを選択します。 ファイルをローカルに保存するよう求めるダイアログ ボックスが表示されます。
PHPMyAdmin を使用したインポート
データベースのインポート操作は、エクスポートと似ています。 次の操作を実行してください。
- phpMyAdmin を開きます。
- phpMyAdmin セットアップ ページで、[追加] を選択して Azure Database for MySQL フレキシブル サーバー インスタンスを追加します。 接続の詳細とログイン情報を指定します。
- データベースを作成して適切な名前を付けたら、画面の左側でそのデータベースを選択します。 既存のデータベースを書き換えるには、データベース名を選択して、テーブル名の横のチェック ボックスをすべてオンにし、 [ドロップ] を選択して既存のテーブルを削除します。
- [SQL] リンクを選択します。表示されたページで、SQL コマンドを入力したり、SQL ファイルをアップロードしたりできます。
- 参照ボタンを使用して、データベース ファイルを検索します。
- [実行] ボタンを選択して、バックアップをエクスポートし、SQL コマンドを実行し、データベースを再作成します。
既知の問題
既知の問題、ヒント、コツについては、テクニカルコミュニティのブログを参照することをお勧めします。