mysqlpump-数据库备份程序

mysqlpump程序执行逻辑备份,产生一组能够被执行以再现原始数据库对象定义和表数据的SQL语句。它转储一个或多个MySQL数据库以进行备份或转移到另一台SQL服务器。

mysqlpump功能包括:

  • 并行处理数据库以及数据库中的对象,以加快转储过程
  • 更好地控制要转储的数据库和数据库对象(表,存储的程序,用户帐户)
  • 把user帐户倾倒作为帐户管理语句(CREATE USER, GRANT),而不是插入mysql系统数据库
  • 创建压缩输出的能力
  • 进度指示器(值是估计值)
  • 对于转储文件重新加载,InnoDB通过在插入行后添加索引,可以更快地为表 创建二级索引

注意
mysqlpump使用MySQL 5.7中引入的MySQL功能,因此假定与MySQL 5.7或更高版本一起使用。

mysqlpump至少需要具有SELECT权限来转储表,SHOW VIEW权限来转储视图,TRIGGER权限来转储触发器以及未使用--single-transaction选项的 情况下LOCK TABLES特权。在SELECT上权限mysql系统数据库需要转储用户定义。如选项说明中所述,某些选项可能需要其他特权。
要重新加载转储文件,您必须具有执行该文件所包含的语句所需的特权,例如CREATE对那些语句创建的对象的适当特权。

注意
在Windows上使用PowerShell通过输出重定向创建的转储将创建具有UTF-16编码的文件:

shell> mysqlpump [options] > dump.sql

但是,不允许将UTF-16作为连接字符集,因此转储文件将无法正确加载。要变通解决此问题,请使用 --result-file选项,该选项以ASCII格式创建输出:

shell> mysqlpump [options] --result-file=dump.sql

mysqlpump调用语法

默认情况下,mysqlpump转储所有数据库(mysqlpump Restrictions中注明的某些例外 )。要明确指定此行为,请使用以下--all-databases选项:

shell> mysqlpump --all-databases

要转储单个数据库或该数据库中的某些表,请在命令行上命名该数据库,还可以选择后面加上表名:

shell> mysqlpump db_name
shell> mysqlpump db_name tbl_name1 tbl_name2 ...

要将所有名称参数都视为数据库名称,请使用以下 --databases选项:

shell> mysqlpump --databases db_name1 db_name2 ...

默认情况下,即使您转储包含授权表的mysql系统数据库,mysqlpump也不转储用户帐户定义。要将授权表内容作为逻辑定义以CREATE USER 和 GRANT语句的形式转储,请使用--users选项并禁止所有数据库转储:

shell> mysqlpump --exclude-databases=% --users

在前面的命令中,%是一个与该-exclude-databases选项的所有数据库名称匹配的通配符 。
mysqlpump支持几个选项,包括或排除数据库、表、存储的程序和用户定义。
要重新加载转储文件,请执行其中包含的语句。例如,使用mysql客户端:

shell> mysqlpump [options] > dump.sql
shell> mysql < dump.sql

以下讨论提供了附加的 mysqlpump使用示例。

要查看mysqlpump 支持的选项列表,请发出命令mysqlpump --help。

mysqlpump选项摘要
mysqlpump支持以下选项,可以在命令行或选项文件的[mysqlpump]和[client]组中指定这些选项。

--help, -?
显示帮助消息并退出。

--add-drop-database
在每个CREATE DATABASE语句之前写一个DROP DATABASE 语句。

--add-drop-table
在每个CREATE TABLE 语句之前写一个DROP TABLE语句。

--add-drop-user
在每个CREATE USER 语句之前写一个DROP USER语句。

--add-locks
用LOCK TABLES和UNLOCK TABLES语句包围每个表转储。重新装入转储文件时,这可以加快插入速度。

此选项不适用于并行性,因为 INSERT可以交错来自不同表的语句,并且 UNLOCK TABLES在一个表的插入结束之后可能会释放保留有插入内容的表上的锁。
--add-locks并且 --single-transaction是互斥的。

