1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
--add-drop-user
在 CREATE USER 语句之前增加 DROP USER,
注意: 这个参数需要和 --users 一起使用, 否者不生效
DROP USER 'backup'@'192.168.123.%';
--default-parallelism
指定并行线程数, 默认是 2, 如果设置成 0, 表示不使用并行备份;
注意: 每个线程的备份步骤是:
先 create table 但不建立二级索引(主键会在 create table 时候建立),
再写入数据, 最后建立二级索引;
--defer-table-indexes
延迟创建索引, 直到所有数据都加载完之后, 再创建索引, 默认开启;
若关闭则会和 mysqldump 一样:
先创建一个表和所有索引, 再导入数据,
因为在加载还原数据的时候要维护二级索引的开销, 导致效率比较低;
关闭使用参数 --skip--defer-table-indexes
--parallel-schemas=[N:]db_list
指定并行备份的库, 多个库用逗号分隔,
如果指定了 N, 将使用 N 个线程的地队列,
如果 N 不指定, 将由 --default-parallelism 才确认 N 的值, 可以设置多个 --parallel-schemas
mysqlpump --parallel-schemas=4:vs,aa --parallel-schemas=3:pt
# 4 个线程备份 vs 和 aa, 3 个线程备份 pt; 通过 show processlist 可以看到有 7 个线程
mysqlpump --parallel-schemas=vs,abc --parallel-schemas=pt
# 默认 2 个线程, 即 2 个线程备份 vs 和 abc, 2 个线程备份 pt
注意: 当然硬盘 IO 不允许的话, 可以少开几个线程和数据库进行并行备份
--compress-output
默认不压缩输出, 目前可以使用的压缩算法有 LZ4 和 ZLIB
shell> mysqlpump --compress-output=LZ4 > dump.lz4
shell> lz4_decompress dump.lz4 dump.txt
shell> mysqlpump --compress-output=ZLIB > dump.zlib
shell> zlib_decompress dump.zlib dump.txt
--exclude-databases
备份排除该参数指定的数据库, 多个用逗号分隔
类似的还有:
--exclude-events
--exclude-routines
--exclude-tables
--exclude-triggers
--exclude-users
mysqlpump --exclude-databases=mysql,sys # 备份过滤 mysql 和 sys 数据库
mysqlpump --exclude-tables=rr,tt # 备份过滤所有数据库中 rr, tt 表
mysqlpump -B test --exclude-tables=tmp_ifulltext,tt # 备份过滤 test 库中的 rr, tt 表
注意: 要是只备份数据库的账号, 需要添加参数 --users, 并且需要过滤掉所有的数据库, 如:
mysqlpump --users --exclude-databases=sys,mysql,db1,db2 --exclude-users=dba,backup
# 备份除 dba 和 backup 的所有账号
--include-databases
指定备份数据库, 多个用逗号分隔, 类似的还有
--include-events
--include-routines
--include-tables
--include-triggers
--include-users, 大致方法使用同 --exclude-users
--skip-definer
忽略那些创建视图和存储过程用到的 DEFINER 和 SQL SECURITY 语句,
恢复的时候, 会使用默认值, 否则会在还原的时候看到没有 DEFINER 定义时的账号而报错
--skip-dump-rows
只备份表结构, 不备份数据, -d
注意: mysqldump 支持 --no-data, mysqlpump 不支持 --no-data
--users
备份数据库用户, 备份的形式是 CREATE USER..., GRANT...,
只备份数据库账号可以通过如下命令:
mysqlpump --exclude-databases=% --users # 过滤掉所有数据库
--watch-progress # 显示进度, 包括总数表, 行和其他对象;
--skip-watch-progress # 关闭进度显示
--add-drop-database # 在建立库之前先执行删库操作
--add-drop-table # 在建表之前先执行删表操作
--add-locks
备份表时, 使用 LOCK TABLES 和 UNLOCK TABLES
注意: 这个参数不支持并行备份, 需要关闭并行备份功能 --default-parallelism=0
--complete-insert # dump 出包含所有列的完整 insert 语句
--compress # 压缩客户端和服务器传输的所有的数据, -C
--default-character-set # 指定备份的字符集
--events # 备份数据库的事件, 默认开启, 关闭使用 --skip-events 参数
--insert-ignore
备份用 insert ignore 语句代替 insert 语句
--log-error-file
# 备份出现的 warnings 和 erros 信息输出到一个指定的文件
--max-allowed-packet
# 备份时用于 client/server 直接通信的最大 buffer 包的大小
--net-buffer-length
备份时用于 client/server 通信的初始 buffer 大小,
当创建多行插入语句的时候, mysqlpump 创建行到 N 个字节长
--no-create-db
备份不写 CREATE DATABASE 语句;
要是备份多个库, 需要使用参数 -B, 而使用 -B 的时候会出现 create database 语句,
该参数可以屏蔽 create database 语句
--no-create-info
备份不写建表语句, 即不备份表结构, 只备份数据, -t
--hex-blob
备份 binary 字段的时候使用十六进制计数法,
受影响的字段类型有 BINARY, VARBINARY, BLOB, BIT
--protocol={TCP|SOCKET|PIPE|MEMORY} # 指定连接服务器的协议
--replace # 备份出来 replace into 语句
--routines
备份出来包含存储过程和函数, 默认开启, 需要对 mysql.proc 表有查看权限;
生成的文件中会包含 CREATE PROCEDURE 和 CREATE FUNCTION 语句以用于恢复,
关闭则需要用 --skip-routines 参数
--triggers
备份出来包含触发器, 默认开启, 使用 --skip-triggers 来关闭
--set-charset
备份文件里写 SET NAMES default_character_set 到输出, 此参默认开启;
--skip-set-charset 禁用此参数, 不会在备份文件里面写出 set names...
--single-transaction
该参数在事务隔离级别设置成 Repeatable Read,
并在 dump 之前发送 start transaction 语句给服务端;
这在使用 innodb 时很有用, 因为在发出 start transaction 时, 保证了在不阻塞任何应用下的一致性状态;
对 myisam 和 memory 等非事务表, 还是会改变状态的,
当使用此参的时候要确保没有其他连接在使用
ALTER TABLE, CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE 等语句,
否则会出现不正确的内容或则失败;
--add-locks 和此参互斥,
在 mysql5.7.11 之前, --default-parallelism 大于 1 的时候和此参也互斥,
必须使用 --default-parallelism=0;
5.7.11 之后解决了 --single-transaction 和 --default-parallelism 的互斥问题
--tz-utc
备份时会在备份文件的最前几行添加 SET TIME_ZONE='+00:00'
注意: 如果还原的服务器不在同一个时区并且还原表中的列有 timestamp 字段, 会导致还原出来的结果不一致;
默认开启该参数, 用 --skip-tz-utc 来关闭参数
|