客户端实用程序 mysqlpump 执行逻辑备份,生成一组 SQL 语句,可以执行以恢复原始数据库对象定义和表数据。它将一个或多个 MySQL 数据库转储以备用或传输到另一个 SQL 服务器。
mysqlpump 从 MySQL 8.0.34 / 8.1.0 开始弃用;预计在未来版本的 MySQL 中删除。你可以使用诸如 mysqldump 和 MySQL Shell 等 MySQL 程序来执行逻辑备份、转储数据库和类似任务。
考虑使用 MySQL Shell 转储实用程序,它提供了并行转储、文件压缩和进度信息显示,以及云功能,如 Oracle Cloud Infrastructure Object Storage 流式传输和 MySQL HeatWave Service 兼容性检查和修改。转储可以轻松地导入到 MySQL 服务器实例或 MySQL HeatWave Service DB System 中,使用 MySQL Shell 载入转储实用程序。MySQL Shell 的安装说明可以在 这里找到。
mysqlpump 的功能包括:
-
数据库和数据库对象(表、存储过程、用户账户)的并行处理,以加速转储过程
-
更好地控制要转储的数据库和数据库对象(表、存储过程、用户账户)
-
将用户账户转储为账户管理语句(
CREATE USER、GRANT),而不是将其作为插入到mysql系统数据库中 -
创建压缩输出的能力
-
进度指示器(值为估算)
-
对于转储文件的重新加载,使用
InnoDB表的次要索引创建,通过在插入行后添加索引来加速
mysqlpump 使用 MySQL 5.7 中引入的功能,因此假设使用 MySQL 5.7 或更高版本。
mysqlpump 需要至少具有转储表的 SELECT 权限,转储视图的 SHOW VIEW 权限,转储触发器的 TRIGGER 权限,以及 LOCK TABLES 权限,如果不使用 --single-transaction 选项。需要 SELECT 权限在 mysql 系统数据库中,以转储用户定义。某些选项可能需要其他权限,如选项描述中所述。
要重新加载转储文件,需要执行语句所需的权限,例如创建对象的适当 CREATE 权限。
使用 PowerShell 在 Windows 上创建的转储文件具有 UTF-16 编码:
mysqlpump [options] > dump.sql
然而,UTF-16 不允许作为连接字符集(见 第 12.4 节,“连接字符集和排序规则”),因此无法正确加载转储文件。要解决这个问题,请使用 --result-file 选项,该选项以 ASCII 格式创建输出:
mysqlpump [options] --result-file=dump.sql
mysqlpump 调用语法
默认情况下,mysqlpump 转储所有数据库(某些例外情况见 mysqlpump 限制)。要明确指定此行为,请使用 --all-databases 选项:
mysqlpump --all-databases
要转储单个数据库或该数据库中的某些表,请在命令行中指定数据库名称,后跟表名称:
mysqlpump db_name
mysqlpump db_name tbl_name1 tbl_name2 ...
要将所有名称参数视为数据库名称,请使用 --databases 选项:
mysqlpump --databases db_name1 db_name2 ...
默认情况下,mysqlpump 不转储用户帐户定义,即使您转储了包含授权表的 mysql 系统数据库。要转储授权表内容作为逻辑定义,以 CREATE USER 和 GRANT 语句的形式,请使用 --users 选项并抑制所有数据库转储:
mysqlpump --exclude-databases=% --users
在上面的命令中,% 是一个通配符,匹配 --exclude-databases 选项的所有数据库名称。
mysqlpump 支持多个选项,以包括或排除数据库、表、存储程序和用户定义。请参阅 mysqlpump 对象选择。
要重新加载转储文件,请执行它包含的语句。例如,使用 mysql 客户端:
mysqlpump [options] > dump.sql
mysql < dump.sql
以下讨论提供了更多的 mysqlpump 用法示例。
要查看 mysqlpump 支持的选项列表,请发出命令 mysqlpump --help。
mysqlpump 选项摘要
mysqlpump 支持以下选项,可以在命令行或选项文件的 [mysqlpump] 和 [client] 组中指定。mysqlpump 也读取 [mysql_dump] 组,但这种行为已弃用。有关 MySQL 程序使用的选项文件的信息,请参阅 第 6.2.2.2 节,“使用选项文件”。
表 6.16 mysqlpump 选项
| Option Name | Description |
|---|---|
| --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 语句 |
| --all-databases | 转储所有数据库 |
| --bind-address | 使用指定的网络接口连接到 MySQL 服务器 |
| --character-sets-dir | 字符集安装的目录 |
| --列统计信息 | 写入ANALYZE TABLE语句以生成统计信息histograms |
| --完整插入 | 使用完整的INSERT语句,包括列名 |
| --压缩 | 压缩客户端和服务器之间的所有信息 |
| --输出压缩 | 输出压缩算法 |
| --压缩算法 | 服务器连接的允许压缩算法 |
| --数据库 | 将所有名称参数解释为数据库名称 |
| --调试 | 写入调试日志 |
| --调试检查 | 程序退出时打印调试信息 |
| --调试信息 | 程序退出时打印调试信息、内存和CPU统计信息 |
| --默认身份验证 | 要使用的身份验证插件 |
| --默认字符集 | 指定默认字符集 |
| --默认并行度 | 默认的并行处理线程数 |
| --额外选项文件 | 除了通常的选项文件外,还读取命名的选项文件 |
| --选项文件 | 只读取命名的选项文件 |
| --选项组后缀 | 选项组后缀值 |
| --延迟表索引 | 在重新加载时,延迟索引创建直到加载表行后 |
| --事件 | 从转储的数据库中转储事件 |
| --排除数据库 | 要排除的数据库 |
| --排除事件 | 要排除的事件 |
| --排除例程 | 要排除的例程 |
| --排除表 | 要排除的表 |
| --排除触发器 | 要排除的触发器 |
| --排除用户 | 要排除的用户 |
| --扩展插入 | 使用多行INSERT语句 |
| --获取服务器公钥 | 从服务器请求RSA公钥 |
| --帮助 | 显示帮助信息并退出 |
| --十六进制Blob | 使用十六进制表示法转储二进制列 |
| --主机 | MySQL服务器所在的主机 |
| --包括数据库 | 要包括在转储中的数据库 |
| --包括事件 | 要包括在转储中的事件 |
| --包括例程 | 要包括在转储中的例程 |
| --包括表 | 要包括在转储中的表 |
| --包括触发器 | 要包括在转储中的触发器 |
| --包括用户 | 要包括在转储中的用户 |
| --插入忽略 | 写入INSERT IGNORE语句而不是INSERT语句 |
| --日志错误文件 | 将警告和错误追加到命名文件 |
| --登录路径 | 从.mylogin.cnf中读取登录路径选项 |
| --最大允许数据包 | 从服务器发送或接收的最大数据包长度 |
| --网络缓冲区长度 | TCP/IP和套接字通信的缓冲区大小 |
| --不创建数据库 | 不写入CREATE DATABASE语句 |
| --不创建信息 | 不写入重新创建每个转储表的CREATE TABLE语句 |
| --不使用默认值 | 不读取选项文件 |
| --不使用登录路径 | 不从登录路径文件中读取登录路径 |
| --并行模式 | 指定模式处理并行度 |
| --密码 | 连接服务器时使用的密码 |
| --密码1 | 连接服务器时使用的第一个多因素身份验证密码 |
| --密码2 | 连接服务器时使用的第二个多因素身份验证密码 |
| --密码3 | 连接服务器时使用的第三个多因素身份验证密码 |
| --插件目录 | 插件安装的目录 |
| --端口 | 连接服务器时使用的TCP/IP端口号 |
| --打印默认值 | 打印默认选项 |
| --协议 | 使用的传输协议 |
| --replace | 写入REPLACE语句而不是INSERT语句 |
| --结果文件 | 将输出直接写入到指定文件 |
| --例程 | 转储存储过程和函数 |
| --服务器公钥路径 | 包含RSA公钥的文件路径 |
| --设置字符集 | 添加SET NAMES default_character_set到输出 |
| --设置GTID已清除 | 是否添加SET @@GLOBAL.GTID_PURGED到输出 |
| --单个事务 | 在单个事务中转储表 |
| --跳过定义者 | 省略DEFINER和SQL SECURITY子句从视图和存储程序CREATE语句 |
| --跳过转储行 | 不转储表行 |
| --跳过生成的不可见主键 | 不转储关于生成的不可见主键的信息 |
| --套接字 | Unix套接字文件或Windows命名管道 |
| --ssl-ca | 包含受信任的SSL证书颁发机构的文件 |
| --ssl-capath | 包含受信任的SSL证书颁发机构证书文件的目录 |
| --ssl-cert | 包含X.509证书的文件 |
| --ssl-cipher | 连接加密的可接受密码 |
| --ssl-crl | 包含证书吊销列表的文件 |
| --ssl-crlpath | 包含证书吊销列表文件的目录 |
| --ssl-FIPS 模式 | 是否在客户端启用 FIPS 模式 |
| --ssl-key | 包含 X.509 密钥的文件 |
| --ssl-mode | 到服务器的连接的所需安全状态 |
| --ssl-session-data | 包含 SSL 会话数据的文件 |
| --ssl-session-data-continue-on-failed-reuse | 如果会话重用失败,是否建立连接 |
| --tls-ciphersuites | 加密连接的可接受 TLSv1.3 密码套件 |
| --tls-sni-servername | 客户端提供的服务器名称 |
| --tls-version | 加密连接的可接受 TLS 协议 |
| --triggers | 转储每个表的触发器 |
| --tz-utc | 将 SET TIME_ZONE='+00:00' 添加到转储文件 |
| --user | 连接到服务器时使用的 MySQL 用户名 |
| --users | 转储用户账户 |
| --version | 显示版本信息并退出 |
| --watch-progress | 显示进度指示器 |
| --zstd-compression-level | 使用 zstd 压缩的连接的压缩级别 |
mysqlpump 选项描述
-
--help,-?Command-Line Format --help显示帮助信息并退出。
-
Command-Line Format --add-drop-database在每个
CREATE DATABASE语句之前写入DROP DATABASE语句。Note在 MySQL 8.3 中,
mysql架构被认为是一个系统架构,不能被最终用户删除。如果使用--add-drop-database与--all-databases或与--databases一起使用,其中包括mysql架构的列表,转储文件将包含一个DROP DATABASE `mysql`语句,该语句在重新加载时将导致错误。相反,使用
--add-drop-database,使用--databases与不包括mysql的架构列表。 -
Command-Line Format --add-drop-table在每个
CREATE TABLE语句之前写入DROP TABLE语句。 -
Command-Line Format --add-drop-user在每个
CREATE USER语句之前写入DROP USER语句。 -
Command-Line Format --add-locks将每个表转储括在
LOCK TABLES和UNLOCK TABLES语句中。这将在重新加载转储文件时加速插入。见 第 10.2.5.1 节,“优化 INSERT 语句”。这个选项不适用于并行处理,因为
INSERT语句来自不同表可以交叉,并且UNLOCK TABLES在一个表的插入结束后可能会释放其他表的锁。--add-locks和--single-transaction是互斥的。 -
--all-databases,-ACommand-Line Format --all-databases转储所有数据库(除了某些特殊情况,见 mysqlpump 限制)。这是默认行为,如果没有其他选项被明确指定。
--all-databases和--databases是互斥的。Note见
--add-drop-database描述关于该选项与--all-databases的不兼容性。在 MySQL 8.3 之前,
--routines和--events选项对于 mysqldump 和 mysqlpump 不是必需的,以便在使用--all-databases选项时包括存储过程和事件:转储包括mysql系统数据库,因此也包括mysql.proc和mysql.event表,包含存储过程和事件定义。从 MySQL 8.3 开始,mysql.event和mysql.proc表不再使用。相应对象的定义存储在数据字典表中,但这些表不被转储。要在使用--all-databases选项时包括存储过程和事件,请明确使用--routines和--events选项。 -
Command-Line Format --bind-address=ip_address在具有多个网络接口的计算机上,使用该选项来选择用于连接 MySQL 服务器的接口。
-
Command-Line Format --character-sets-dir=dir_nameType 目录名称 字符集安装的目录。见 第 12.15 节,“字符集配置”。
-
Command-Line Format --column-statisticsType 布尔值 Default Value OFF将
ANALYZE TABLE语句添加到输出中,以生成柱状图统计信息,当转储文件被重新加载时。这选项默认情况下是禁用的,因为大表的柱状图生成可能需要很长时间。 -
Command-Line Format --完整插入写入完整的
INSERT语句,包括列名。 -
--压缩,-CCommand-Line Format --压缩[={OFF|ON}]Deprecated 是 Type 布尔值 Default Value OFF在客户端和服务器之间发送所有信息时进行压缩,如果可能。见 第 6.2.8 节,“连接压缩控制”。
该选项已弃用。预计在未来版本的 MySQL 中删除该选项。见 配置遗留连接压缩。
-
Command-Line Format --压缩输出=算法Type 枚举 Valid Values LZ4ZLIB默认情况下,mysqlpump 不压缩输出。该选项指定输出压缩使用指定的算法。允许的算法是
LZ4和ZLIB。要解压缩压缩的输出,您需要一个适当的实用程序。如果系统命令 lz4 和 openssl zlib 不可用,MySQL 发行版包括 lz4_decompress 和 zlib_decompress 实用程序,可以用来解压缩 mysqlpump 输出,该输出使用
--压缩输出=LZ4和--压缩输出=ZLIB选项压缩的输出。更多信息,请见 第 6.8.1 节,“lz4_decompress — 解压缩 mysqlpump LZ4 压缩输出”,和 第 6.8.3 节,“zlib_decompress — 解压缩 mysqlpump ZLIB 压缩输出”。 -
Command-Line Format --压缩算法=值Type 设置 Default Value 未压缩Valid Values zlibzstd未压缩服务器连接的允许压缩算法。可用的算法与
protocol_compression_algorithms系统变量相同。默认值是未压缩。更多信息,请见 第 6.2.8 节,“连接压缩控制”。
-
--数据库,-BCommand-Line Format --数据库通常,mysqlpump 将命令行上的第一个名称参数视为数据库名称,并将随后的名称参数视为表名称。使用该选项,mysqlpump 将所有名称参数视为数据库名称。
CREATE DATABASE语句将包含在输出中,每个新数据库之前。Note请参阅
--添加-删除-数据库描述,以了解该选项与--数据库的不兼容性。 -
--调试[=,调试选项]-# [调试选项]Command-Line Format --调试[=调试选项]Type 字符串 Default Value d:t:O,/tmp/mysqlpump.trace写入调试日志。典型的
调试选项字符串是d:t:o,。默认是文件名d:t:O,/tmp/mysqlpump.trace。该选项仅在 MySQL 使用
WITH_DEBUG构建时可用。 Oracle 提供的 MySQL 发行二进制文件 不 使用该选项。 -
Command-Line Format --调试检查Type 布尔值 Default Value FALSE在程序退出时打印一些调试信息。
该选项仅在 MySQL 使用
WITH_DEBUG构建时可用。 Oracle 提供的 MySQL 发行二进制文件 不 使用该选项。 -
--调试信息,-TCommand-Line Format --调试信息Type 布尔值 Default Value FALSE在程序退出时打印调试信息和内存和 CPU 使用情况统计信息。
该选项仅在 MySQL 使用
WITH_DEBUG构建时可用。 Oracle 提供的 MySQL 发行二进制文件 不 使用该选项。 -
Command-Line Format --默认身份验证=插件Type 字符串 关于客户端身份验证插件的提示。请参阅 第 8.2.17 节,“可插拔身份验证”。
-
Command-Line Format --默认字符集=字符集名称Type 字符串 Default Value utf8使用
字符集名称作为默认字符集。请参阅 第 12.15 节,“字符集配置”。如果没有指定字符集,mysqlpump 使用utf8mb4。 -
Command-Line Format --默认并行度=NType 整数 Default Value 2每个并行处理队列的默认线程数。默认为 2。
该
--并行模式选项也会影响并行度,可以用来覆盖默认线程数。有关更多信息,请参阅 mysqlpump 并行处理。使用
--default-parallelism=0和没有--parallel-schemas选项时,mysqlpump 作为单线程进程运行,不创建队列。启用并行处理时,来自不同数据库的输出可能会交叉。
-
Command-Line Format --defaults-extra-file=文件名Type 文件名 在全局选项文件之后(在 Unix 上)但在用户选项文件之前读取该选项文件。如果文件不存在或不可访问,将发生错误。如果
文件名不是绝对路径名,则相对于当前目录进行解释。有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“命令行选项影响选项文件处理”。
-
Command-Line Format --defaults-file=文件名Type 文件名 仅使用给定的选项文件。如果文件不存在或不可访问,将发生错误。如果
文件名不是绝对路径名,则相对于当前目录进行解释。例外:即使使用
--defaults-file,客户端程序也会读取.mylogin.cnf。有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“命令行选项影响选项文件处理”。
-
Command-Line Format --defaults-group-suffix=字符串Type 字符串 不仅读取通常的选项组,还读取具有通常名称和
字符串后缀的组。例如,mysqlpump 通常读取[client]和[mysqlpump]组。如果使用--defaults-group-suffix=_other,mysqlpump 也将读取[client_other]和[mysqlpump_other]组。有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“命令行选项影响选项文件处理”。
-
Command-Line Format --defer-table-indexesType 布尔值 Default Value TRUE在转储输出中,将每个表的索引创建延迟到行加载完成后。这适用于所有存储引擎,但对于
InnoDB只适用于次要索引。此选项默认启用;使用
--skip-defer-table-indexes禁用它。 -
Command-Line Format --eventsType 布尔值 Default Value TRUE在转储输出中包括 Event Scheduler 事件 для转储的数据库。事件转储需要
EVENT权限 для这些数据库。使用
--events生成的输出包含CREATE EVENT语句以创建事件。此选项默认启用;使用
--skip-events禁用它。 -
Command-Line Format --exclude-databases=db_listType 字符串 不要转储
db_list中的数据库,后者是一个或多个以逗号分隔的数据库名称。多个实例的此选项是累加的。有关更多信息,请参阅 mysqlpump 对象选择。 -
Command-Line Format --exclude-events=event_listType 字符串 不要转储
event_list中的事件,后者是一个或多个以逗号分隔的事件名称。多个实例的此选项是累加的。有关更多信息,请参阅 mysqlpump 对象选择。 -
--exclude-routines=routine_listCommand-Line Format --exclude-routines=routine_listType 字符串 不要转储
routine_list中的存储过程或函数,后者是一个或多个以逗号分隔的存储过程或函数名称。多个实例的此选项是累加的。有关更多信息,请参阅 mysqlpump 对象选择。 -
Command-Line Format --exclude-tables=table_listType 字符串 不要转储
table_list中的表,后者是一个或多个以逗号分隔的表名称。多个实例的此选项是累加的。有关更多信息,请参阅 mysqlpump 对象选择。 -
--exclude-triggers=trigger_listCommand-Line Format --exclude-triggers=trigger_listType 字符串 不要转储
trigger_list中的触发器,后者是一个或多个以逗号分隔的触发器名称。多个实例的此选项是累加的。有关更多信息,请参阅 mysqlpump 对象选择。 -
Command-Line Format --exclude-users=user_listType 字符串 不要转储
user_list中的用户账户,后者是一个或多个以逗号分隔的账户名称。多个实例的此选项是累加的。有关更多信息,请参阅 mysqlpump 对象选择。 -
Command-Line Format --extended-insert=N使用多行语法写入
INSERT语句,包括多个VALUES列表。这将生成较小的转储文件,并在重新加载文件时加速插入。 -
Command-Line Format --get-server-public-keyType 布尔值 从服务器请求用于RSA密钥对基于密码交换的公钥。此选项适用于使用
caching_sha2_password身份验证插件的客户端。对于该插件,服务器不会发送公钥,除非被请求。此选项将被忽略,如果RSA基于密码交换不被使用,如客户端使用安全连接连接到服务器时。如果
--server-public-key-path=被指定并指定了有效的公钥文件,它将优先于file_name--get-server-public-key。有关
caching_sha2_password插件的信息,请参阅第 8.4.1.2 节,“Caching SHA-2 Pluggable Authentication”。 -
Command-Line Format --hex-blob使用十六进制表示形式转储二进制列(例如,
'abc'变为0x616263)。受影响的数据类型是BINARY、VARBINARY、BLOB类型、BIT、所有空间数据类型和使用binary字符集的其他非二进制数据类型。 -
--host=,host_name-hhost_nameCommand-Line Format --host从指定的主机上的 MySQL 服务器转储数据。
-
Command-Line Format --include-databases=db_listType String 转储
db_list中的数据库,db_list是以逗号分隔的一或多个数据库名称的列表。转储包括所有对象在命名的数据库中。多个实例此选项是累加的。有关更多信息,请参阅mysqlpump 对象选择。 -
Command-Line Format --include-events=event_listType String 转储
event_list中的事件,event_list是以逗号分隔的一或多个事件名称的列表。多个实例此选项是累加的。有关更多信息,请参阅mysqlpump 对象选择。 -
--include-routines=routine_listCommand-Line Format --include-routines=routine_listType String 转储
routine_list中的例程(存储过程或函数),routine_list是以逗号分隔的一或多个例程名称的列表。多个实例此选项是累加的。有关更多信息,请参阅mysqlpump 对象选择。 -
Command-Line Format --include-tables=table_listType String 转储
table_list中的表,table_list是以逗号分隔的一或多个表名称的列表。多个实例此选项是累加的。有关更多信息,请参阅mysqlpump 对象选择。 -
--include-triggers=trigger_listCommand-Line Format --include-triggers=触发器列表Type 字符串 转储触发器在
trigger_list中,该列表包含一个或多个以逗号分隔的触发器名称。多个实例此选项是累加的。有关更多信息,请参阅 mysqlpump 对象选择。 -
Command-Line Format --include-users=user_listType 字符串 转储用户账户在
user_list中,该列表包含一个或多个以逗号分隔的用户名。多个实例此选项是累加的。有关更多信息,请参阅 mysqlpump 对象选择。 -
Command-Line Format --insert-ignore写入
INSERT IGNORE语句,而不是INSERT语句。 -
Command-Line Format --log-error-file=file_nameType 文件名 将警告和错误追加到命名文件中。如果不指定此选项,mysqlpump 将警告和错误写入标准错误输出。
-
Command-Line Format --login-path=nameType 字符串 从命名登录路径在
.mylogin.cnf登录路径文件中读取选项。一个 “登录路径” 是一个选项组,指定了连接到哪个 MySQL 服务器并以哪个账户身份验证。要创建或修改登录路径文件,请使用 mysql_config_editor 实用程序。请参阅 第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“命令行选项影响选项文件处理”。
-
Command-Line Format --no-login-paths跳过从登录路径文件中读取选项。
请参阅
--login-path有关相关信息。有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“命令行选项影响选项文件处理”。
-
Command-Line Format --max-allowed-packet=NType 数字 Default Value 25165824客户端/服务器通信的缓冲区大小的最大值。默认值为 24MB,最大值为 1GB。
-
Command-Line Format --net-buffer-length=NType 数字 Default Value 1047552客户端/服务器通信的初始缓冲区大小。当创建多行
INSERT语句(如--extended-insert选项)时,mysqlpump创建的行长达N字节。如果您使用此选项增加值,请确保 MySQL 服务器net_buffer_length系统变量的值至少与此相同。 -
Command-Line Format --no-create-db抑制任何可能包含在输出中的
CREATE DATABASE语句。 -
--no-create-info,-tCommand-Line Format --no-create-info不写入
CREATE TABLE语句以创建每个转储表。 -
Command-Line Format --no-defaults不读取任何选项文件。如果程序启动失败是由于从选项文件中读取未知选项,
--no-defaults可以用于防止它们被读取。唯一的例外是,如果存在,
.mylogin.cnf文件将被读取。这允许在命令行上以更安全的方式指定密码,即使使用--no-defaults。要创建.mylogin.cnf,请使用mysql_config_editor实用程序。请参阅第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅第 6.2.2.3 节,“命令行选项影响选项文件处理”。
-
--parallel-schemas=[N:]db_listCommand-Line Format --parallel-schemas=[N:]schema_listType String 为处理数据库队列
db_list,其中db_list是以逗号分隔的一或多个数据库名称的列表。如果给定N,队列将使用N个线程。如果未给定N,则--default-parallelism选项将确定队列线程的数量。多个实例创建多个队列。mysqlpump还将创建一个默认队列,以便处理未在任何
--parallel-schemas选项中命名的数据库,以及转储用户定义时命令选项选择它们。有关更多信息,请参阅mysqlpump 并行处理。 -
--password[=,password]-p[password]Command-Line Format --password[=password]Type String MySQL账户用于连接服务器的密码。密码值是可选的。如果不提供,mysqlpump 将提示输入。如果提供,必须在
--password=或-p和其后的密码之间没有空格。如果不指定密码选项,默认情况下不发送密码。在命令行上指定密码应该被认为是不安全的。要避免在命令行上输入密码,请使用选项文件。参见 第 8.1.2.1 节,“最终用户密码安全指南”。
要明确指定没有密码并且 mysqlpump 不应该提示输入,请使用
--skip-password选项。 -
MySQL 账户用于连接服务器的多因素身份验证因子 1 的密码。密码值是可选的。如果不提供,mysqlpump 将提示输入。如果提供,必须在
--password1=和其后的密码之间没有空格。如果不指定密码选项,默认情况下不发送密码。在命令行上指定密码应该被认为是不安全的。要避免在命令行上输入密码,请使用选项文件。参见 第 8.1.2.1 节,“最终用户密码安全指南”。
要明确指定没有密码并且 mysqlpump 不应该提示输入,请使用
--skip-password1选项。--password1和--password是同义的,如同--skip-password1和--skip-password。 -
MySQL 账户用于连接服务器的多因素身份验证因子 2 的密码。该选项的语义与
--password1的语义相同;请参见该选项的描述以获取详细信息。 -
MySQL 账户用于连接服务器的多因素身份验证因子 3 的密码。该选项的语义与
--password1的语义相同;请参见该选项的描述以获取详细信息。 -
Command-Line Format --plugin-dir=dir_nameType 目录名称 在该目录中查找插件。如果使用
--default-auth选项指定身份验证插件,但 mysqlpump 未找到它。参见 第 8.2.17 节,“可插拔身份验证”。 -
--port=,port_num-Pport_numCommand-Line Format --port=port_numType 数字 Default Value 3306对于 TCP/IP 连接,使用的端口号。
-
Command-Line Format --打印默认值打印程序名称和从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参见 第 6.2.2.3 节,“命令行选项影响选项文件处理”。
-
Command-Line Format --协议=typeType 字符串 Default Value [见文本]Valid Values TCPSOCKETPIPEMEMORY用于连接到服务器的传输协议。当其他连接参数通常导致使用其他协议时,这很有用。有关允许值的详细信息,请参见 第 6.2.7 节,“连接传输协议”。
-
Command-Line Format --replace -
Command-Line Format --结果文件=file_nameType 文件名 将输出定向到命名的文件中。结果文件将被创建,并且其以前的内容将被覆盖,即使在生成转储时发生错误。
在 Windows 上使用此选项,以防止换行符
\n被转换为\r\n回车换行序列。 -
Command-Line Format --例程Type 布尔值 Default Value TRUE在转储的数据库中包括存储的例程(过程和函数)。此选项需要全局
SELECT权限。使用
--例程生成的输出包含CREATE PROCEDURE和CREATE FUNCTION语句,以创建例程。此选项默认启用;使用
--skip-routines禁用它。 -
Command-Line Format --服务器公钥路径=file_nameType 文件名 服务器公钥文件的路径名,以 PEM 格式包含客户端副本的公钥,用于 RSA 密钥对基于密码交换。该选项仅适用于使用
sha256_password或caching_sha2_password身份验证插件的客户端。如果客户端使用安全连接连接到服务器,该选项将被忽略。如果
--服务器公钥路径=指定了有效的公钥文件,它将优先于文件名--获取服务器公钥。对于
sha256_password,该选项仅在 MySQL 使用 OpenSSL 构建时适用。关于
sha256_password和caching_sha2_password插件的信息,请参阅 第 8.4.1.3 节,“SHA-256 可插拔身份验证” 和 第 8.4.1.2 节,“Caching SHA-2 可插拔身份验证”。 -
Command-Line Format --set-charset将
SET NAMES写入输出。default_character_set此选项默认启用。要禁用它并抑制
SET NAMES语句,请使用--skip-set-charset。 -
Command-Line Format --set-gtid-purged=valueType 枚举 Default Value AUTOValid Values OFFONAUTO此选项启用对全局事务 ID(GTID)信息的控制,该信息将被写入转储文件,指示是否添加
SET @@GLOBAL.gtid_purged语句到输出。此选项还可能导致写入输出的语句,以禁用二进制日志记录,而不是在转储文件被重新加载时。以下表格显示了允许的选项值。默认值为
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;到输出。 -
--set-gtid-purged=AUTO: 如果服务器上启用了 GTID(即AUTO评估为ON),添加SET @@SESSION.SQL_LOG_BIN=0;到输出。
-
-
Command-Line Format --single-transaction此选项将事务隔离模式设置为
REPEATABLE READ,并在转储数据之前向服务器发送START TRANSACTIONSQL 语句。它仅适用于事务表,如InnoDB,因为它会在START TRANSACTION发出时转储数据库的一致状态,而不阻止任何应用程序。使用此选项时,请注意只有
InnoDB表格会被转储到一致状态。例如,使用此选项时转储的MyISAM或MEMORY表格可能仍然会更改状态。当
--single-transaction转储正在进行时,为了确保转储文件的正确性(正确的表内容和二进制日志坐标),不应该使用以下语句的其他连接:ALTER TABLE、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE。一致的读取不是从这些语句中隔离的,因此在要转储的表上使用这些语句可能会导致SELECT由 mysqlpump 执行以检索表内容获取不正确的内容或失败。--add-locks和--single-transaction是互斥的。 -
Command-Line Format --skip-definerType 布尔值 Default Value FALSE省略
DEFINER和SQL SECURITY子句从视图和存储程序的CREATE语句中。转储文件,在重新加载时,创建使用默认DEFINER和SQL SECURITY值的对象。见 第 27.6 节,“存储对象访问控制”。 -
--skip-dump-rows,-dCommand-Line Format --skip-dump-rowsType 布尔值 Default Value FALSE不转储表行。
-
--skip-generated-invisible-primary-keyCommand-Line Format --skip-generated-invisible-primary-keyType 布尔值 Default Value FALSE该选项将生成的不可见主键(GIPK)排除在转储之外。见 第 15.1.20.11 节,“生成的不可见主键”,了解更多关于 GIPK 和 GIPK 模式的信息。
-
--socket=,path-SpathCommand-Line Format --socket={file_name|pipe_name}Type 字符串 对于连接到
localhost的连接,使用的 Unix 套接字文件,或者在 Windows 上,使用的命名管道名称。在 Windows 上,该选项仅适用于服务器启动时启用了
named_pipe系统变量以支持命名管道连接。此外,执行连接的用户必须是 Windows 组named_pipe_full_access_group的成员。 -
以
--ssl开头的选项指定是否使用加密连接到服务器,并指示 SSL 密钥和证书的位置。见 命令选项加密连接。 -
--ssl-fips-mode={OFF|ON|STRICT}Command-Line Format --ssl-fips-mode={OFF|ON|STRICT}Deprecated 是 Type 枚举 Default Value OFFValid Values OFFONSTRICT在客户端启用 FIPS 模式的控制。
--ssl-fips-mode选项不同于其他--ssl-选项,因为它不是用来建立加密连接,而是影响允许哪些加密操作。请参阅 第 8.8 节,“FIPS 支持”。xxx这些
--ssl-fips-mode值是允许的:-
OFF:禁用 FIPS 模式。 -
ON:启用 FIPS 模式。 -
STRICT:启用“严格”FIPS 模式。
Note如果 OpenSSL FIPS 对象模块不可用,则唯一允许的
--ssl-fips-mode值是OFF。在这种情况下,将--ssl-fips-mode设置为ON或STRICT将导致客户端在启动时产生警告,并在非 FIPS 模式下操作。该选项已弃用。预计它将在未来版本的 MySQL 中被删除。
-
-
--tls-ciphersuites=ciphersuite_listCommand-Line Format --tls-ciphersuites=ciphersuite_listType 字符串 使用 TLSv1.3 加密连接的允许密码套件。该值是一个或多个以冒号分隔的密码套件名称。可以命名的密码套件取决于编译 MySQL 的 SSL 库。详细信息,请参阅 第 8.3.2 节,“加密连接 TLS 协议和密码”。
-
--tls-sni-servername=server_nameCommand-Line Format --tls-sni-servername=server_nameType 字符串 当指定时,该名称将传递给
libmysqlclientC API 库使用MYSQL_OPT_TLS_SNI_SERVERNAME选项的mysql_options()。服务器名称不区分大小写。要显示客户端当前会话中指定的服务器名称(如果有),请检查Tls_sni_server_name状态变量。服务器名称指示(SNI)是 TLS 协议的扩展(OpenSSL 必须使用 TLS 扩展来编译以使该选项生效)。MySQL 实现的 SNI 仅表示客户端。
-
Command-Line Format --tls-version=protocol_listType 字符串 Default Value TLSv1,TLSv1.1,TLSv1.2,TLSv1.3(OpenSSL 1.1.1 或更高版本)TLSv1,TLSv1.1,TLSv1.2(否则)加密连接的允许 TLS 协议。该值是一个或多个以逗号分隔的协议名称。可以命名的协议取决于编译 MySQL 的 SSL 库。详细信息,请参阅 第 8.3.2 节,“加密连接 TLS 协议和密码”。
-
Command-Line Format --triggersType 布尔值 Default Value TRUE在输出中包括每个转储表的触发器。
该选项默认启用;使用
--skip-triggers禁用它。 -
Command-Line Format --tz-utc启用该选项,以便在不同时区的服务器之间转储和重新加载
TIMESTAMP列。mysqlpump 将其连接时区设置为 UTC,并将SET TIME_ZONE='+00:00'添加到转储文件中。否则,TIMESTAMP列将在源服务器和目标服务器的本地时区中转储和重新加载,这可能会导致值更改,如果服务器位于不同的时区。--tz-utc选项还保护了夏令时的更改。该选项默认启用;使用
--skip-tz-utc禁用它。 -
--user=,user_name-uuser_nameCommand-Line Format --user=user_nameType 字符串 用于连接服务器的 MySQL 帐户的用户名。
如果您使用
Rewriter插件,应该授予该用户SKIP_QUERY_REWRITE权限。 -
Command-Line Format --usersType 布尔值 Default Value FALSE将用户帐户转储为逻辑定义,以
CREATE USER和GRANT语句的形式。用户定义存储在
mysql系统数据库中的授权表中。默认情况下,mysqlpump 不包括mysql数据库转储中的授权表。要转储授权表的内容作为逻辑定义,请使用--users选项并抑制所有数据库转储:mysqlpump --exclude-databases=% --users -
--version,-VCommand-Line Format --version显示版本信息并退出。
-
Command-Line Format --watch-progressType 布尔值 Default Value TRUE周期性地显示进度指示器,提供关于已完成和总表、行和其他对象的信息。
该选项默认启用;使用
--skip-watch-progress禁用它。 -
--zstd-compression-level=levelCommand-Line Format --zstd-compression-level=#Type 整数 用于服务器连接的 zstd 压缩级别。允许的级别从 1 到 22,较高的值表示增加的压缩级别。默认的 zstd 压缩级别为 3。压缩级别设置对不使用 zstd 压缩的连接没有影响。
有关更多信息,请参阅 第 6.2.8 节,“连接压缩控制”。
mysqlpump 对象选择
mysqlpump 具有多个包含和排除选项,用于过滤多种对象类型,并提供了对要转储的对象的灵活控制:
任何包含或排除选项都可以多次给出。效果是累加的。这些选项的顺序无关紧要。
每个包含或排除选项的值是一个逗号分隔的对象名称列表。例如:
--exclude-databases=test,world
--include-tables=customer,invoice
通配符可以在对象名称中使用:
-
%匹配零个或多个字符。 -
_匹配单个字符。
例如,--include-tables=t%,__tmp 匹配所有以 t 开头的表名和所有以 tmp 结尾的五个字符的表名。
对于用户,未指定主机部分的名称将被解释为 %。例如,u1 和 u1@% 是等效的。这与 MySQL 中的账户名称规范相同(见 第 8.2.4 节,“Specifying Account Names”)。
包含和排除选项的交互方式如下:
-
默认情况下,没有包含或排除选项,mysqlpump 将转储所有数据库(某些例外情况见 mysqlpump Restrictions)。
-
如果只有包含选项,而没有排除选项,那么只有命名的对象将被转储。
-
如果只有排除选项,而没有包含选项,那么所有对象都将被转储,除了命名的排除对象。
-
如果同时指定了包含和排除选项,那么命名的排除对象和未命名的包含对象都将被排除。所有其他对象都将被转储。
如果转储多个数据库,可以通过将对象名称限定为特定数据库来命名表、触发器和例程。以下命令转储数据库 db1 和 db2,但排除表 db1.t1 和 db2.t2:
mysqlpump --include-databases=db1,db2 --exclude-tables=db1.t1,db2.t2
以下选项提供了指定要转储哪些数据库的替代方式:
-
The
--all-databases选项将转储所有数据库(某些例外情况见 mysqlpump Restrictions)。它等效于不指定任何对象选项(默认的 mysqlpump 动作是转储所有内容)。--include-databases=%类似于--all-databases,但选择所有数据库进行转储,包括--all-databases的例外情况。 -
The
--databases选项使 mysqlpump 将所有名称参数视为要转储的数据库名称。它等效于一个--include-databases选项,命名相同的数据库。
mysqlpump 并行处理
mysqlpump 可以使用并行处理来实现并发处理。你可以在数据库之间选择并发(以同时转储多个数据库)和在数据库内部选择并发(以同时转储给定数据库中的多个对象)。
默认情况下,mysqlpump 设置一个队列,使用两个线程。你可以创建附加队列并控制每个队列的线程数,包括默认队列:
-
--default-parallelism=指定每个队列使用的默认线程数。在缺少该选项时,NN是 2。默认队列总是使用默认线程数。附加队列使用默认线程数,除非你指定其他线程数。
-
--parallel-schemas=[设置一个处理队列,以转储N:]db_listdb_list中命名的数据库,并可选地指定队列使用的线程数。db_list是一个以逗号分隔的数据库名称列表。如果选项参数以开头,则队列使用N:N线程。否则,--default-parallelism选项确定队列线程数。多个
--parallel-schemas选项实例创建多个队列。数据库列表中的名称允许包含与过滤选项相同的
%和_通配符(参见 mysqlpump 对象选择)。
mysqlpump 使用默认队列处理未明确指定的数据库,以及命令选项选择的用户定义。
一般来说,使用多个队列时,mysqlpump 使用队列之间的并行处理,以同时转储多个数据库。对于使用多个线程的队列,mysqlpump 使用数据库内部的并行处理,以同时转储给定数据库中的多个对象。可能会出现例外情况;例如,mysqlpump 可能会阻止队列,以从服务器获取数据库对象列表。
启用并行处理时,来自不同数据库的输出可能会交叉。例如,来自多个表的 INSERT 语句可能会交叉;语句的顺序不确定。这不会影响重新加载,因为输出语句使用数据库名称或前缀 USE 语句,如有必要。
并行处理的粒度是一个单独的数据库对象。例如,无法使用多个线程并行转储单个表。
示例:
mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3
mysqlpump 设置一个队列来处理 db1 和 db2,另一个队列来处理 db3,默认队列来处理所有其他数据库。所有队列使用两个线程。
mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3
--default-parallelism=4
这与前一个示例相同,除了所有队列使用四个线程。
mysqlpump --parallel-schemas=5:db1,db2 --parallel-schemas=3:db3
队列用于 db1 和 db2 使用五个线程,队列用于 db3 使用三个线程,默认队列使用默认的两个线程。
作为特殊情况,使用 --default-parallelism=0 选项且不带 --parallel-schemas 选项时,mysqlpump 作为单线程进程运行,不创建队列。
mysqlpump 限制
mysqlpump 默认情况下不转储 performance_schema、ndbinfo 或 sys 模式。要转储任何这些模式,请在命令行上明确命名它们。您也可以使用 --databases 或 --include-databases 选项命名它们。
mysqlpump 不转储 INFORMATION_SCHEMA 模式。
mysqlpump 不转储 InnoDB CREATE TABLESPACE 语句。
mysqlpump 使用逻辑形式的 CREATE USER 和 GRANT 语句转储用户账户(例如,当您使用 --include-users 或 --users 选项时)。因此,mysql 系统数据库的转储默认情况下不包括包含用户定义的授权表:user、db、tables_priv、columns_priv、procs_priv 或 proxies_priv。要转储任何授权表,请在命令行上明确命名 mysql 数据库,后跟表名:
mysqlpump mysql user db ...