4.5.6 mysqlpump-数据库备份程序

mysqlpumpClient 端 Util 执行logical backups,生成一组 SQL 语句,可以执行这些语句来重现原始数据库对象定义和 table 数据。它转储一个或多个 MySQL 数据库以进行备份或转移到另一台 SQL 服务器。

mysqlpump功能包括:

  • 并行处理数据库以及数据库中的对象,以加快转储过程

  • 更好地控制要转储的数据库和数据库对象(table,存储的程序,用户帐户)

  • 将用户帐户作为帐户 Management 语句(CREATE USERGRANT)而不是作为mysql系统数据库的插入内容转储

  • 创建压缩输出的能力

  • 进度指示器(值是估计值)

  • 对于转储文件重新加载,通过在插入行后添加索引,可以更快地为InnoDBtable 创建辅助索引

mysqlpump至少对转储 table 具有SELECT特权,对转储视图至少具有SHOW VIEW,对于转储触发器至少具有TRIGGER,如果不使用--single-transaction选项,则至少需要LOCK TABLES。转储用户定义需要mysql系统数据库上的SELECT特权。如选项说明中所述,某些选项可能需要其他特权。

要重新加载转储文件,您必须具有执行该文件所包含的语句所需的特权,例如由这些语句创建的对象的相应CREATE特权。

Note

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

shell> mysqlpump [options] > dump.sql

但是,不允许将 UTF-16 作为连接字符集(请参见第 10.4 节“连接字符集和排序规则”),因此转储文件将无法正确加载。要变通解决此问题,请使用--result-file选项,该选项以 ASCII 格式创建输出:

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

mysqlpump 调用语法

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

shell> mysqlpump --all-databases

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

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

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

shell> mysqlpump --databases db_name1 db_name2 ...

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

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

在前面的命令中,%是通配符,它与--exclude-databases选项的所有数据库名称匹配。

mysqlpump支持多个选项,用于包括或排除数据库,table,存储的程序和用户定义。参见mysqlpump 对象选择

要重新加载转储文件,请执行其中包含的语句。例如,使用mysqlClient 端:

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

以下讨论提供了其他mysqlpump用法示例。

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

mysqlpump 选项摘要

mysqlpump支持以下选项,可以在命令行或选项文件的[mysqlpump][client]组中指定这些选项。 (在 MySQL 5.7.30 之前,mysqlpump读取[mysql_dump]组而不是[mysqlpump]。从 5.7.30 开始,[mysql_dump]仍被接受,但已弃用。)有关 MySQL 程序使用的选项文件的信息,请参见第 4.2.2.2 节“使用选项文件”

table4.17 mysqlpump 选项