--all-databases, -A
转储所有数据库(在mysqlpump限制中注明了某些例外 )。如果未明确指定其他行为,则这是默认行为。
--all-databases并且 --databases是互斥的。
在MySQL 8.0之前,使用以下选项时,不需要mysqldump和 mysqlpump的 --routines和 --events选项 包括存储的例程和事件 :转储包括 mysql 系统数据库,因此还包含存储的例程和事件定义的mysql.proc和mysql.event。从MySQL 8.0开始, mysql.event和mysql.proc表不再使用。对应对象的定义存储在数据字典表中,但这些表不会转储。要将存储的例程和事件包括在使用创建的转储中--all-databases,请显式使用 --routines和 --events选项。

--bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。

--character-sets-dir=path
字符集的安装目录。

--column-statistics
ANALYZE TABLE重新加载转储文件时,在输出中 添加语句以生成转储表的直方图统计信息。默认情况下,此选项是禁用的,因为大型表的直方图生成可能会花费很长时间。

--complete-insert
编写INSERT 包含列名称的完整语句。

--compress, -C
尽可能压缩客户端和服务器之间发送的所有信息。
从MySQL 8.0.18开始,不推荐使用此选项。它将在将来的MySQL版本中删除。请参阅旧版连接压缩配置。

--compress-output=algorithm
默认情况下,mysqlpump不压缩输出。此选项使用指定的算法指定输出压缩。允许的算法为 LZ4和ZLIB。
要解压缩压缩的输出,您必须具有适当的实用程序。如果系统命令lz4和openssl zlib 不可用,则MySQL发行版包括lz4_decompress和 zlib_decompress实用程序,可用于解压缩使用 --compress-output=LZ4和--compress-output=ZLIB选项压缩的mysqlpump输出 。

--compression-algorithms=value
用于连接到服务器的允许的压缩算法。可用算法与protocol_compression_algorithms 系统变量相同 。默认值为 uncompressed。
该选项是在MySQL 8.0.18中添加的。

--databases, -B
通常,mysqlpump将命令行上的名字参数视为数据库名称,并将其后的名称视为表名称。使用此选项,它将所有名称参数视为数据库名称。 CREATE DATABASE语句包含在每个新数据库之前的输出中。
--all-databases并且 --databases是互斥的。

--debug-check
程序退出时,打印一些调试信息。

--debug-info, -T
程序退出时,打印调试信息以及内存和CPU使用情况统计信息。

--default-auth=plugin
有关使用哪个客户端身份验证插件的提示。
--default-character-set=charset_name
使用charset_name作为默认字符集。

--default-parallelism=N
每个并行处理队列的默认线程数。预设值为2。
该--parallel-schemas 选项还影响并行性,可用于覆盖默认线程数。
使用 --default-parallelism=0 和不使用--parallel-schemas 选项时,mysqlpump作为单线程进程运行,并且不创建队列。
启用并行性后,可以对来自不同数据库的输出进行交织。

--defaults-extra-file=file_name
在全局选项文件之后但在用户选项文件之前(在Unix上)读取此选项文件。如果文件不存在或无法访问,则发生错误。 如果给出file_name为相对路径名而不是完整路径名,则相对于当前目录解释。
有关此选项和其他选项文件选项的更多信息,请参见第4.2.2.3节“影响选项文件处理的命令行选项”。

--defaults-file=file_name
仅使用给定的选项文件。如果文件不存在或无法访问,则发生错误。 如果给出file_name为相对路径名而不是完整路径名,则相对于当前目录解释。
例外:即使这样--defaults-file,客户端程序也会 读取.mylogin.cnf。

--defaults-group-suffix=str
不仅阅读常规选项组,而且阅读具有常规名称和后缀的组 str。例如, mysqlpump通常读取 [client]和 [mysqlpump]组。如果--defaults-group-suffix=_other 给出了该 选项,则mysqlpump还将读取 [client_other]和 [mysqlpump_other]组。

