4.5.6 mysqlpump-数据库备份程序
mysqlpumpClient 端 Util 执行logical backups,生成一组 SQL 语句,可以执行这些语句来重现原始数据库对象定义和 table 数据。它转储一个或多个 MySQL 数据库以进行备份或转移到另一台 SQL 服务器。
mysqlpump功能包括:
-
并行处理数据库以及数据库中的对象,以加快转储过程
-
更好地控制要转储的数据库和数据库对象(table,存储的程序,用户帐户)
-
将用户帐户作为帐户 Management 语句(CREATE USER,GRANT)而不是作为
mysql
系统数据库的插入内容转储 -
创建压缩输出的能力
-
进度指示器(值是估计值)
-
对于转储文件重新加载,通过在插入行后添加索引,可以更快地为
InnoDB
table 创建辅助索引
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 USER和GRANT语句的形式作为逻辑定义转储,请使用--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 选项说明
- --help,
-?
显示帮助消息并退出。
在每个CREATE DATABASE语句之前写一个DROP DATABASE语句。
在每个CREATE TABLE语句之前写一个DROP TABLE语句。
在每个CREATE USER语句之前写一个DROP USER语句。
用LOCK TABLES和UNLOCK TABLES语句包围每个 table 转储。重新装入转储文件时,这可以加快插入速度。参见第 8.2.4.1 节“优化 INSERT 语句”。
此选项不适用于并行性,因为来自一个 table 的INSERT语句可以被交错,而对于一个 table 的插入结束之后的UNLOCK TABLES可以释放保留有插入内容的 table 的锁。
--add-locks和--single-transaction是互斥的。
- --all-databases,
-A
转储所有数据库(除了mysqlpump Restrictions中提到的某些 exception)。如果未明确指定其他行为,则这是默认行为。
--all-databases和--databases是互斥的。
在具有多个网络接口的计算机上,使用此选项选择用于连接到 MySQL 服务器的接口。
字符集的安装目录。参见第 10.15 节“字符集配置”。
编写包含列名称的完整INSERT语句。
- --compress,
-C
尽可能压缩 Client 端和服务器之间发送的所有信息。参见第 4.2.6 节“连接压缩控制”。
默认情况下,mysqlpump不压缩输出。此选项使用指定的算法指定输出压缩。允许的算法是LZ4
和ZLIB
。
要解压缩压缩的输出,必须具有适当的 Util。如果从 MySQL 5.7.10 开始,系统命令 lz4 和 openssl zlib 不可用,则 MySQL 发行版包括lz4_decompress和zlib_decompressUtil,可用于解压缩使用--compress-output=LZ4和--compress-output=ZLIB压缩的mysqlpump输出。选项。有关更多信息,请参见第 4.8.1 节“ lz4_decompress —解压缩 mysqlpump LZ4 压缩输出”和第 4.8.5 节“ zlib_decompress —解压缩 mysqlpump ZLIB 压缩输出”。
替代方法包括 lz4 和openssl
命令(如果它们已安装在系统上)。例如, lz4 可以解压缩LZ4
输出:
shell> lz4 -d input_file output_file
ZLIB
的输出可能像这样:
shell> openssl zlib -d < input_file > output_file
- --databases,
-B
通常,mysqlpump将命令行上的名字参数视为数据库名称,并将其后的名称视为 table 名称。使用此选项,它将所有名称参数视为数据库名称。每个新数据库之前的输出中都包含CREATE DATABASE语句。
--all-databases和--databases是互斥的。
- --debug[=debug_options],
-# [debug_options]
编写调试日志。典型的* debug_options
*字符串是d:t:o,file_name
。默认值为d:t:O,/tmp/mysqlpump.trace
。
仅当使用WITH_DEBUG构建 MySQL 时,此选项才可用。使用此选项不是构建 Oracle 提供的 MySQL 发行版二进制文件。
程序退出时,打印一些调试信息。
仅当使用WITH_DEBUG构建 MySQL 时,此选项才可用。使用此选项不是构建 Oracle 提供的 MySQL 发行版二进制文件。
- --debug-info,
-T
程序退出时,打印调试信息以及内存和 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.event
table 的内容。
默认情况下启用此选项。使用--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
)。与二进制字符集一起使用时,受影响的数据类型为BINARY,VARBINARY,BLOB类型,BIT,所有空间数据类型以及其他非二进制数据类型。
- --host=host_name,
-h host_name
从给定主机上的 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语句。
- --no-create-info,
-t
不要写创建每个转储 table 的CREATE TABLE语句。
不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,则可以使用--no-defaults来防止读取它们。
exception 是在所有情况下都读取.mylogin.cnf
文件(如果存在)。这样即使在使用--no-defaults的情况下,也可以通过比命令行更安全的方式指定密码。 (.mylogin.cnf
由mysql_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 并行处理。
- --password[=password],
-p[password]
用于连接服务器的 MySQL 帐户的密码。密码值是可选的。如果未给出,mysqlpump提示 Importing 一个。如果提供,则--password=或-p
与后面的密码之间必须没有空格。如果未指定密码选项,则默认为不发送密码。
在命令行上指定密码应该被认为是不安全的。为避免在命令行上 Importing 密码,请使用选项文件。参见第 6.1.2.1 节,“最终用户密码安全准则”。
要明确指定没有密码并且mysqlpump不应提示 Importing 密码,请使用--skip-password选项。
在其中查找插件的目录。如果--default-auth选项用于指定身份验证插件,但mysqlpump找不到它,请指定此选项。参见第 6.2.13 节“可插入身份验证”。
- --port=port_num,
-P port_num
对于 TCP/IP 连接,使用的端口号。
打印程序名称及其从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”。
用于连接到服务器的传输协议。当其他连接参数通常导致使用您想要的协议以外的协议时,此功能很有用。有关允许值的详细信息,请参见第 4.2.5 节“连接传输协议”。
直接输出到命名文件。即使生成转储时发生错误,也将创建结果文件并覆盖其先前的内容。
在 Windows 上应使用此选项,以防止将换行符\n
字符转换为\r\n
回车/换行符序列。
在输出中包括用于转储数据库的存储例程(过程和函数)。此选项要求mysql.proc
table 具有SELECT特权。
使用--routines生成的输出包含CREATE PROCEDURE和CREATE FUNCTION语句以创建例程。但是,这些语句不包括例程创建和修改时间戳之类的属性,因此,在重新加载例程时,将使用等于重新加载时间的时间戳来创建例程。
如果您需要使用原始时间戳属性创建例程,请不要使用--routines。相反,请使用对mysql
数据库具有适当特权的 MySQL 帐户直接转储并重新加载mysql.proc
table 的内容。
默认情况下启用此选项。使用--skip-routines将其禁用。
不要以旧(4.1 之前)格式向服务器发送密码。这样可以防止除使用较新密码格式的服务器以外的其他连接。
该选项已被弃用,并将在将来的 MySQL 版本中删除。它始终处于启用状态,尝试禁用它(--skip-secure-auth,--secure-auth=0)会产生错误。
PEM 格式的文件的路径名,其中包含服务器用于基于 RSA 密钥对的密码交换所需的公用密钥的 Client 端副本。此选项适用于使用sha256_password
或caching_sha2_password
身份验证插件进行身份验证的 Client 端。对于未通过这些插件之一进行身份验证的帐户,将忽略此选项。如果不使用基于 RSA 的密码交换,也将被忽略,例如 Client 端使用安全连接连接到服务器时。
如果给出了--server-public-key-path=file_name并指定了有效的公共密钥文件,则它优先于--get-server-public-key。
对于sha256_password
,仅当使用 OpenSSL 构建 MySQL 时,此选项才适用。
有关sha256_password
和caching_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
选项对二进制日志记录有以下影响:
-
--set-gtid-purged=OFF
:SET @@SESSION.SQL_LOG_BIN=0;
未添加到输出中。-
--set-gtid-purged=ON
:SET @@SESSION.SQL_LOG_BIN=0;
已添加到输出中。 -
如果要备份的服务器上启用了 GTID,则
--set-gtid-purged=AUTO
:SET @@SESSION.SQL_LOG_BIN=0;
将添加到输出中(即AUTO
评估为ON
)。
-
MySQL 5.7.18 中添加了此选项。
此选项将事务隔离模式设置为REPEATABLE READ,并在转储数据之前向服务器发送START TRANSACTION SQL 语句。它仅对诸如InnoDB
之类的事务 table 很有用,因为这样,它将在发出START TRANSACTION时转储数据库的一致状态,而不会阻塞任何应用程序。
使用此选项时,应记住只有InnoDB
个 table 以一致状态转储。例如,使用此选项时转储的任何MyISAM
或MEMORY
table 可能仍会更改状态。
在处理--single-transaction转储时,为了确保有效的转储文件(正确的 table 内容和二进制日志坐标),没有其他连接应使用以下语句:ALTER TABLE,CREATE TABLE,DROP TABLE,RENAME TABLE,TRUNCATE 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
语句中省略DEFINER
和SQL SECURITY
子句以获取视图和存储的程序。重新加载转储文件时,该转储文件将创建使用默认DEFINER
和SQL SECURITY
值的对象。参见第 23.6 节“存储的对象访问控制”。
- --skip-dump-rows,
-d
不要转储 table 行。
- --socket=path,
-S path
对于到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将其禁用。
- --user=user_name,
-u user_name
用于连接到服务器的 MySQL 帐户的用户名。
以CREATE USER和GRANT语句的形式将用户帐户作为逻辑定义转储。
用户定义存储在mysql
系统数据库的授权 table 中。默认情况下,mysqlpump在mysql
数据库转储中不包括授权 table。要将授权 table 的内容转储为逻辑定义,请使用--users选项并禁止所有数据库转储:
shell> mysqlpump --exclude-databases=% --users
- --version,
-V
显示版本信息并退出。
定期显示进度指示器,该指示器提供有关 table,行和其他对象的已完成和总数的信息。
默认情况下启用此选项。使用--skip-watch-progress将其禁用。
mysqlpump 对象选择
mysqlpump具有一组包含和排除选项,它们可以过滤几种对象类型并提供对要转储哪些对象的灵活控制:
-
--include-databases和--exclude-databases适用于数据库及其中的所有对象。
-
--include-tables和--exclude-tables适用于 table 格。除非给出特定于触发器的选项,否则这些选项还会影响与 table 关联的触发器。
-
--include-routines和--exclude-routines适用于存储过程和函数。如果例程选项与存储过程名称匹配,则它也与相同名称的存储函数匹配。
-
--include-events和--exclude-events适用于事件计划程序事件。
-
--include-users和--exclude-users适用于用户帐户。
任何包含或排除选项都可以多次给出。效果是累加的。这些选项的 Sequences 无关紧要。
每个包含和排除选项的值是相应对象类型的逗号分隔名称的列 table。例如:
--exclude-databases=test,world
--include-tables=customer,invoice
对象名称中允许使用通配符:
-
%
匹配零个或多个字符的任何序列。 -
_
匹配任何单个字符。
例如,--include-tables=t%,__tmp匹配以t
开头的所有 table 名和以tmp
结尾的所有五个字符的 table 名。
对于用户,指定的没有主机名的名称将使用隐含的%
解释。例如,u1
和u1@%
是等效的。这与通常在 MySQL 中应用的等效项相同(请参阅第 6.2.4 节“指定帐户名”)。
包含和排除选项的相互作用如下:
-
默认情况下,没有任何包含或排除选项,mysqlpump转储所有数据库(在mysqlpump Restrictions中注明了某些 exception)。
-
如果在没有排除选项的情况下给出了包含选项,则仅转储名为“ included”的对象。
-
如果在没有包含选项的情况下给出了排除选项,则所有被命名为被排除对象的对象都将被转储。
-
如果给出了包含和排除选项,则不会转储所有名为“排除”和未命名为“包括”的对象。所有其他对象将被转储。
如果要转储多个数据库,则可以通过用数据库名称限定对象名称来命名特定数据库中的 table,触发器和例程。以下命令转储数据库db1
和db2
,但不包括 tabledb1.t1
和db2.t2
:
shell> mysqlpump --include-databases=db1,db2 --exclude-tables=db1.t1,db2.t2
以下选项提供了指定转储哪些数据库的替代方法:
- --all-databases选项转储所有数据库(在mysqlpump Restrictions中有某些 exception)。这等效于完全不指定任何对象选项(默认的mysqlpump操作是转储所有内容)。
--include-databases=%与--all-databases类似,但是选择所有数据库进行转储,即使是--all-databases的 exception。
- --databases选项使mysqlpump将所有名称参数视为要转储的数据库名称。它等效于命名相同数据库的--include-databases选项。
mysqlpump 并行处理
mysqlpump可以使用并行性来实现并发处理。您可以选择数据库之间(同时转储多个数据库)和数据库内(同时转储给定数据库的多个对象)的并发性。
默认情况下,mysqlpump设置一个带有两个线程的队列。您可以创建其他队列并控制分配给每个队列的线程数,包括默认队列:
- --default-parallelism=N指定用于每个队列的默认线程数。在没有此选项的情况下,*
N
*为 2.
默认队列始终使用默认线程数。除非另行指定,否则其他队列将使用默认线程数。
- --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设置一个队列来处理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
的队列使用三个线程,默认队列使用两个线程的默认值。
作为一种特殊情况,具有--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_SCHEMA
,performance_schema
,ndbinfo
或sys
模式。要转储其中任何一个,请在命令行上明确命名它们。您也可以使用--databases或--include-databases选项为它们命名。
mysqlpump不转储InnoDB
CREATE TABLESPACE语句。
mysqlpump使用CREATE USER和GRANT语句以逻辑形式转储用户帐户(例如,当您使用--include-users或--users选项时)。因此,mysql
系统数据库的转储默认情况下不包括包含用户定义的授权 table:user
,db
,tables_priv
,columns_priv
,procs_priv
或proxies_priv
。要转储任何授权 table,请命名mysql
数据库,后跟 table 名:
shell> mysqlpump mysql user db ...