mysqlpump是MySQL 5.7中引入的逻辑备份新功能,备份形式是SQL语句,其中大部分参数与mysqldump是相同的,可以理解为加强版的mysqldump,神似Oracle数据库的exp与expdp的关系,mysqlpump的功能如下:
执行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
# 全库备份
[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
mysqlpump可以使用并行性来实现并发处理:
来看看简单的例子,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使用的限制条件:
2020年6月30日
下午几个朋友聊买房聊育儿聊生活,朋友说:读书再厉害比不上给孩子攒房子,作为父母,要努力给孩子提供体面的生活…这大概是二八定律8字头父母人群最真实的理想现状了,突然想起客厅、主卧、儿童房我们布置的随处可见的书架和书本,我们跟孩子说读书可以获得更多的快乐,希望他们成为内心丰满的人;在孩子说长大以后想开挖掘机做工人被爷爷奶奶教育理想不正确时,我们鼓励说你觉得开心就可以,每一种工作都有它的价值,不逾矩逾规逾法,兴趣与谋生能合二为一为何不可…相较之下,我们这些是不是有点理想化了……
为何“读书”,何为“体面”…脱离了经济基础来讲上层建筑,“读书为了自我愉悦”、“体面在更多的自我选择”这样的说辞就显得过分清高,如此格格不入…但,现实已经够俗气了,好歹也要挣扎着让理想脱俗,就这样,一面在现实中妥协,一面在理想中憧憬才能拉扯自己前进的步伐。
阶段不同,立足点不同,追逐的自然有差异,没什么正反对错标新立异可言的。
今日身份:装深沉、胡思乱想、矛盾附体的假正经!
2020年首次正装配高跟装正经一整天迎“7.1”,记一下!
2020年的10包辣条马甲线赌约,进度更新——2包,距离10月份的10包辣条还会远?记一下!