Option NameDescriptionIntroduced
--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 语句包围每个 table 转储
--all-databases转储所有数据库
--bind-address使用指定的网络接口连接到 MySQL Server
--character-sets-dir字符集的安装目录
--complete-insert使用包含列名称的完整 INSERT 语句
--compress压缩 Client 端和服务器之间发送的所有信息
--compress-output输出压缩算法
--databases将所有名称参数解释为数据库名称
--debug编写调试日志
--debug-check程序退出时打印调试信息
--debug-info程序退出时打印调试信息,内存和 CPU 统计信息
--default-auth身份验证插件使用
--default-character-set指定默认字符集
--default-parallelism并行处理的默认线程数
--defaults-extra-file除常规选项文件外,还读取命名的选项文件
--defaults-file只读命名的选项文件
--defaults-group-suffix选项组后缀值
--defer-table-indexes对于重新加载,将索引创建推迟到加载 table 行之后
--events从转储的数据库中转储事件
--exclude-databases从转储中排除的数据库
--exclude-events从转储中排除的事件
--exclude-routines从转储中排除的例程
--exclude-tables从转储中排除的 table
--exclude-triggers触发从转储中排除
--exclude-users从转储中排除的用户
--extended-insert使用多行 INSERT 语法
--get-server-public-key从服务器请求 RSA 公钥5.7.23
--help显示帮助信息并退出
--hex-blob使用十六进制 table 示法转储二进制列
--hostMySQL 服务器所在的主机
--include-databases转储中包含的数据库
--include-events转储中包含的事件
--include-routines转储中包含的例程
--include-tables转储中包含的 table
--include-triggers触发包含在转储中
--include-users要包含在转储中的用户
--insert-ignore编写 INSERT IGNORE 而不是 INSERT 语句
--log-error-file将警告和错误附加到命名文件
--login-path从.mylogin.cnf 中读取登录路径选项
--max-allowed-packet发送到服务器或从服务器接收的最大数据包长度
--net-buffer-lengthTCP/IP 和套接字通信的缓冲区大小
--no-create-db不要写 CREATE DATABASE 语句
--no-create-info不要编写重新创建每个转储 table 的 CREATE TABLE 语句
--no-defaults不读取选项文件
--parallel-schemas指定模式处理并行性
--password连接服务器时使用的密码
--plugin-dir安装插件的目录
--port用于连接的 TCP/IP 端口号
--print-defaults打印默认选项
--protocol使用的传输协议
--replace编写 REPLACE 语句而不是 INSERT 语句
--result-file直接输出到给定文件
--routines从转储的数据库中转储存储的例程(过程和函数)
--secure-auth不要以旧(4.1 之前)格式向服务器发送密码
--server-public-key-path包含 RSA 公钥的文件的路径名5.7.23
--set-charset将 SET NAMES default_character_set 添加到输出
--set-gtid-purged是否将 SET @@ GLOBAL.GTID_PURGED 添加到输出5.7.18
--single-transaction在单个事务中转储 table
--skip-definer从视图和存储程序 CREATE 语句中忽略 DEFINER 和 SQL SECURITY 子句
--skip-dump-rows不要转储 table 行
--socketUnix 套接字文件或 Windows 命名管道使用
--ssl启用连接加密
--ssl-ca包含受信任的 SSL 证书颁发机构列 table 的文件
--ssl-capath包含受信任的 SSL 证书颁发机构证书文件的目录
--ssl-cert包含 X.509 证书的文件
--ssl-cipher连接加密的允许密码
--ssl-crl包含证书吊销列 table 的文件
--ssl-crlpath包含证书吊销列 table 文件的目录
--ssl-key包含 X.509 密钥的文件
--ssl-mode与服务器连接的所需安全状态5.7.11
--ssl-verify-server-cert根据服务器证书的通用名身份验证主机名
--tls-version允许的 TLS 协议进行加密连接5.7.10
--triggers每个转储 table 的转储触发器
--tz-utc添加 SET TIME_ZONE ='00:00'来转储文件
--user连接服务器时使用的 MySQL 用户名
--users转储用户帐户
--version显示版本信息并退出
--watch-progress显示进度指示器

mysqlpump 选项说明

显示帮助消息并退出。

在每个CREATE DATABASE语句之前写一个DROP DATABASE语句。

在每个CREATE TABLE语句之前写一个DROP TABLE语句。

在每个CREATE USER语句之前写一个DROP USER语句。

LOCK TABLESUNLOCK TABLES语句包围每个 table 转储。重新装入转储文件时,这可以加快插入速度。参见第 8.2.4.1 节“优化 INSERT 语句”

此选项不适用于并行性,因为来自一个 table 的INSERT语句可以被交错,而对于一个 table 的插入结束之后的UNLOCK TABLES可以释放保留有插入内容的 table 的锁。

--add-locks--single-transaction是互斥的。

转储所有数据库(除了mysqlpump Restrictions中提到的某些 exception)。如果未明确指定其他行为,则这是默认行为。

--all-databases--databases是互斥的。

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

字符集的安装目录。参见第 10.15 节“字符集配置”

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

尽可能压缩 Client 端和服务器之间发送的所有信息。参见第 4.2.6 节“连接压缩控制”

默认情况下,mysqlpump不压缩输出。此选项使用指定的算法指定输出压缩。允许的算法是LZ4ZLIB

