Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Dumping Data in SQL Format with mysqldump

9.4.1 使用 mysqldump 转储 SQL 格式的数据

本节描述了如何使用mysqldump创建SQL格式的备份文件。有关重新加载这样的备份文件的信息,请参阅第9.4.2节,“重新加载SQL格式备份”

mysqldump默认情况下,将信息作为SQL语句写入标准输出。你可以将输出保存到文件中:

$> mysqldump [arguments] > file_name

要备份所有数据库,请使用mysqldump并指定--all-databases选项:

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

要备份特定的数据库,请在命令行中指定它们,并使用--databases选项:

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

--databases选项会将命令行上的所有名称都当作数据库名称来处理。没有这个选项,mysqldump会将第一个名称当作数据库名称,后面的当作表名称。

使用--all-databases--databasesmysqldump会在每个数据库的备份输出之前写入CREATE DATABASEUSE语句。这确保了当备份文件被重新加载时,它会创建每个数据库,如果它不存在,并且将其设置为默认数据库,这样数据就可以在相同的数据库中加载,从而保持一致性。如果你想要在重新加载时强制删除每个数据库,然后再重建,请使用--add-drop-database选项。此时,mysqldump会在每个CREATE DATABASE语句之前写入一个DROP DATABASE语句。

要备份单个数据库,请在命令行中指定它的名称:

$> mysqldump --databases test > dump.sql

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

$> mysqldump test > dump.sql

前两个命令之间的区别是,没有--databases,备份输出中不会包含任何CREATE DATABASEUSE语句。这有几个含义:

  • 当你重新加载备份文件时,你必须指定一个默认数据库名称,以便服务器知道应该在哪个数据库中重新加载数据。

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

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

  • 由于输出不包含CREATE DATABASE语句,--add-drop-database选项没有效果。如果你使用它,它会产生一个DROP DATABASE语句,但不会写入到输出中。

要备份特定的表,只需在命令行中指定它们的名称,紧跟数据库名称:

$> mysqldump test t1 t3 t7 > dump.sql

默认情况下,如果服务器上启用了GTIDs(gtid_mode=ON),mysqldump在输出中包含一个mysqldump语句,用于将源服务器上的gtid_executed集中的GTIDs添加到目标服务器上的gtid_purged集中。如果您只备份特定的数据库或表,请注意mysqldump包含了源服务器gtid_executed集中所有事务的GTIDs,即使这些事务改变了被抑制的数据库部分,或者是该服务器上未包含在部分备份中的其他数据库。如果您只在目标服务器上重放一个部分备份文件,这些额外的GTIDs不会影响该服务器的未来操作。然而,如果您在目标服务器上重放第二个包含相同GTIDs(例如来自同一源服务器的另一个部分备份)的备份文件,第二个备份文件中的任何mysqldump语句都会失败。为了避免这个问题,您可以设置mysqldump选项--set-gtid-purgedOFFCOMMENTED,以便在输出第二个备份文件时不包含活动的mysqldump语句,或者在重放备份文件之前手动删除该语句。