--defer-table-indexes
在转储输出中,将每个表的索引创建延迟,直到表的行已加载。这适用于所有存储引擎,但InnoDB仅适用于二级索引。
默认情况下启用此选项。用于 --skip-defer-table-indexes 禁用它。

--events
在输出中包括转储数据库的事件计划程序事件。事件转储需要EVENT这些数据库的 特权。
使用--eventscontains CREATE EVENT语句生成的输出 将创建事件。
默认情况下启用此选项。用于 --skip-events 禁用它。

--exclude-databases=db_list
不要将数据库转储到中db_list,该数据库是一个或多个逗号分隔的数据库名称的列表。此选项的多个实例是可加的。

--exclude-events=event_list
不要将数据库转储到中 event_list,后者是一个或多个逗号分隔的事件名称的列表。此选项的多个实例是可加的。

--exclude-routines=routine_list
不要将事件转储到中routine_list,该事件是一个或多个逗号分隔的例程(存储过程或函数)名称的列表。此选项的多个实例是可加的。

--exclude-tables=table_list
不要将表转储到中 table_list,后者是一个或多个逗号分隔的表名的列表。此选项的多个实例是可加的。

--exclude-triggers=trigger_list
不要将触发器转储到中 trigger_list,后者是一个或多个逗号分隔的触发器名称的列表。此选项的多个实例是可加的。

--exclude-users=user_list
不要将用户帐户转储到中user_list,该帐户是一个或多个逗号分隔的帐户名的列表。此选项的多个实例是可加的。

--extended-insert=N
INSERT使用包含多个VALUES列表的多行语法 编写语句 。这样可以生成较小的转储文件,并在重新加载文件时加快插入速度。
选项值指示每个INSERT语句中要包括的行数。默认值为250。值为1时,INSERT每个表行产生一条 语句。

--get-server-public-key
从服务器请求基于RSA密钥对的密码交换所需的公共密钥。此选项适用于使用caching_sha2_password身份验证插件进行身份验证的客户端 。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。
如果给出--server-public-key-path=file_name并指定了有效的公共密钥文件,则它优先于--get-server-public-key。

--host=host_name, -h host_name
从给定主机上的MySQL服务器中转储数据。

--include-databases=db_list
将数据库转储到中db_list,该数据库是一个或多个逗号分隔的数据库名称的列表。转储包括命名数据库中的所有对象。此选项的多个实例是可加的。

--include-events=event_list
将事件转储到中event_list,该事件是一个或多个逗号分隔的事件名称的列表。此选项的多个实例是可加的。

--include-routines=routine_list
将例程转储到中routine_list,该例程 是一个或多个用逗号分隔的例程(存储过程或函数)名称的列表。此选项的多个实例是可加的。

--include-tables=table_list
将表转储到中table_list,该表是一个或多个以逗号分隔的表名的列表。此选项的多个实例是可加的。

--include-triggers=trigger_list
将触发器转储到中trigger_list,该触发器 是一个或多个逗号分隔的触发器名称的列表。此选项的多个实例是可加的。

--include-users=user_list
将用户帐户转储到中user_list,该帐户 是一个或多个用逗号分隔的用户名的列表。此选项的多个实例是可加的。

--insert-ignore
写INSERT IGNORE陈述而不是 INSERT陈述。

--log-error-file=file_name
通过将警告和错误附加到命名文件来记录它们。如果未给出该选项,mysqlpump 将警告和错误写入标准错误输出。

--login-path=name
从.mylogin.cnf登录路径文件中的命名登录路径读取选项 。“login-path”是含有指定要连接到哪个MySQL服务器和选项哪个帐户作为认证选项组。要创建或修改登录路径文件,请使用 mysql_config_editor实用程序。

