MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  mysqldump による SQL フォーマットでのデータのダンプ

7.4.1 mysqldump による SQL フォーマットでのデータのダンプ

このセクションでは、mysqldump を使用して、SQL フォーマットのダンプファイルを作成する方法について説明します。 そのようなダンプファイルのリロードについては、セクション7.4.2「SQL フォーマットバックアップのリロード」を参照してください。

デフォルトで、mysqldump は情報を SQL ステートメントとして標準出力に書き込みます。 出力をファイルに保存できます。

shell> mysqldump [arguments] > file_name

すべてのデータベースをダンプするには、--all-databases オプションを付けて mysqldump を呼び出します。

shell> mysqldump --all-databases > dump.sql

特定のデータベースのみをダンプするには、コマンド行でそれらを指定し、--databases オプションを使用します。

shell> mysqldump --databases db1 db2 db3 > dump.sql

--databases オプションによって、コマンド行上のすべての名前がデータベース名として扱われます。 このオプションを使用しないと、mysqldump は最初の名前をデータベース名として、そのあとに続く名前をテーブル名として扱います。

--all-databases または --databases を使用すると、mysqldump は、各データベースのダンプ出力の前に、CREATE DATABASE および USE ステートメントを書き込みます。 これにより、ダンプファイルがリロードされると、それが各データベースが存在しなければ作成して、デフォルトのデータベースにするため、データベースの内容がそれらの作成元の同じデータベースにロードされます。 ダンプファイルに、各データベースを再作成する前にその削除を強制する場合、--add-drop-database オプションも使用します。 この場合、mysqldump は各 CREATE DATABASE ステートメントの前に、DROP DATABASE ステートメントを書き込みます。

単一のデータベースをダンプするには、コマンド行でそれを指定します。

shell> mysqldump --databases test > dump.sql

単一のデータベースの場合、--databases オプションを省略できます。

shell> mysqldump test > dump.sql

2 つの先述のコマンドの違いは、--databases を付けないと、ダンプの出力に CREATE DATABASE または USE ステートメントが含まれません。 これにはいくつかの問題があります。

  • ダンプファイルをリロードする場合、サーバーがリロードするデータベースを認識するように、デフォルトのデータベース名を指定する必要があります。

  • リロードする場合、元の名前と異なるデータベース名を指定でき、これにより、データを別のデータベースにリロードできます。

  • リロードするデータベースが存在しない場合、まずそれを作成する必要があります。

  • 出力には CREATE DATABASE ステートメントが含まれていないため、--add-drop-database オプションは効果がありません。 それを使用しても DROP DATABASE ステートメントは生成されません。

データベースから特定のテーブルのみをダンプするには、コマンド行でデータベース名に続いてそれらを指定します。

shell> mysqldump test t1 t3 t7 > dump.sql

デフォルトでは、ダンプファイル (gtid_mode=ON) を作成するサーバーで GTID が使用されている場合、mysqldump は、ソースサーバーの gtid_executed セットからターゲットサーバーの gtid_purged セットに GTID を追加する SET @@GLOBAL.gtid_purged ステートメントを出力に含めます。 特定のデータベースまたはテーブルのみをダンプする場合、mysqldump に含まれる値には、ソースサーバー上の gtid_executed セット内のすべてのトランザクションの GTID(データベースの抑制された部分を変更したトランザクションや、部分ダンプに含まれていなかったサーバー上のその他のデータベースも含む) が含まれることに注意してください。 ターゲットサーバーで部分ダンプファイルを 1 つしかリプレイしない場合、余分な GTID はそのサーバーの今後の操作で問題を引き起こしません。 ただし、同じ GTID を含むターゲットサーバー上の別のダンプファイル (たとえば、同じソースサーバーからの別の部分ダンプ) をリプレイすると、2 番目のダンプファイル内の SET @@GLOBAL.gtid_purged ステートメントは失敗します。 この問題を回避するには、mysqldump オプション --set-gtid-purgedOFF または COMMENTED に設定して、アクティブな SET @@GLOBAL.gtid_purged ステートメントなしで 2 番目のダンプファイルを出力するか、ダンプファイルをリプレイする前にステートメントを手動で削除します。


関連キーワード:  データベース, mysqldump, ダンプ, サーバー, バックアップ, ステートメント, リロード, テーブル, databases, リカバリ