このセクションでは、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-purged
を OFF
または COMMENTED
に設定して、アクティブな SET @@GLOBAL.gtid_purged
ステートメントなしで 2 番目のダンプファイルを出力するか、ダンプファイルをリプレイする前にステートメントを手動で削除します。