10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

MySQL 8.0参考手册/.../ mysqlpump -一个数据库备份程序

4.5.6 mysqlpump数据库备份程序

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

提示

考虑使用MySQL Shell转储实用程序,它提供多线程并行转储、文件压缩和进度信息显示,以及云特性,如Oracle云基础设施对象存储流和MySQL数据库服务兼容性检查和修改。转储可以很容易地导入到MySQL服务器实例或MySQL数据库服务DB系统使用MySQL Shell负载转储实用程序.可以找到MySQL Shell的安装说明在这里

mysqlpump功能包括:

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

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

  • 将用户帐户转储为帐户管理报表(创建用户格兰特)而不是插入mysql系统数据库

  • 创建压缩输出的能力

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

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

请注意

mysqlpump使用MySQL 5.7中引入的MySQL特性,因此假设与MySQL 5.7或更高版本一起使用。

mysqlpump至少需要选择转储表的特权,显示视图对于倾销的观点,触发对于转储触发器,和锁表如果——单独的事务选项未被使用。的选择上的特权mysql需要系统数据库来转储用户定义。某些选项可能需要选项描述中提到的其他特权。

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

请注意

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

Mysqlpump [options] > dump.sql

但是,UTF-16不允许作为连接字符集(参见第10.4节“连接字符集和排序规则”),导致转储文件无法正常加载。要解决此问题,请使用——结果文件选项,它创建ASCII格式的输出:

mysqlpump[选项]——结果文件= dump.sql

mysqlpump调用语法

默认情况下,mysqlpump转储所有数据库(在mysqlpump限制).要显式指定此行为,请使用——所有数据库选择:

mysqlpump——所有数据库

要转储单个数据库或数据库中的某些表,请在命令行中为数据库命名,并可选地在后面加上表名:

mysqlpumpdb_namemysqlpumpDb_name tbl_name1 tbl_name2…

要将所有名称参数视为数据库名称,请使用——数据库选择:

mysqlpump——数据库db_name1 db_name2...

默认情况下,mysqlpump不转储用户帐户定义,即使转储mysql包含授权表的系统数据库。将授权表内容转储为形式的逻辑定义创建用户而且格兰特语句,使用——用户选项并抑制所有数据库转储:

mysqlpump exclude-databases = %——用户

在上述命令中,匹配所有数据库名的通配符——exclude-databases选择。

mysqlpump支持包含或不包含数据库、表、存储程序和用户定义的多个选项。看到mysqlpump对象选择

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

Mysqlpump [options] > dump.sqlmysql< dump.sql

下面的讨论提供了额外的内容mysqlpump用法示例。

以查看选项的列表mysqlpump支持,发出命令mysqlpump——帮助

mysqlpump选项总结

mysqlpump支持以下选项,这些选项可以在命令行或(mysqlpump)而且(客户端)选项文件的分组。在MySQL 8.0.20之前,mysqlpump读了(mysql_dump)组而不是(mysqlpump).8.0.20,(mysql_dump)仍然被接受,但已被弃用。)有关MySQL程序使用的选项文件的信息,请参见第4.2.2.2节“使用选项文件”

表4.16 mysqlpump选项

