Documentation Home
MySQL 8.0 参考手册  / 第 4 章 MySQL 程序  / 4.5 客户端程序  /  4.5.6 mysqlpump——数据库备份程序

4.5.6 mysqlpump——数据库备份程序

mysqlpump客户端实用程序执行 逻辑备份,生成一组可执行的 SQL 语句以重现原始数据库对象定义和表数据它转储一个或多个 MySQL 数据库以进行备份或传输到另一台 SQL 服务器。

mysqlpump功能包括:

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

  • 更好地控制转储哪些数据库和数据库对象(表、存储程序、用户帐户)

  • 将用户帐户转储为帐户管理语句 ( CREATE USER, GRANT) 而不是插入到mysql系统数据库 中

  • 创建压缩输出的能力

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

  • InnoDB对于转储文件重新加载,通过在插入行后添加索引 来更快地为表创建二级索引

mysqlpump至少需要 SELECT转储表、SHOW VIEW转储视图、TRIGGER转储触发器以及未使用LOCK TABLES该 转储用户定义需要系统数据库--single-transactionSELECT权限mysql某些选项可能需要其他权限,如选项说明中所述。

要重新加载转储文件,您必须具有执行它包含的语句所需的权限,例如对 CREATE这些语句创建的对象的适当权限。

笔记

在 Windows 上使用 PowerShell 进行输出重定向的转储创建了一个具有 UTF-16 编码的文件:

mysqlpump [options] > dump.sql

但是,不允许将 UTF-16 作为连接字符集(请参阅第 10.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要以and 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](在 MySQL 5.7.30 之前, mysqlpump读取 [mysql_dump]组而不是 [mysqlpump]。截至 5.7.30, [mysql_dump]仍然被接受但已弃用。)有关 MySQL 程序使用的选项文件的信息,请参阅第 4.2.2.2 节,“使用选项文件”.

表 4.17 mysqlpump 选项

选项名称 描述 介绍
--添加删除数据库 在每个 CREATE DATABASE 语句之前添加 DROP DATABASE 语句
--添加删除表 在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句
--添加删除用户 在每个 CREATE USER 语句之前添加 DROP USER 语句
--添加锁 用 LOCK TABLES 和 UNLOCK TABLES 语句围绕每个表转储
--所有数据库 转储所有数据库
--绑定地址 使用指定的网络接口连接到 MySQL 服务器
--字符集目录 安装字符集的目录
--complete-插入 使用包含列名的完整 INSERT 语句
- 压缩 压缩客户端和服务器之间发送的所有信息
--压缩输出 输出压缩算法
--数据库 将所有名称参数解释为数据库名称
--调试 写调试日志
--调试检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息、内存和 CPU 统计信息
--default-auth 要使用的身份验证插件
--默认字符集 指定默认字符集
--默认并行 并行处理的默认线程数
--defaults-extra-file 除了通常的选项文件外,还读取命名的选项文件
--defaults-文件 只读命名选项文件
--defaults-group-suffix 选项组后缀值
--defer-table-indexes 对于重新加载,将索引创建推迟到加载表行之后
--事件 从转储数据库中转储事件
--exclude-数据库 要从转储中排除的数据库
--排除事件 要从转储中排除的事件
--exclude-routines 从转储中排除的例程
--排除表 从转储中排除的表
--exclude-触发器 从转储中排除的触发器
--exclude-用户 要从转储中排除的用户
--扩展插入 使用多行 INSERT 语法
--get-server-public-key 从服务器请求 RSA 公钥 5.7.23
- 帮助 显示帮助信息并退出
--hex-blob 使用十六进制表示法转储二进制列
- 主持人 MySQL 服务器所在的主机
--include-数据库 要包含在转储中的数据库
--include-事件 要包含在转储中的事件
--include-routines 包含在转储中的例程
--include-tables 要包含在转储中的表
--include-触发器 要包含在转储中的触发器
--include-用户 要包含在转储中的用户
--插入忽略 编写 INSERT IGNORE 而不是 INSERT 语句
--日志错误文件 将警告和错误附加到命名文件
--登录路径 从 .mylogin.cnf 读取登录路径选项
--最大允许数据包 发送到服务器或从服务器接收的最大数据包长度
--net-buffer-length TCP/IP 和套接字通信的缓冲区大小
--no-create-db 不要编写 CREATE DATABASE 语句
--no-create-info 不要编写重新创建每个转储表的 CREATE TABLE 语句
--no-defaults 不读取选项文件
--parallel-schemas 指定模式处理并行性
- 密码 连接到服务器时使用的密码
--插件目录 安装插件的目录
- 港口 用于连接的 TCP/IP 端口号
--print-defaults 打印默认选项
- 协议 使用的传输协议
- 代替 编写 REPLACE 语句而不是 INSERT 语句
--结果文件 直接输出到给定文件
--例程 从转储的数据库中转储存储的例程(过程和函数)
--secure-auth 不要以旧的(pre-4.1)格式向服务器发送密码
--server-public-key-path 包含 RSA 公钥的文件的路径名 5.7.23
--set-字符集 将 SET NAMES default_character_set 添加到输出
--set-gtid-清除 是否在输出中添加 SET @@GLOBAL.GTID_PURGED 5.7.18
--单笔交易 在单个事务中转储表
--skip-定义器 从视图和存储程序 CREATE 语句中省略 DEFINER 和 SQL SECURITY 子句
--skip-dump-rows 不要转储表行
- 插座 要使用的 Unix 套接字文件或 Windows 命名管道
--ssl 启用连接加密
--ssl-ca 包含可信 SSL 证书颁发机构列表的文件
--ssl-capath 包含受信任的 SSL 证书颁发机构证书文件的目录
--ssl证书 包含 X.509 证书的文件
--ssl密码 连接加密的允许密码
--ssl-crl 包含证书吊销列表的文件
--ssl-crlpath 包含证书吊销列表文件的目录
--ssl-密钥 包含 X.509 密钥的文件
--ssl模式 连接到服务器的所需安全状态 5.7.11
--ssl-verify-server-cert 根据服务器证书公用名身份验证主机名
--tls-版本 加密连接允许的 TLS 协议 5.7.10
--触发器 每个转储表的转储触发器
--tz-utc 将 SET TIME_ZONE='+00:00' 添加到转储文件
- 用户 连接到服务器时使用的 MySQL 用户名
--用户 转储用户帐户
- 版本 显示版本信息并退出
--watch-progress 显示进度指示器