要解压缩压缩的输出,必须具有适当的 Util。如果从 MySQL 5.7.10 开始,系统命令 lz4openssl zlib 不可用,则 MySQL 发行版包括lz4_decompresszlib_decompressUtil,可用于解压缩使用--compress-output=LZ4--compress-output=ZLIB压缩的mysqlpump输出。选项。有关更多信息,请参见第 4.8.1 节“ lz4_decompress —解压缩 mysqlpump LZ4 压缩输出”第 4.8.5 节“ zlib_decompress —解压缩 mysqlpump ZLIB 压缩输出”

替代方法包括 lz4openssl命令(如果它们已安装在系统上)。例如, lz4 可以解压缩LZ4输出:

shell> lz4 -d input_file output_file

ZLIB的输出可能像这样:

shell> openssl zlib -d < input_file > output_file

通常,mysqlpump将命令行上的名字参数视为数据库名称,并将其后的名称视为 table 名称。使用此选项,它将所有名称参数视为数据库名称。每个新数据库之前的输出中都包含CREATE DATABASE语句。

--all-databases--databases是互斥的。

编写调试日志。典型的* debug_options *字符串是d:t:o,file_name。默认值为d:t:O,/tmp/mysqlpump.trace

仅当使用WITH_DEBUG构建 MySQL 时,此选项才可用。使用此选项不是构建 Oracle 提供的 MySQL 发行版二进制文件。

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

仅当使用WITH_DEBUG构建 MySQL 时,此选项才可用。使用此选项不是构建 Oracle 提供的 MySQL 发行版二进制文件。

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

仅当使用WITH_DEBUG构建 MySQL 时,此选项才可用。使用此选项不是构建 Oracle 提供的 MySQL 发行版二进制文件。

有关使用哪个 Client 端身份验证插件的提示。参见第 6.2.13 节“可插入身份验证”

使用* charset_name *作为默认字符集。参见第 10.15 节“字符集配置”。如果未指定字符集,则mysqlpump使用utf8

每个并行处理队列的默认线程数。预设值为 2.

--parallel-schemas选项还影响并行性,可用于覆盖默认线程数。有关更多信息,请参见mysqlpump 并行处理

具有--default-parallelism=0和没有--parallel-schemas选项,mysqlpump作为单线程进程运行,并且不创建队列。

启用并行性后,可以对来自不同数据库的输出进行交织。

Note

在 MySQL 5.7.11 之前,使用--single-transaction选项与并行性是互斥的。要使用--single-transaction,请通过将--default-parallelism设置为 0 而不使用--parallel-schemas的任何实例来禁用并行性:

shell> mysqlpump --single-transaction --default-parallelism=0

在全局选项文件之后但在用户选项文件之前(在 Unix 上)读取此选项文件。如果该文件不存在或无法访问,则发生错误。 * file_name *如果是相对路径名而不是完整路径名,则相对于当前目录进行解释。

有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”

仅使用给定的选项文件。如果该文件不存在或无法访问,则发生错误。 * file_name *如果是相对路径名而不是完整路径名,则相对于当前目录进行解释。

exception:即使使用--defaults-file,Client 端程序也读取.mylogin.cnf

有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”

不仅阅读常规选项组,还阅读具有常规名称和后缀* str *的组。例如,mysqlpump通常读取[client][mysqlpump]组。如果提供了--defaults-group-suffix=_other选项,则mysqlpump也会读取[client_other][mysqlpump_other]组。

有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”

在转储输出中,将每个 table 的索引创建延迟,直到 table 中的行已加载。这适用于所有存储引擎,但适用于InnoDB仅适用于二级索引。

默认情况下启用此选项。使用--skip-defer-table-indexes将其禁用。

在输出中包括转储数据库的事件计划程序事件。事件转储需要这些数据库的EVENT特权。

使用--events生成的输出包含CREATE EVENT条语句来创建事件。但是,这些语句不包括事件创建和修改时间戳记之类的属性,因此,当重新加载事件时,将使用等于重新加载时间的时间戳记来创建事件。

如果您需要使用原始时间戳记属性创建事件,请不要使用--events。相反,请使用对mysql数据库具有适当特权的 MySQL 帐户直接转储并重新加载mysql.eventtable 的内容。

