4.5.6 mysqlpump-数据库备份程序

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

mysqlpump功能包括:

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 Name Description Introduced
--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 示法转储二进制列
--host MySQL 服务器所在的主机
--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-length TCP/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 行
--socket Unix 套接字文件或 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 @@GLOBAL.gtid_purged语句,此选项可以控制写入转储文件的全局事务 ID(GTID)信息。此选项还可能导致将语句写入输出,从而在重新加载转储文件时禁用二进制日志记录。

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

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

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

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 密钥和证书。参见加密连接的命令选项

加密连接允许的 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 节“指定帐户名”)。

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

如果要转储多个数据库,则可以通过用数据库名称限定对象名称来命名特定数据库中的 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选项的多个实例创建多个队列。

数据库列 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 ...
首页