--max-allowed-packet=N
客户端/服务器通信缓冲区的最大大小。默认值为24MB,最大为1GB。

--net-buffer-length=N
用于客户端/服务器通信的缓冲区的初始大小。当创建多行 INSERT语句时(与该--extended-insert 选项一样),mysqlpump会创建长达N字节的行 。如果使用此选项增加值,请确保MySQL服务器 net_buffer_length系统变量的值至少为该值。

--no-create-db
禁止CREATE DATABASE 输出中可能包含的所有语句。

--no-create-info, -t
不要编写CREATE TABLE 创建每个转储表的语句。

--no-defaults
不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,--no-defaults则可以使用该选项 来防止读取它们。
唯一的例外是,.mylogin.cnf 在所有情况下都会读取该文件(如果存在)。这样,即使--no-defaults使用密码,也可以通过比命令行更安全的方式指定密码 。(.mylogin.cnf由mysql_config_editor实用程序创建 。请参见 第4.6.7节“ mysql_config_editor -MySQL配置实用程序”。)

--parallel-schemas=[N:]db_list
在中创建一个队列来处理数据库db_list,该队列 是一个或多个逗号分隔的数据库名称的列表。如果 N给出,则队列使用 N线程。如果 N未给出,则该 --default-parallelism 选项确定队列线程数。
此选项的多个实例创建多个队列。 mysqlpump还会创建一个默认队列,该队列用于未在任何--parallel-schemas选项中命名的数据库 ,以及在命令选项选择它们的情况下转储用户定义。

--password[=password], -p[password]
用于连接服务器的MySQL帐户的密码。密码值是可选的。如果未给出,则 mysqlpump提示输入一个。如果提供,则--password=或-p 后面的密码之间 必须没有空格。如果未指定密码选项,则默认为不发送密码。
在命令行上指定密码应该被认为是不安全的。为避免在命令行上输入密码,请使用选项文件。
要明确指定没有密码,并且mysqlpump不应提示输入密码 ,请使用该 --skip-password 选项。

--plugin-dir=dir_name
在其中查找插件的目录。如果该--default-auth选项用于指定身份验证插件,但 mysqlpump找不到它,请指定此选项 。

--port=port_num, -P port_num
对于TCP/IP连接,使用的端口号。

--print-defaults
打印程序名称及其从选项文件中获取的所有选项。

--protocol={TCP|SOCKET|PIPE|MEMORY}
用于连接到服务器的连接协议。当其他连接参数通常导致使用所需协议以外的协议时,此功能很有用。

--replace
写REPLACE陈述而不是INSERT陈述。

--result-file=file_name
直接输出到命名文件。即使生成转储时发生错误,也将创建结果文件并覆盖其先前的内容。
在Windows上应使用此选项,以防止将换行符 \n转换为 \r\n回车/换行符序列。

--routines
在输出中包括用于转储数据库的存储例程(过程和函数)。此选项需要全局SELECT特权。
通过使用--routines所生成的输出包括CREATE PROCEDURE和 CREATE FUNCTION语句创建例程 。
默认情况下启用此选项。用于 --skip-routines 禁用它。

--secure-auth
该选项已在MySQL 8.0.3中删除。

--server-public-key-path=file_name
包含服务器用于基于RSA密钥对的密码交换所需的公用密钥的客户端副本的文件的路径名。该文件必须为PEM格式。此选项适用于使用sha256_password或 caching_sha2_password身份验证插件进行身份验证的客户端 。对于未通过这些插件之一进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。
如果给出--server-public-key-path=file_name并指定了有效的公共密钥文件,则它优先于 --get-server-public-key 。
对于sha256_password,仅当MySQL是使用OpenSSL构建的时,此选项才适用。

--set-charset
写入SET NAMES default_character_set到输出。
默认情况下启用此选项。要禁用它并取消显示该SET NAMES 语句,请使用 --skip-set-charset。