默认情况下启用此选项。使用--skip-events将其禁用。

不要将数据库转储到* db_list *中,该数据库是一个或多个逗号分隔的数据库名称的列 table。此选项的多个实例是可加的。有关更多信息,请参见mysqlpump 对象选择

不要将数据库转储到* event_list *中,该数据库是一个或多个逗号分隔的事件名称的列 table。此选项的多个实例是可加的。有关更多信息,请参见mysqlpump 对象选择

不要将事件转储到* routine_list *中,该列 table 是一个或多个逗号分隔的例程(存储过程或函数)名称的列 table。此选项的多个实例是可加的。有关更多信息,请参见mysqlpump 对象选择

不要将 table 转储到* table_list *中,该 table 是一个或多个逗号分隔的 table 名的列 table。此选项的多个实例是可加的。有关更多信息,请参见mysqlpump 对象选择

不要将触发器转储到* trigger_list *中,该列 table 是一个或多个逗号分隔的触发器名称的列 table。此选项的多个实例是可加的。有关更多信息,请参见mysqlpump 对象选择

不要将用户帐户转储到* user_list *中,该帐户是一个或多个逗号分隔的帐户名的列 table。此选项的多个实例是可加的。有关更多信息,请参见mysqlpump 对象选择

使用包含多个VALUES列 table 的多行语法编写INSERT语句。这样可以生成较小的转储文件,并在重新加载文件时加快插入速度。

选项值指示每个INSERT语句中要包括的行数。默认值为 250.值为 1 时,每个 table 行产生一个INSERT语句。

从服务器请求基于 RSA 密钥对的密码交换所需的公共密钥。此选项适用于使用caching_sha2_password身份验证插件进行身份验证的 Client 端。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果不使用基于 RSA 的密码交换,也将被忽略,例如 Client 端使用安全连接连接到服务器时。

如果给出了--server-public-key-path=file_name并指定了有效的公共密钥文件,则它优先于--get-server-public-key

有关caching_sha2_password插件的信息,请参见第 6.4.1.4 节“缓存 SHA-2 可插入身份验证”

--get-server-public-key选项已添加到 MySQL 5.7.23 中。

使用十六进制 table 示法转储二进制列(例如'abc'变为0x616263)。与二进制字符集一起使用时,受影响的数据类型为BINARYVARBINARYBLOB类型,BIT,所有空间数据类型以及其他非二进制数据类型。

从给定主机上的 MySQL 服务器中转储数据。

将数据库转储到* db_list *中,该列 table 是一个或多个逗号分隔的数据库名称的列 table。转储包括命名数据库中的所有对象。此选项的多个实例是可加的。有关更多信息,请参见mysqlpump 对象选择

将事件转储到* event_list *中,该列 table 是一个或多个逗号分隔的事件名称的列 table。此选项的多个实例是可加的。有关更多信息,请参见mysqlpump 对象选择

将例程转储到* routine_list *中,该列 table 是一个或多个逗号分隔的例程(存储过程或函数)名称的列 table。此选项的多个实例是可加的。有关更多信息,请参见mysqlpump 对象选择

将 table 转储到* table_list *中,这是一个或多个逗号分隔的 table 名的列 table。此选项的多个实例是可加的。有关更多信息,请参见mysqlpump 对象选择

将触发器转储到* trigger_list *中,该列 table 是一个或多个逗号分隔的触发器名称的列 table。此选项的多个实例是可加的。有关更多信息,请参见mysqlpump 对象选择

将用户帐户转储到* user_list *中,该列 table 是一个或多个用逗号分隔的用户名的列 table。此选项的多个实例是可加的。有关更多信息,请参见mysqlpump 对象选择

INSERT IGNORE条语句而不是INSERT条语句。

通过将警告和错误附加到命名文件来记录它们。如果未提供此选项,则mysqlpump将警告和错误写入标准错误输出。

