MySQL 8 导出之mysqlpump

1. mysqldump简介

  mysqlpump是MySQL 5.7中引入的逻辑备份新功能,备份形式是SQL语句,其中大部分参数与mysqldump是相同的,可以理解为加强版的mysqldump,神似Oracle数据库的exp与expdp的关系,mysqlpump的功能如下:

  • 可以并行备份数据库以及数据库中的对象,备份速度更快;
  • 更好地控制要备份的数据库和数据库对象(表,存储的程序,用户帐户);
  • 以CREATE USER, GRANT来备份用户帐户,而不是直接插入到MySQL的系统数据库;
  • 备份文件可压缩;
  • 备份进度可视化(估计值);
  • 备份文件恢复时,InnoDB表先建表后插入数据最后建立索引,减少了索引维护开销,加快了恢复进程。

  执行mysqlpump的用户必须具备的权限:SELECT备份表,SHOW VIEW备份视图,TRIGGER备份触发器以及 --single-transaction选项未使用时LOCK TABLES权限等,具体的权限要看实际备份对象来确定。

  来看看mysqlpump具体的参数:

[root@chengyu ~]# mysqlpump --help
mysqlpump  Ver 8.0.20 for Linux on x86_64 (Source distribution)
Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

MySQL utility for dumping data from databases to external file.
Usage: mysqlpump [OPTIONS] [--all-databases]
OR     mysqlpump [OPTIONS] --databases DB1 [DB2 DB3...]
OR     mysqlpump [OPTIONS] database [tables]

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql8/etc/my.cnf /usr/local/mysql8/my.cnf ~/.my.cnf 
The following groups are read: client mysql_dump mysqlpump
The following options may be given as the first argument:
--print-defaults        打印默认选项.
--no-defaults           不读取选项文件.
--defaults-file=#       只读指定的选项文件.
--defaults-extra-file=# 除了global选项文件,还读取指定的选项文件.
--defaults-group-suffix=# 选项组后缀值(group, suffix)
--login-path=#          从.mylogin.cnf中读取登录路径选项.
  -?, --help          help信息.
  --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语句包围每个备份表.
  -A, --all-databases 备份所有数据库.
  --bind-address=name 使用指定的网络接口连接到MySQL Server.
  --character-sets-dir=字符集的安装目录.
  --column-statistics 编写ANALYZE TABLE语句以生成统计数据直方图.
  --complete-insert   使用包含列名称的完整INSERT语句.
  -C, --compress      压缩客户端和服务器之间发送的所有信息.
  --compress-output=name  输出压缩算法.
  --compression-algorithms=name 用于服务器连接的允许压缩算法,'zstd','zlib','uncompressed'
  -B, --databases     指定数据库,以逗号分隔.
  -#, --debug[=#]    编写调试日志.
  --debug-check[=#]   程序退出时打印调试信息.
  --debug-info[=#]    程序退出时打印调试信息,内存和CPU统计信息.
  --default-character-set=name 指定默认字符集.
  --default-parallelism=# 并行处理的默认线程数	
  --default-auth=name 身份验证插件使用.
  --defer-table-indexes 在备份过程中,延迟为每个表创建索引,直到数据备份完成,如果是InnoDB存储引擎,则延迟创建二级索引,默认此参数开启,禁用可以指定--skip-defer-table-indexes.
  --events            从指定的数据库中备份事件.(默认on; 关闭使用--skip-events)
  --exclude-databases=name 不备份指定的数据库.
  --exclude-events=name 不备份指定的事件.
  --exclude-routines=name 不备份指定的routine.
  --exclude-tables=name 不备份指定的table.
  --exclude-triggers=name 不备份指定的trigger.
  --exclude-users=name 不备份指定的user. 
  --extended-insert=# 一条INSERT语句默认会包含多行,如果要指定每个INSERT语句中包含的行数,可以设置这个值,默认为250,值为1时,每一行会有一个INSERT语句。
  --get-server-public-key 从服务器请求RSA公钥
  --hex-blob          使用十六进制表示法转储二进制列.
  -h, --host=name     MySQL服务器所在的主机.
  --include-databases=name 指定要备份的数据库.
  --include-events=name 指定要备份的events.
  --include-routines=name 指定要备份的routines.
  --include-tables=name 指定要备份的tables.
  --include-triggers=name 指定要备份的triggers.
  --include-users=name 指定要备份的users.
  --insert-ignore     编写INSERT IGNORE而不是INSERT语句.
  --log-error-file=name 指定警告和错误文件.
  --net-buffer-length=# TCP/IP和套接字通信的缓冲区大小.
  --no-create-db      不要写CREATE DATABASE语句.
  -t, --no-create-info 不要编写重新创建每个备份表的CREATE TABLE语句.
  --parallel-schemas=name 创建一个用于处理数据库的队列,db_list表示备份的数据库,逗号分隔,N表示该队列使用N线程,如果N未给出则使用–default-parallelism参数设置的值.
  -p, --password[=name] 连接服务器时使用的密码.
  --plugin-dir=name   安装插件的目录.
  -P, --port=#        连接服务器时的端口.
  --protocol=name     使用的传输协议 (tcp, socket, pipe, memory).
  --replace   编写REPLACE语句而不是INSERT语句.
  --result-file=name  直接输出到给定文件.
  --routines    从备份的数据库中备份存储的例程(过程和函数).(默认on; 关闭使用--skip-routines)
  --server-public-key-path=name 包含RSA公钥的文件的路径名	
  --set-charset  将SET NAMES default_character_set添加到输出.(默认on;关闭使用--skip-set-charset)
  --set-gtid-purged=name 是否将SET @@ GLOBAL.GTID_PURGED添加到输出.如果是用于备份,或是用于创建第二个从库则设置为ON,如果是为了恢复误删的数据等,则设置为OFF,如果不指定默认为AUTO,判断规则是如果备份服务器启用了GTID则设置为ON.
  --single-transaction 一致性备份参数,设置隔离级别模式为RR(可重复读),仅对支持事务的引擎有用,不支持事务的表不保证状态一致;备份过程不要有DDL,否则可能会导致mysqlpump的select操作检索内容的时候获取错误的状态信息退出(备份的时候会先show create table 然后select,如果两个语句中执行了ddl,会导致报错信息,表定义发生变化,)
  --skip-definer 从视图和存储的程序CREATE语句中忽略DEFINER和SQL SECURITY子句.
  -d, --skip-dump-rows Skip dumping rows of all tables to output.
  -S, --socket=name   指定socket.
  --ssl-ca=name       包含受信任的SSL证书颁发机构列表的文件    
  --ssl-capath=name   包含受信任的SSL证书颁发机构证书文件的目录    
  --ssl-cert=name     包含X.509证书的文件    
  --ssl-cipher=name   连接加密的允许密码    
  --ssl-crl=name      包含证书吊销列表的文件    
  --ssl-crlpath=name  包含证书吊销列表文件的目录 
  --ssl-fips-mode=name 是否在客户端启用FIPS模式,允许的值有: OFF, ON, STRICT 
  --ssl-key=name      包含X.509密钥的文件  
  --ssl-mode=name     与服务器连接的所需SSL     
  --tls-ciphersuites=name 允许的TLSv1.3密码套件用于加密连接
  --tls-version=name  允许的TLS协议进行加密连接,允许的值有: TLSv1, TLSv1.1, TLSv1.2, TLSv1.3
  --triggers          指定要备份的触发器.(默认on;关闭使用--skip-triggers)
  --tz-utc            将SET TIME_ZONE ='+ 00:00'添加到转储文件.(默认on; 关闭使用--skip-tz-utc.)
  -u, --user=name     User for login if not current user.
  --users             连接服务器时要使用的MySQL用户名.
  -V, --version       显示版本信息并退出.
  --watch-progress    显示进度.(默认on; 关闭使用--skip-watch-progress)
  --zstd-compression-level=# 与使用zstd压缩的服务器的连接的压缩级别.

Variables (--variable-name=value)
and boolean options {FALSE|TRUE}  Value (after reading options)
--------------------------------- ----------------------------------------
add-drop-database                 FALSE
add-drop-table                    FALSE
add-drop-user                     FALSE
add-locks                         FALSE
all-databases                     FALSE
bind-address                      (No default value)
character-sets-dir                (No default value)
column-statistics                 FALSE
complete-insert                   FALSE
compress                          FALSE
compress-output                   (No default value)
compression-algorithms            (No default value)
databases                         FALSE
default-character-set             UTF8MB4
default-parallelism               2
default-auth                      (No default value)
defer-table-indexes               TRUE
events                            TRUE
exclude-databases                 (No default value)
exclude-events                    (No default value)
exclude-routines                  (No default value)
exclude-tables                    (No default value)
exclude-triggers                  (No default value)
exclude-users                     (No default value)
extended-insert                   250
get-server-public-key             FALSE
hex-blob                          FALSE
host                              (No default value)
include-databases                 (No default value)
include-events                    (No default value)
include-routines                  (No default value)
include-tables                    (No default value)
include-triggers                  (No default value)
include-users                     (No default value)
insert-ignore                     FALSE
log-error-file                    (No default value)
max-allowed-packet                25165824
net-buffer-length                 1047552
no-create-db                      FALSE
no-create-info                    FALSE
parallel-schemas                  (No default value)
password                          (No default value)
plugin-dir                        (No default value)
port                              0
protocol                          (No default value)
replace                           FALSE
result-file                       (No default value)
routines                          TRUE
server-public-key-path            (No default value)
set-charset                       TRUE
set-gtid-purged                   AUTO
single-transaction                FALSE
skip-definer                      FALSE
skip-dump-rows                    FALSE
socket                            (No default value)
ssl-ca                            (No default value)
ssl-capath                        (No default value)
ssl-cert                          (No default value)
ssl-cipher                        (No default value)
ssl-crl                           (No default value)
ssl-crlpath                       (No default value)
ssl-fips-mode                     (No default value)
ssl-key                           (No default value)
ssl-mode                          (No default value)
tls-ciphersuites                  (No default value)
tls-version                       (No default value)
triggers                          TRUE
tz-utc                            TRUE
user                              (No default value)
users                             FALSE
watch-progress                    TRUE
zstd-compression-level            3

2. mysqldump示例

2.1 简单使用

# 全库备份
[root@chengyu ~]# mysqlpump -uroot -p --all-databases>/home/all.sql
Enter password: 
Dump progress: 2/3 tables, 0/13 rows
Dump completed in 1121

# --exclude-databases参数使用
[root@chengyu ~]# mysqlpump -uroot -p --default-character-set=utf8mb4 --exclude-databases mysql >/home/allex.sql
Enter password: 
Dump progress: 1/1 tables, 0/5 rows
Dump completed in 630

# --include-tables参数使用
[root@chengyu ~]# mysqlpump -uroot -p --port 3307 --default-character-set=utf8mb4 --databases dbcy --include-tables=t1,t2 >/home/all03.sql
Enter password: 
Dump progress: 1/1 tables, 0/5 rows
Dump completed in 621

# 只备份用户:备份文件生成CREATE USER和GRANT语句
# 对象名称中允许使用通配符:% 匹配零个或多个字符的任何序列;_ 匹配任何单个字符。
[root@chengyu ~]#  mysqlpump -uroot -p --port 3307 --exclude-databases=% --users >/home/users.sql
Enter password: 
Dump completed in 617

2.2 mysqlpump并行处理

  mysqlpump可以使用并行性来实现并发处理:

  • –default-parallelism=N:每个并行处理队列默认的线程数,默认为2;
  • –parallel-schemas=[N:]db_list :db_list是逗号分隔的数据库名称的列表,N为线程数,如果–parallel-schemas设置了并行度,那么会覆盖–default-parallelism默认值,如果–default-parallelism=0同时也没有–parallel-schemas选项,mysqlpump会单线程运行,不创建任何队列,5.7.11之前不支持与–single-transaction一起用。

  来看看简单的例子,3个并发线程备份dbcy库:

[root@chengyu ~]# mysqlpump -uroot -p --port 3307 --default-character-set=utf8mb4 --default-parallelism=3 --databases dbcy >/home/all02.sql
Enter password: 
Dump progress: 1/1 tables, 0/5 rows
Dump completed in 630

  4个并发线程备份指定数据库,开启一致性备份:

[root@chengyu ~]# mysqlpump -uroot -p --port 3307  --parallel-schemas=4:mysql,dbcy --set-gtid-purged=ON --single-transaction  --include-databases=mysql,dbcy  > /home/all01.sql

  看看几个官网的案例:

  示例1: 建立一个队列来处理db1和db2,另一个排队的过程db3,所有队列都使用2个线程

[root@chengyu ~]# mysqlpump -uroot -p --port 3307 --parallel-schemas=db1,db2 --parallel-schemas=db3 --include-databases=db1,db2,db3> /home/all04.sql

  示例2: 建立一个队列来处理db1和db2,另一个排队的过程db3,所有队列共用4个线程

[root@chengyu ~]# mysqlpump -uroot -p --port 3307 --parallel-schemas=db1,db2 --parallel-schemas=db3 --default-parallelism=4 --include-databases=db1,db2,db3> /home/all05.sql

  示例3:队列db1和db2共用5个线程,队列db3使用3个线程,其他默认队列使用默认的两个线程

[root@chengyu ~]# mysqlpump -uroot -p --port 3307 --parallel-schemas=5:db1,db2 --parallel-schemas=3:db3 --include-databases=db1,db2,db3,db4> /home/all06.sql

  mysqlpump使用的限制条件:

  • 默认情况下,mysqlpump不备份performance_schema、sys schema、ndbinfo,需要备份的话用–databases或 --include-databases来明确指定;
  • mysqlpump不备份INFORMATION_SCHEMA;
  • mysqlpump不备份InnoDB CREATE TABLESPACE语句;
  • mysqlpump使用CREATE USER和 GRANT语句以逻辑形式备份user(例如,当使用–include-users或者–users选项时),因此备份mysql系统数据库默认情况下不包括含有用户定义的授权表:user,db, tables_priv,columns_priv, procs_priv,或 proxies_priv,要备份任何授权表,需要在mysql数据库名称后加上表名称。

2020年6月30日

  下午几个朋友聊买房聊育儿聊生活,朋友说:读书再厉害比不上给孩子攒房子,作为父母,要努力给孩子提供体面的生活…这大概是二八定律8字头父母人群最真实的理想现状了,突然想起客厅、主卧、儿童房我们布置的随处可见的书架和书本,我们跟孩子说读书可以获得更多的快乐,希望他们成为内心丰满的人;在孩子说长大以后想开挖掘机做工人被爷爷奶奶教育理想不正确时,我们鼓励说你觉得开心就可以,每一种工作都有它的价值,不逾矩逾规逾法,兴趣与谋生能合二为一为何不可…相较之下,我们这些是不是有点理想化了……

  为何“读书”,何为“体面”…脱离了经济基础来讲上层建筑,“读书为了自我愉悦”、“体面在更多的自我选择”这样的说辞就显得过分清高,如此格格不入…但,现实已经够俗气了,好歹也要挣扎着让理想脱俗,就这样,一面在现实中妥协,一面在理想中憧憬才能拉扯自己前进的步伐。

  阶段不同,立足点不同,追逐的自然有差异,没什么正反对错标新立异可言的。

  今日身份:装深沉、胡思乱想、矛盾附体的假正经!

  2020年首次正装配高跟装正经一整天迎“7.1”,记一下!

  2020年的10包辣条马甲线赌约,进度更新——2包,距离10月份的10包辣条还会远?记一下!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章