本节描述如何使用 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
或 --databases
, mysqldump 将写入 CREATE DATABASE
和 USE
语句,以便在重新加载时创建每个数据库,如果不存在,则创建它,并将其设置为默认数据库,以便将数据加载到原始数据库中。如果你想强制删除每个数据库,然后重新创建它,请使用 --add-drop-database
选项。在这种情况下, mysqldump 将写入 DROP DATABASE
语句,紧接着是 CREATE DATABASE
语句。
要转储单个数据库,请在命令行中命名它:
$> mysqldump --databases test > dump.sql
在单个数据库的情况下,可以省略 --databases
选项:
$> mysqldump test > dump.sql
两个命令之间的区别是,省略 --databases
选项时,转储输出不包含 CREATE DATABASE
或 USE
语句。这有几个含义:
-
重新加载转储文件时,必须指定默认数据库名称,以便服务器知道将数据重新加载到哪个数据库中。
-
重新加载时,可以指定一个不同的数据库名称,以便将数据重新加载到不同的数据库中。
-
如果要重新加载的数据库不存在,必须首先创建它。
-
因为输出不包含
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
设置为 OFF
或 COMMENTED
,以便输出第二个dump文件时不包含活动的 SET @@GLOBAL.gtid_purged
语句,或者手动删除语句,然后重放dump文件。