.mylogin.cnf登录路径文件中的命名登录路径中读取选项。 “登录路径”是一个选项组,其中包含一些选项,这些选项指定要连接到哪个 MySQL 服务器以及要作为身份验证的帐户。要创建或修改登录路径文件,请使用mysql_config_editorUtil。参见第 4.6.6 节“ mysql_config_editor-MySQL 配置 Util”

有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”

用于 Client 端/服务器通信的缓冲区的最大大小。默认值为 24MB,最大为 1GB。

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

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

不要写创建每个转储 table 的CREATE TABLE语句。

不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,则可以使用--no-defaults来防止读取它们。

exception 是在所有情况下都读取.mylogin.cnf文件(如果存在)。这样即使在使用--no-defaults的情况下,也可以通过比命令行更安全的方式指定密码。 (.mylogin.cnfmysql_config_editorUtil 创建。请参见第 4.6.6 节“ mysql_config_editor-MySQL 配置 Util”。)

有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”

在* db_list 中创建一个用于处理数据库的队列,该队列是一个或多个逗号分隔的数据库名称的列 table。如果给出 N ,则队列使用 N 线程。如果未提供 N *,则--default-parallelism选项确定队列线程数。

此选项的多个实例创建多个队列。 mysqlpump还会创建一个默认队列,以用于未在任何--parallel-schemas选项中命名的数据库,并在命令选项选择它们的情况下转储用户定义。有关更多信息,请参见mysqlpump 并行处理

用于连接服务器的 MySQL 帐户的密码。密码值是可选的。如果未给出,mysqlpump提示 Importing 一个。如果提供,则--password=-p与后面的密码之间必须没有空格。如果未指定密码选项,则默认为不发送密码。

在命令行上指定密码应该被认为是不安全的。为避免在命令行上 Importing 密码,请使用选项文件。参见第 6.1.2.1 节,“最终用户密码安全准则”

要明确指定没有密码并且mysqlpump不应提示 Importing 密码,请使用--skip-password选项。

在其中查找插件的目录。如果--default-auth选项用于指定身份验证插件,但mysqlpump找不到它,请指定此选项。参见第 6.2.13 节“可插入身份验证”

对于 TCP/IP 连接,使用的端口号。

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

有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”

用于连接到服务器的传输协议。当其他连接参数通常导致使用您想要的协议以外的协议时,此功能很有用。有关允许值的详细信息,请参见第 4.2.5 节“连接传输协议”

REPLACE条语句而不是INSERT条语句。

直接输出到命名文件。即使生成转储时发生错误,也将创建结果文件并覆盖其先前的内容。

在 Windows 上应使用此选项,以防止将换行符\n字符转换为\r\n回车/换行符序列。

在输出中包括用于转储数据库的存储例程(过程和函数)。此选项要求mysql.proctable 具有SELECT特权。

使用--routines生成的输出包含CREATE PROCEDURECREATE FUNCTION语句以创建例程。但是,这些语句不包括例程创建和修改时间戳之类的属性,因此,在重新加载例程时,将使用等于重新加载时间的时间戳来创建例程。

如果您需要使用原始时间戳属性创建例程,请不要使用--routines。相反,请使用对mysql数据库具有适当特权的 MySQL 帐户直接转储并重新加载mysql.proctable 的内容。

默认情况下启用此选项。使用--skip-routines将其禁用。

不要以旧(4.1 之前)格式向服务器发送密码。这样可以防止除使用较新密码格式的服务器以外的其他连接。

该选项已被弃用,并将在将来的 MySQL 版本中删除。它始终处于启用状态,尝试禁用它(--skip-secure-auth--secure-auth=0)会产生错误。

PEM 格式的文件的路径名,其中包含服务器用于基于 RSA 密钥对的密码交换所需的公用密钥的 Client 端副本。此选项适用于使用sha256_passwordcaching_sha2_password身份验证插件进行身份验证的 Client 端。对于未通过这些插件之一进行身份验证的帐户,将忽略此选项。如果不使用基于 RSA 的密码交换,也将被忽略,例如 Client 端使用安全连接连接到服务器时。

如果给出了--server-public-key-path=file_name并指定了有效的公共密钥文件,则它优先于--get-server-public-key

