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

本节介绍如何使用mysql转储创建 SQL 格式的转储文件。有关重新加载此类转储文件的信息,请参阅第 7.4.2 节,“重新加载 SQL 格式的备份”.

默认,mysql转储将信息作为 SQL 语句写入标准输出。您可以将输出保存在文件中:

$> mysqldump [arguments] > file_name

要转储所有数据库,请调用mysql转储--所有数据库选项:

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

要仅转储特定数据库,请在命令行上命名它们并使用--数据库选项:

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

--数据库选项导致命令行上的所有名称都被视为数据库名称。没有这个选项,mysql转储将第一个名称视为数据库名称,将后面的名称视为表名称。

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

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

$> mysqldump --databases test > dump.sql

在单数据库情况下,可以省略--数据库选项:

$> mysqldump test > dump.sql

前面两个命令的区别在于没有--数据库,转储输出不包含创建数据库要么采用陈述。这有几个含义:

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

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

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

  • 因为输出不包含创建数据库声明--add-drop-database选项无效。如果你使用它,它不会产生删除数据库陈述。

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

$> mysqldump test t1 t3 t7 > dump.sql

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