Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 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 将写入 DROP DATABASE 语句,紧接着是 CREATE 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 将在输出中包含一个 SET @@GLOBAL.gtid_purged 语句,以将源服务器上的 gtid_executed 集合中的GTIDs添加到目标服务器上的 gtid_purged 集合中。如果您只转储特定的数据库或表格,需要注意的是,mysqldump 包含的值包括源服务器上的 gtid_executed 集合中的所有事务的GTIDs,即使这些事务更改了数据库的某些部分或其他数据库,而这些数据库不在partial dump中。如果您在目标服务器上重放一个partial dump文件,这些额外的GTIDs不会对服务器的未来操作造成任何问题。但是,如果您在目标服务器上重放第二个dump文件,其中包含相同的GTIDs(例如,来自同一个源服务器的另一个partial dump),那么第二个dump文件中的任何 SET @@GLOBAL.gtid_purged 语句将失败。要避免这个问题,可以将 mysqldump 选项 --set-gtid-purged 设置为 OFFCOMMENTED,以便输出第二个dump文件时不包含活动的 SET @@GLOBAL.gtid_purged 语句,或者手动删除语句,然后重放dump文件。