对于sha256_password,仅当使用 OpenSSL 构建 MySQL 时,此选项才适用。

有关sha256_passwordcaching_sha2_password插件的信息,请参见第 6.4.1.5 节“ SHA-256 可插拔身份验证”第 6.4.1.4 节“缓存 SHA-2 可插入身份验证”

--server-public-key-path选项已添加到 MySQL 5.7.23 中。

SET NAMES default_character_set写入输出。

默认情况下启用此选项。要禁用它并禁止SET NAMES语句,请使用--skip-set-charset

  • --set-gtid-purged=value

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

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

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

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

  • --set-gtid-purged=OFFSET @@SESSION.SQL_LOG_BIN=0;未添加到输出中。

    • --set-gtid-purged=ONSET @@SESSION.SQL_LOG_BIN=0;已添加到输出中。

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

MySQL 5.7.18 中添加了此选项。

此选项将事务隔离模式设置为REPEATABLE READ,并在转储数据之前向服务器发送START TRANSACTION SQL 语句。它仅对诸如InnoDB之类的事务 table 很有用,因为这样,它将在发出START TRANSACTION时转储数据库的一致状态,而不会阻塞任何应用程序。

使用此选项时,应记住只有InnoDB个 table 以一致状态转储。例如,使用此选项时转储的任何MyISAMMEMORYtable 可能仍会更改状态。

在处理--single-transaction转储时,为了确保有效的转储文件(正确的 table 内容和二进制日志坐标),没有其他连接应使用以下语句:ALTER TABLECREATE TABLEDROP TABLERENAME TABLETRUNCATE TABLE。一致的读取并非与这些语句隔离开,因此在要转储的 table 上使用它们会导致mysqlpump执行的SELECT检索 table 内容以获得错误的内容或失败。

--add-locks--single-transaction是互斥的。

Note

在 MySQL 5.7.11 之前,使用--single-transaction选项与并行性是互斥的。要使用--single-transaction,请通过将--default-parallelism设置为 0 而不使用--parallel-schemas的任何实例来禁用并行性:

shell> mysqlpump --single-transaction --default-parallelism=0

CREATE语句中省略DEFINERSQL SECURITY子句以获取视图和存储的程序。重新加载转储文件时,该转储文件将创建使用默认DEFINERSQL SECURITY值的对象。参见第 23.6 节“存储的对象访问控制”

不要转储 table 行。

对于到localhost的连接(要使用的 Unix 套接字文件),或者在 Windows 上,要使用的命名管道的名称。

在 Windows 上,仅当在启用了named_pipe系统变量以支持命名管道连接的情况下启动服务器时,此选项才适用。此外,构建连接的用户必须是named_pipe_full_access_group系统变量指定的 Windows 组的成员。

  • --ssl*

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

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

MySQL 5.7.10 中添加了此选项。

在输出中包括每个转储 table 的触发器。

默认情况下启用此选项。使用--skip-triggers将其禁用。

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

默认情况下启用此选项。使用--skip-tz-utc将其禁用。

用于连接到服务器的 MySQL 帐户的用户名。

CREATE USERGRANT语句的形式将用户帐户作为逻辑定义转储。

用户定义存储在mysql系统数据库的授权 table 中。默认情况下,mysqlpumpmysql数据库转储中不包括授权 table。要将授权 table 的内容转储为逻辑定义,请使用--users选项并禁止所有数据库转储:

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

显示版本信息并退出。

定期显示进度指示器,该指示器提供有关 table,行和其他对象的已完成和总数的信息。

默认情况下启用此选项。使用--skip-watch-progress将其禁用。

mysqlpump 对象选择

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

任何包含或排除选项都可以多次给出。效果是累加的。这些选项的 Sequences 无关紧要。

每个包含和排除选项的值是相应对象类型的逗号分隔名称的列 table。例如:

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

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

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

  • _匹配任何单个字符。

例如,--include-tables=t%,__tmp匹配以t开头的所有 table 名和以tmp结尾的所有五个字符的 table 名。