--set-gtid-purged=value
此选项通过指示是否向SET @@GLOBAL.gtid_purged输出添加语句来控制写入转储文件的全局事务ID(GTID)信息 。此选项还可能导致将语句写入输出,从而在重新加载转储文件时禁用二进制日志记录。

下表显示了允许的选项值。默认值为AUTO。

含义
OFF SET在输出中不添加任何语句。
ON SET在输出中添加一条语句。如果未在服务器上启用GTID,则会发生错误。
AUTO SET如果在服务器上启用了GTID,则在输出中添加一条语句。

--set-gtid-purged重新装入转储文件时, 此选项对二进制日志记录有以下影响:

  • --set-gtid-purged=OFF:SET @@SESSION.SQL_LOG_BIN=0;不添加到输出中。
  • --set-gtid-purged=ON:SET @@SESSION.SQL_LOG_BIN=0;添加到输出中。
  • --set-gtid-purged=AUTOSET @@SESSION.SQL_LOG_BIN=0;如果在要备份的服务器上启用了GTID,则将:添加到输出中(即,如果AUTO 评估为ON)。

--single-transaction
此选项将事务隔离模式设置为,REPEATABLE READ并在转储数据之前发送START TRANSACTION SQL语句到服务器。它仅对诸如InnoDB之类的事务表有用,因为这样它在START TRANSACTION发布时转储数据库的一致状态, 而不会阻塞任何应用程序。
使用此选项时,应记住只有InnoDB表以一致状态转储。例如,使用此选项时转储的任何表MyISAM或 MEMORY表可能仍会更改状态。
虽然--single-transaction转储过程中,以确保有效的转储文件(正确的表的内容和二进制日志坐标),没有使用以下连接语句: ALTER TABLE, CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE。一致的读取并非与这些语句隔离开,因此在要转储的表上使用它们可能会导致 由mysqlpump执行SELECT操作检索表内容获得不正确的内容或失败。
--add-locks并且 --single-transaction是互斥的。

--skip-definer
对于视图和存储的程序,从语句中 省略DEFINER和SQL SECURITY子句 CREATE。转储文件在重新加载后,会创建使用默认值DEFINER和SQL SECURITY值的对象。

--skip-dump-rows, -d
不要转储表行。

--socket=path, -S path
对于与的连接localhost,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。
在Windows上,仅当在named_pipe 启用了支持命名管道连接的系统变量的情况下启动服务器时,此选项才适用。另外,建立连接的用户必须是named_pipe_full_access_group 系统变量指定的Windows组的成员 。

--ssl*
以开头的选项 --ssl指定是否使用SSL连接到服务器,并指示在何处查找SSL密钥和证书。请参阅加密连接的命令选项。

--ssl-fips-mode={OFF|ON|STRICT}
控制是否在客户端上启用FIPS模式。该--ssl-fips-mode选项与其他--ssl-xxx
选项的不同之处在于,该选项不用于建立加密连接,而是影响允许的加密操作。
这些--ssl-fips-mode 值是允许的:
OFF:禁用FIPS模式。
ON:启用FIPS模式。
STRICT:启用“strict” FIPS模式。

注意
如果OpenSSL的FIPS对象模块不可用时,对于唯一的允许值 --ssl-fips-mode是 OFF。在这种情况下,设置 --ssl-fips-mode为 ON或STRICT导致客户端在启动时发出警告并以非FIPS模式运行。

--tls-ciphersuites=ciphersuite_list
使用TLSv1.3的加密连接的允许密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。可以为此选项命名的密码套件取决于用于编译MySQL的SSL库。
该选项是在MySQL 8.0.16中添加的。

--tls-version=protocol_list
加密连接允许的TLS协议。该值是一个或多个逗号分隔的协议名称的列表。可以为此选项命名的协议取决于用于编译MySQL的SSL库。有关详细信息,请参见 第6.3.2节“加密的连接TLS协议和密码”。