mysqlpump 选项说明

mysqlpump 对象选择

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

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

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

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

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

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

  • _匹配任何单个字符。

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

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

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

  • By default, with no inclusion or exclusion options, mysqlpump dumps all databases (with certain exceptions noted in mysqlpump Restrictions).

  • If inclusion options are given in the absence of exclusion options, only the objects named as included are dumped.

  • If exclusion options are given in the absence of inclusion options, all objects are dumped except those named as excluded.

  • If inclusion and exclusion options are given, all objects named as excluded and not named as included are not dumped. All other objects are dumped.

If multiple databases are being dumped, it is possible to name tables, triggers, and routines in a specific database by qualifying the object names with the database name. The following command dumps databases db1 and db2, but excludes tables db1.t1 and db2.t2:

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

The following options provide alternative ways to specify which databases to dump:

mysqlpump Parallel Processing

mysqlpump can use parallelism to achieve concurrent processing. You can select concurrency between databases (to dump multiple databases simultaneously) and within databases (to dump multiple objects from a given database simultaneously).

By default, mysqlpump sets up one queue with two threads. You can create additional queues and control the number of threads assigned to each one, including the default queue:

  • --default-parallelism=N specifies the default number of threads used for each queue. In the absence of this option, N is 2.

    The default queue always uses the default number of threads. Additional queues use the default number of threads unless you specify otherwise.

  • --parallel-schemas=[N:]db_list sets up a processing queue for dumping the databases named in db_list and optionally specifies how many threads the queue uses. db_list is a list of comma-separated database names. If the option argument begins with N:, the queue uses N threads. Otherwise, the --default-parallelism option determines the number of queue threads.

    Multiple instances of the --parallel-schemas option create multiple queues.

    Names in the database list are permitted to contain the same % and _ wildcard characters supported for filtering options (see mysqlpump Object Selection).

mysqlpump uses the default queue for processing any databases not named explicitly with a --parallel-schemas option, and for dumping user definitions if command options select them.

In general, with multiple queues, mysqlpump uses parallelism between the sets of databases processed by the queues, to dump multiple databases simultaneously. For a queue that uses multiple threads, mysqlpump uses parallelism within databases, to dump multiple objects from a given database simultaneously. Exceptions can occur; for example, mysqlpump may block queues while it obtains from the server lists of objects in databases.

With parallelism enabled, it is possible for output from different databases to be interleaved. For example, INSERT statements from multiple tables dumped in parallel can be interleaved; the statements are not written in any particular order. This does not affect reloading because output statements qualify object names with database names or are preceded by USE statements as required.

The granularity for parallelism is a single database object. For example, a single table cannot be dumped in parallel using multiple threads.

Examples:

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

mysqlpump sets up a queue to process db1 and db2, another queue to process db3, and a default queue to process all other databases. All queues use two threads.

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

This is the same as the previous example except that all queues use four threads.

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

The queue for db1 and db2 uses five threads, the queue for db3 uses three threads, and the default queue uses the default of two threads.

As a special case, with --default-parallelism=0 and no --parallel-schemas options, mysqlpump runs as a single-threaded process and creates no queues.

Note

Before MySQL 5.7.11, use of the --single-transaction option is mutually exclusive with parallelism. To use --single-transaction, disable parallelism by setting --default-parallelism to 0 and not using any instances of --parallel-schemas:

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

mysqlpump Restrictions

mysqlpump does not dump the INFORMATION_SCHEMA, performance_schema, ndbinfo, or sys schema by default. To dump any of these, name them explicitly on the command line. You can also name them with the --databases or --include-databases option.

mysqlpump does not dump InnoDB CREATE TABLESPACE statements.

mysqlpumpCREATE USER使用and 以逻辑形式转储用户帐户GRANT(例如,当您使用 --include-usersor --users选项时)。出于这个原因,系统数据库的转储在默认情况 mysql下不包括包含用户定义的授权表: 、、、、、、或 。要转储任何授权表,请在数据库后跟表名命名: userdbtables_privcolumns_privprocs_privproxies_privmysql

mysqlpump mysql user db ...