对于用户,指定的没有主机名的名称将使用隐含的%解释。例如,u1u1@%是等效的。这与通常在 MySQL 中应用的等效项相同(请参阅第 6.2.4 节“指定帐户名”)。

包含和排除选项的相互作用如下:

  • 默认情况下,没有任何包含或排除选项,mysqlpump转储所有数据库(在mysqlpump Restrictions中注明了某些 exception)。

  • 如果在没有排除选项的情况下给出了包含选项,则仅转储名为“ included”的对象。

  • 如果在没有包含选项的情况下给出了排除选项,则所有被命名为被排除对象的对象都将被转储。

  • 如果给出了包含和排除选项,则不会转储所有名为“排除”和未命名为“包括”的对象。所有其他对象将被转储。

如果要转储多个数据库,则可以通过用数据库名称限定对象名称来命名特定数据库中的 table,触发器和例程。以下命令转储数据库db1db2,但不包括 tabledb1.t1db2.t2

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

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

--include-databases=%--all-databases类似,但是选择所有数据库进行转储,即使是--all-databases的 exception。

mysqlpump 并行处理

mysqlpump可以使用并行性来实现并发处理。您可以选择数据库之间(同时转储多个数据库)和数据库内(同时转储给定数据库的多个对象)的并发性。

默认情况下,mysqlpump设置一个带有两个线程的队列。您可以创建其他队列并控制分配给每个队列的线程数,包括默认队列:

默认队列始终使用默认线程数。除非另行指定,否则其他队列将使用默认线程数。

  • --parallel-schemas=[N:]db_list设置一个处理队列以转储* db_list *中命名的数据库,并可以选择指定该队列使用多少线程。 * db_list 是用逗号分隔的数据库名称的列 table。如果 option 参数以N:开头,则队列使用 N *线程。否则,--default-parallelism选项确定队列线程的数量。

--parallel-schemas选项的多个实例创建多个队列。

数据库列 table 中的名称允许包含相同的%_通配符,以支持过滤选项(请参见mysqlpump 对象选择)。

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

通常,对于多个队列,mysqlpump使用队列处理的数据库集之间的并行性来同时转储多个数据库。对于使用多个线程的队列,mysqlpump使用数据库内的并行性来同时转储来自给定数据库的多个对象。可能会发生异常;例如,mysqlpump在从服务器中获取数据库中的对象列 table 时可能会阻塞队列。

启用并行性后,可以对来自不同数据库的输出进行交织。例如,可以对并行转储的多个 table 中的INSERT条语句进行交织;声明不是按任何特定 Sequences 编写的。这不会影响重新加载,因为输出语句使对象名与数据库名匹配,或者在需要时以USE语句开头。

并行性的粒度是单个数据库对象。例如,不能使用多个线程并行转储单个 table。

Examples:

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

mysqlpump设置一个队列来处理db1db2,另一个队列来处理db3,以及一个默认队列来处理所有其他数据库。所有队列使用两个线程。

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

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

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

db1db2的队列使用五个线程,db3的队列使用三个线程,默认队列使用两个线程的默认值。

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

Note

在 MySQL 5.7.11 之前,使用--single-transaction选项与并行性是互斥的。要使用--single-transaction,请通过将--default-parallelism设置为 0 而不使用--parallel-schemas的任何实例来禁用并行性:

shell> mysqlpump --single-transaction --default-parallelism=0

mysqlpump Restrictions

mysqlpump默认不会转储INFORMATION_SCHEMAperformance_schemandbinfosys模式。要转储其中任何一个,请在命令行上明确命名它们。您也可以使用--databases--include-databases选项为它们命名。

mysqlpump不转储InnoDB CREATE TABLESPACE语句。

mysqlpump使用CREATE USERGRANT语句以逻辑形式转储用户帐户(例如,当您使用--include-users--users选项时)。因此,mysql系统数据库的转储默认情况下不包括包含用户定义的授权 table:userdbtables_privcolumns_privprocs_privproxies_priv。要转储任何授权 table,请命名mysql数据库,后跟 table 名:

shell> mysqlpump mysql user db ...