--triggers
在输出中包括每个转储表的触发器。
默认情况下启用此选项。用于 --skip-triggers 禁用它。

--tz-utc
此选项使TIMESTAMP 列可以在不同时区的服务器之间转储和重新加载。mysqlpump将其连接时区设置为UTC并添加SET TIME_ZONE='+00:00'到转储文件中。如果没有此选项,则TIMESTAMP列将在源服务器和目标服务器本地的时区中转储并重新加载,如果服务器位于不同的时区中,则可能导致值更改。 --tz-utc还可以防止由于夏令时而导致的更改。
默认情况下启用此选项。用于 --skip-tz-utc 禁用它。

--user=user_name, -u user_name
用于连接到服务器的MySQL帐户的用户名。

--users
将用户帐户作为逻辑定义转储为 CREATE USERand GRANT语句。
用户定义存储在mysql系统数据库的授权表中 。默认情况下, mysqlpump在mysql数据库转储中不包括授权表。要将授权表的内容转储为逻辑定义,请使用该--users选项并禁止所有数据库转储:

shell> mysqlpump --exclude-databases=% --users

--version, -V
显示版本信息并退出。

--watch-progress
定期显示进度指示器,该指示器提供有关表,行和其他对象的已完成和总数的信息。
默认情况下启用此选项。用于 --skip-watch-progress 禁用它。

--zstd-compression-level=level
用于与使用zstd压缩算法的服务器的连接的压缩级别。允许的级别为1到22,更大的值表示压缩级别增加。默认 zstd压缩级别为3。压缩级别设置对不使用zstd压缩的连接无效。
该选项是在MySQL 8.0.18中添加的。

mysqlpump对象选择
mysqlpump具有一组包含和排除选项,它们可以过滤几种对象类型并提供对要转储哪些对象的灵活控制:

  • --include-databases并 --exclude-databases应用于数据库及其中的所有对象。
  • --include-tables并 --exclude-tables应用于表格。这些选项还会影响与表关联的触发器,除非给出了特定于触发器的选项。
  • --include-triggers并 --exclude-triggers应用于触发器。
  • --include-routines并 --exclude-routines适用于存储过程和函数。如果例程选项与存储过程名称匹配,则它也与相同名称的存储函数匹配。
  • --include-events并 --exclude-events应用于事件计划程序事件。
  • --include-users并 --exclude-users应用于用户帐户。

任何包含或排除选项都可以多次给出。效果是累加的。这些选项的顺序无关紧要。
每个包含和排除选项的值是相应对象类型的逗号分隔名称的列表。例如:

--exclude-databases=test,world
--include-tables=customer,invoice

对象名称中允许使用通配符:

  • % 匹配零个或多个字符的任何序列。
  • _ 匹配任何单个字符。

例如, --include-tables=t%,__tmp 匹配所有以开头的t表名和以结尾的所有五个字符的表名 tmp。
对于用户,指定的没有主机名的名称将以的隐含主机解释%。例如, u1和u1@%是等效的。这与MySQL中通常使用的等效项相同(请参见第6.2.4节“指定帐户名”)。
包含和排除选项的相互作用如下:
默认情况下,没有任何包含或排除选项, mysqlpump会转储所有数据库(mysqlpump限制中指出了某些例外 )。

  • 如果在没有排除选项的情况下给出了包含选项,则仅转储名为included的对象。
  • 如果在没有包含选项的情况下给出了排除选项,则所有对象都将被转储,除非命名为被排除的对象。
  • 如果给出了包含和排除选项,则不会转储所有名为排除的对象和未命名为包括的对象。所有其他对象将被转储。
  • 如果要转储多个数据库,则可以通过用数据库名称限定对象名称来命名特定数据库中的表,触发器和例程。以下命令转储数据库db1和 db2,但不包括表 db1.t1和db2.t2:

    shell> mysqlpump --include-databases=db1,db2 --exclude-tables=db1.t1,db2.t2
    

    以下选项提供了指定要转储哪些数据库的替代方法:

  • --all-databases选项转储所有数据库(mysqlpump Restrictions中注明的某些例外 )。这等效于完全不指定任何对象选项(默认的 mysqlpump操作是转储所有内容)。

  • --include-databases=%与 --all-databases相似,但选择所有数据库进行转储,即使是那些--all-databases例外的。
  • --databases选项使mysqlpump将所有名称参数视为要转储的数据库名称。它等效于--include-databases 命名相同数据库的选项。

