### 7.4.1 使用 mysqldump 以 SQL 格式转储数据

本节介绍如何使用[**mysql转储**](mysqldump.html)创建 SQL 格式的转储文件。有关重新加载此类转储文件的信息，请参阅[第 7.4.2 节，“重新加载 SQL 格式的备份”](reloading-sql-format-dumps.html).

默认，[**mysql转储**](mysqldump.html)将信息作为 SQL 语句写入标准输出。您可以将输出保存在文件中：

```
$> mysqldump [arguments] > file_name
```

要转储所有数据库，请调用[**mysql转储**](mysqldump.html)与[`--所有数据库`](mysqldump.html#option_mysqldump_all-databases)选项：

```
$> mysqldump --all-databases > dump.sql
```

要仅转储特定数据库，请在命令行上命名它们并使用[`--数据库`](mysqldump.html#option_mysqldump_databases)选项：

```
$> mysqldump --databases db1 db2 db3 > dump.sql
```

这[`--数据库`](mysqldump.html#option_mysqldump_databases)选项导致命令行上的所有名称都被视为数据库名称。没有这个选项，[**mysql转储**](mysqldump.html)将第一个名称视为数据库名称，将后面的名称视为表名称。

和[`--所有数据库`](mysqldump.html#option_mysqldump_all-databases)要么[`--数据库`](mysqldump.html#option_mysqldump_databases),[**mysql转储**](mysqldump.html)写[`创建数据库`](create-database.html)和[`采用`](use.html)每个数据库的转储输出之前的语句。这确保了在重新加载转储文件时，它会创建每个数据库（如果它不存在）并使其成为默认数据库，以便将数据库内容加载到它们来自的同一数据库中。如果要使转储文件在重新创建之前强制删除每个数据库，请使用[`--add-drop-database`](mysqldump.html#option_mysqldump_add-drop-database)选项也是如此。在这种情况下，[**mysql转储**](mysqldump.html)写一个[`删除数据库`](drop-database.html)每个前面的声明[`创建数据库`](create-database.html)陈述。

要转储单个数据库，请在命令行上为其命名：

```
$> mysqldump --databases test > dump.sql
```

在单数据库情况下，可以省略[`--数据库`](mysqldump.html#option_mysqldump_databases)选项：

```
$> mysqldump test > dump.sql
```

前面两个命令的区别在于没有[`--数据库`](mysqldump.html#option_mysqldump_databases)，转储输出不包含[`创建数据库`](create-database.html)要么[`采用`](use.html)陈述。这有几个含义：

-   重新加载转储文件时，必须指定默认数据库名称，以便服务器知道要重新加载哪个数据库。

-   对于重新加载，您可以指定与原始名称不同的数据库名称，这样您就可以将数据重新加载到不同的数据库中。

-   如果要重新加载的数据库不存在，则必须先创建它。

-   因为输出不包含[`创建数据库`](create-database.html)声明[`--add-drop-database`](mysqldump.html#option_mysqldump_add-drop-database)选项无效。如果你使用它，它不会产生[`删除数据库`](drop-database.html)陈述。

    要仅转储数据库中的特定表，请在数据库名称后面的命令行中命名它们：


```
$> mysqldump test t1 t3 t7 > dump.sql
```

默认情况下，如果在您创建转储文件的服务器上使用 GTID ([`gtid_mode=ON`](replication-options-gtids.html#sysvar_gtid_mode)),[**mysql转储**](mysqldump.html)包括一个`SET @@GLOBAL.gtid_purged`输出中的语句以添加来自[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed)在源服务器上设置为[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)在目标服务器上设置。如果您只转储特定的数据库或表，请务必注意包含的值[**mysql转储**](mysqldump.html)包括所有交易的 GTID[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed)在源服务器上设置，即使更改了数据库的抑制部分，或服务器上未包含在部分转储中的其他数据库。如果您只在目标服务器上重放一个部分转储文件，则额外的 GTID 不会对该服务器的未来操作造成任何问题。但是，如果您在目标服务器上重放包含相同 GTID 的第二个转储文件（例如，来自同一源服务器的另一个部分转储），则任何`SET @@GLOBAL.gtid_purged`第二个转储文件中的语句失败。为避免此问题，请设置[**mysql转储**](mysqldump.html)选项`--set-gtid-purge`到`离开`要么`已评论`在没有活动的情况下输出第二个转储文件`SET @@GLOBAL.gtid_purged`语句，或在重播转储文件之前手动删除该语句。