选项名称 描述 介绍了 弃用
——add-drop-database 在每个CREATE DATABASE语句之前添加DROP DATABASE语句
——add-drop-table 在每个CREATE TABLE语句之前添加DROP TABLE语句
——add-drop-user 在每个CREATE USER语句之前添加DROP USER语句
——锁 用LOCK TABLES和UNLOCK TABLES语句包围每个表转储
——所有数据库 所有数据库转储
——bind-address 使用指定的网络接口连接MySQL服务器
——character-sets-dir 字符集的安装目录
——列统计 编写ANALYZE TABLE语句生成统计直方图
——complete-insert 使用包含列名的完整INSERT语句
——压缩 压缩客户端和服务器之间发送的所有信息 8.0.18
——compress-output 输出压缩算法
——压缩算法 允许对连接到服务器的压缩算法 8.0.18
——数据库 将所有名称参数解释为数据库名称
——调试 编写调试日志
——debug-check 当程序退出时打印调试信息
——debug-info 当程序退出时打印调试信息、内存和CPU统计信息
——default-auth 要使用的身份验证插件
——default-character-set 指定默认字符集
——default-parallelism 用于并行处理的默认线程数
——defaults-extra-file 除了通常的选项文件外,还读取指定的选项文件
——defaults-file 只读命名选项文件
——defaults-group-suffix 选项组后缀值
——defer-table-indexes 要重新加载,请将索引创建推迟到加载表行之后
——事件 从转储的数据库中转储事件
——exclude-databases 要从转储中排除的数据库
——exclude-events 要从转储中排除的事件
——exclude-routines 要从转储中排除的例程
——排除表 要从转储中排除的表
——exclude-triggers 要从转储中排除的触发器
——exclude-users 要从转储中排除的用户
——extended-insert 使用多行INSERT语法
——get-server-public-key 从服务器请求RSA公钥
——帮助 显示帮助信息并退出
——hex-blob 使用十六进制表示法转储二进制列
——主机 MySQL服务器所在的主机
——包括数据库 要包含在转储中的数据库
——include-events 要包含在转储中的事件
——include-routines 要包含在转储中的例程
——包括表格 要包含在转储中的表
——include-triggers 要包含在转储中的触发器
——包括残 要包含在转储中的用户
——insert-ignore 写INSERT IGNORE语句而不是INSERT语句
——log-error-file 向命名文件追加警告和错误
——登录路径 从.mylogin.cnf读取登录路径选项
——max-allowed-packet 发送到或从服务器接收的最大包长度
——net-buffer-length TCP/IP和套接字通信的缓冲区大小
——no-create-db 不写CREATE DATABASE语句
——no-create-info 不写CREATE TABLE语句重新创建每个转储表
——已 读取无选项文件
——parallel-schemas 指定schema-processing并行性
——密码 连接到服务器时使用的密码
——plugin-dir 安装插件的目录
——港口 TCP/IP连接端口号
——print-defaults 打印默认选项
——协议 要使用的传输协议
——取代 编写REPLACE语句而不是INSERT语句
——结果文件 直接输出到给定的文件
——例程 从转储的数据库中转储存储的例程(过程和函数)
——server-public-key-path 包含RSA公钥文件的路径名称
——set-charset 将SET NAMES default_character_set添加到输出
——set-gtid-purged 是否添加SET @@GLOBAL。GTID_PURGED输出
——单独的事务 在单个事务中转储表
——skip-definer 从视图和存储程序CREATE语句中省略DEFINER和SQL SECURITY子句
——skip-dump-rows 不转储表行
——套接字 Unix套接字文件或Windows命名管道使用
——ssl-ca 包含受信任的SSL证书颁发机构列表的文件
——ssl-capath 包含受信任的SSL证书颁发机构证书文件的目录
——ssl-cert 包含X.509证书的文件
——ssl cipher 用于连接加密的允许密码
——ssl-crl 包含证书撤销列表的文件
——ssl-crlpath 包含证书撤销列表文件的目录
——ssl-fips-mode 客户端是否开启FIPS模式
——ssl密钥 包含X.509密钥的文件
——ssl-mode 到服务器的连接所需的安全状态
——tls-ciphersuites 用于加密连接的允许TLSv1.3加密套件 8.0.16
——tls版本 加密连接允许的TLS协议
——触发器 转储每个已转储表的触发器
——tz-utc 添加SET TIME_ZONE='+00:00'转储文件
——用户 连接到服务器时使用的MySQL用户名
——用户 把用户帐户
——版本 显示版本信息并退出
——watch-progress 显示进度
——zstd-compression-level 连接到使用zstd压缩的服务器的压缩级别 8.0.18

mysqlpump选项的描述