mysqlpump并行处理
mysqlpump可以使用并行性来实现并发处理。您可以选择数据库之间(同时转储多个数据库)和数据库内(同时转储给定数据库的多个对象)的并发性。
默认情况下,mysqlpump设置一个带有两个线程的队列。您可以创建其他队列并控制分配给每个队列的线程数,包括默认队列:

  • --default-parallelism=N 指定用于每个队列的默认线程数。如果没有此选项,N 则为2。
    默认队列始终使用默认线程数。除非另行指定,否则其他队列将使用默认线程数。
  • --parallel-schemas=[N:]db_list 设置一个处理队列以转储名为中的数据库,db_list并可以选择指定该队列使用多少线程。 dblist是逗号分隔的数据库名称的列表。如果option参数以开头 N:,则队列使用N线程。否则,该 --default-parallelism 选项确定队列线程的数量。
    --parallel-schemas选项的多个实例创建多个队列。
    数据库列表中的名称允许包含过滤选项所支持的相同 %和
    通配符(请参见 mysqlpump对象选择)。

mysqlpump使用默认队列来处理未使用--parallel-schemas选项显式命名的任何数据库 ,并在命令选项选择它们的情况下转储用户定义。

通常,对于多个队列,mysqlpump 使用队列处理的数据库集之间的并行性来同时转储多个数据库。对于使用多个线程的队列,mysqlpump使用数据库内的并行性,以同时从给定数据库中转储多个对象。可能会发生异常;例如,当mysqlpump从服务器中获取数据库中对象的列表时,它可能会阻塞队列。
启用并行性后,可以对来自不同数据库的输出进行交织。例如, INSERT可以对并行转储的多个表中的语句进行交织;声明未按任何特定顺序编写。这不会影响重新加载,因为输出语句使用数据库名称来限定对象名称,或者在USE需要时以语句开头 。
并行性的粒度是单个数据库对象。例如,不能使用多个线程并行转储单个表。
例子:

shell> mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3

mysqlpump建立一个队列过程 db1和db2另一个排队的过程db3,和默认队列来处理所有其他数据库。所有队列使用两个线程。

shell> mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3
         --default-parallelism=4

除了所有队列都使用四个线程之外,这与前面的示例相同。

shell> mysqlpump --parallel-schemas=5:db1,db2 --parallel-schemas=3:db3

队列db1和db2 使用五个线程,队列db3使用3个线程,默认队列使用两个线程的默认。

作为一种特殊情况,带有--default-parallelism=0和不带--parallel-schemas选项的 mysqlpump作为单线程进程运行, 并且不 创建队列。

mysqlpump限制

  • mysqlpump不转储performance_schema, ndbinfo或sys默认模式。要转储其中任何一个,请在命令行上明确命名它们。您也可以使用--databases或 --include-databases选项为它们命名 。
  • mysqlpump不会转储 NFORMATION_SCHEMA模式。
  • mysqlpump不转储 InnoDB CREATE TABLESPACE语句。

mysqlpump使用CREATE USER和 GRANT语句以逻辑形式转储用户帐户(例如,当您使用 --include-usersor --users选项时)。出于这个原因,转储mysql系统数据库默认情况下不包括含有用户定义的授权表:user,db, tables_priv,columns_priv, procs_priv,或 proxies_priv。要转储任何授权表,请先命名mysql数据库,然后再命名表名:

shell> mysqlpump mysql user db ...