mysqlpump对象选择

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

任何包含或排除选项都可以给出多次。这种效应是累加的。这些选项的顺序并不重要。

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

——世界exclude-databases =测试——包括表格=客户,发票

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

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

  • _匹配任何单个字符。

例如,——包括表格= t %, __tmp匹配以开头的所有表名t以及所有以。结尾的五个字符的表名tmp

对于用户,未指定主机部分的名称将用隐含的主机解释.例如,u1而且u1@ %是等价的。这与MySQL中应用的内容是一样的第6.2.4节“指定帐户名称”).

包含和排除选项以以下方式相互作用:

  • 默认情况下,没有包含或排除选项,mysqlpump转储所有数据库(在mysqlpump限制).

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

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

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

如果正在转储多个数据库,则可以通过用数据库名称限定对象名称来命名特定数据库中的表、触发器和例程。下面的命令转储数据库db1而且db2,但不包括表db1.t1而且db2.t2

mysqlpump——包括数据库= db1、db2——排除表= db1.t1 db2.t2

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

mysqlpump并行处理

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

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

  • ——default-parallelism =N指定每个队列使用的默认线程数。如果没有这个选项,N是2。

    默认队列总是使用默认的线程数。其他队列使用默认线程数,除非另有指定。

  • ——parallel-schemas = (N:]db_list为转储中命名的数据库设置处理队列db_list并可选地指定队列使用的线程数。db_list以逗号分隔的数据库名称的列表。如果option参数以N,该队列使用N线程。否则,——default-parallelism选项确定队列线程的数量。

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

    数据库列表中的名称允许包含相同的名称而且_过滤选项支持通配符(参见mysqlpump对象选择).

mysqlpump类显式命名的任何数据库都使用默认队列——parallel-schemas选项,如果命令选项选择了它们,则用于转储用户定义。

一般来说,对于多个队列,mysqlpump使用队列处理的数据库集之间的并行性,以同时转储多个数据库。对于使用多线程的队列,mysqlpump在数据库中使用并行性,从给定的数据库中同时转储多个对象。异常情况都可能发生;例如,mysqlpump当它从数据库中的对象的服务器列表中获取时,可能阻塞队列。

启用了并行性后,来自不同数据库的输出就可以相互交错。例如,插入来自并行转储的多个表的语句可以交错;这些语句没有任何特定的顺序。这不会影响重新加载,因为输出语句用数据库名限定对象名,或者在对象名之前加上使用语句的要求。

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

例子:

mysqlpump——parallel-schemas = db1、db2——parallel-schemas = db4

mysqlpump设置要处理的队列db1而且db2,另一个要处理的队列db4,以及一个默认队列来处理所有其他数据库。所有队列都使用两个线程。

Mysqlpump——parallel-schemas=db1,db2——parallel-schemas=db3——default-parallelism=4

这与前面的示例相同,只是所有队列都使用四个线程。

mysqlpump——parallel-schemas = 5: db1、db2——parallel-schemas = 3: db4

的队列db1而且db2使用五个线程,队列为db4使用三个线程,默认队列使用默认的两个线程。

作为特例,与——default-parallelism = 0也没有——parallel-schemas选项,mysqlpump作为单线程进程运行,不创建队列。

mysqlpump限制

mysqlpump不转储performance_schemandbinfo,或sys默认模式。要转储其中任何一个,请在命令行中显式地命名它们。也可以用——数据库——包括数据库选择。

mysqlpump不转储INFORMATION_SCHEMA模式。

mysqlpump不抛弃InnoDB创建表空间语句。

mysqlpump以逻辑形式转储用户帐户创建用户而且格兰特语句(例如,当您使用——包括残——用户选项)。因此,垃圾场的mysql默认情况下,系统数据库不包含包含用户定义的授权表:用户dbtables_privcolumns_privprocs_priv,或proxies_priv.要转储任何授权表,请将mysql数据库后面跟着表名:

mysql用户数据库…