内容纲要

相比 mysqldump,mydumper 的导出的文件形式是每个表一个文件,对于开发 / 测试环境的误操作恢复十分有效,因为大多数时间不需要整库恢复。支持多线程,能提高一些速度。

不指定导出目录的命令将会设定导出的目录为 export-date-time,很显然目录的命名规则是:export – 阿拉伯数字表示的具体年月日 – 阿拉伯数字表示的具体时分秒,其中小时采用 24 小时制。该目录包含 Metadata 以及逻辑备份的 SQL 文件。SQL 文件包括两种,一种是 Schema 文件,命名规则是:数据库名. 表名 – schema.sql;另一种是数据文件,命名规则是:数据库名. 表名. sql。打开备份的 SQL 文件,可以在 Schema 中见到 DDL 语句,在数据文件中看到具体的 INSERT 语句。

参数说明

mydumper 的常用参数

-B, –database              需要备份的数据库,一个数据库一条命令备份,要不就是备份所有数据库,包括 mysql。
-T, –tables-list           需要备份的表,用逗号分隔,同时要带上库名。
-o, –outputdir             备份文件目录
-s, –statement-size        生成插入语句的字节数,默认 1000000,这个参数不能太小,不然会报 Row bigger than statement_size for tools.t_serverinfo
-r, –rows                  试图用行块来分割表,该参数关闭 –chunk-filesize
-F, –chunk-filesize        行块分割表的文件大小,单位是 MB
-c, –compress              压缩输出文件
-e, –build-empty-files     即使表没有数据,也产生一个空文件
-x, –regex                 正则表达式匹配,如’db.table’
-i, –ignore-engines        忽略的存储引擎,用逗号分隔
-m, –no-schemas            不导出表结构
-d, –no-data               不导出表数据
-G, –triggers              导出触发器
-E, –events                导出事件
-R, –routines              导出存储过程
-k, –no-locks              不执行共享读锁 警告:这将导致不一致的备份
–less-locking              减到最小的锁在 innodb 表上.
-l, –long-query-guard      设置长查询时间, 默认 60 秒,超过该时间则会报错:There are queries in PROCESSLIST running longer than 60s, aborting dump
-K, –kill-long-queries kill 掉长时间执行的查询,备份报错:Lock wait timeout exceeded; try restarting transaction
-D, –daemon                启用守护进程模式
-I, –snapshot-interval     dump 快照间隔时间,默认 60s,需要在 daemon 模式下
-L, –logfile               使用日志文件,默认标准输出到终端
–tz-utc                    备份的时候允许备份 Timestamp,这样会导致不同时区的备份还原会出问题,默认关闭,参数:–skip-tz-utc to disable.
–skip-tz-utc
–use-savepoints            使用保存点记录元数据的锁信息,需要 SUPER 权限
–success-on-1146           Not increment error count and Warning instead of Critical in case of table doesn’t exist
–lock-all-tables           锁全表,代替 FLUSH TABLE WITH READ LOCK
-U, –updated-since         Use Update_time to dump only tables updated in the last U days
–trx-consistency-only      Transactional consistency only
-h, –host                  The host to connect to
-u, –user                  Username with privileges to run the dump
-p, –password              User password
-P, –port                  TCP/IP port to connect to
-S, –socket                UNIX domain socket file to use for connection
-t, –threads               备份执行的线程数, 默认 4 个线程
-C, –compress-protocol     在 mysql 连接上使用压缩协议
-V, –version               Show the program version and exit
-v, –verbose               更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2

myloader 使用参数

-d, –directory                   备份文件所在的目录
-q, –queries-per-transaction     每个事务的 query 数量, 默认 1000
-o, –overwrite-tables            如果表存在则先删除,使用该参数,需要备份时候要备份表结构,不然还原会找不到表
-B, –database                    指定需要还原的数据库
-s, –source-db                   还原的数据库
-e, –enable-binlog               启用二进制日志恢复数据
-h, –host                        The host to connect to
-u, –user                        Username with privileges to run the dump
-p, –password                    User password
-P, –port                        TCP/IP port to connect to
-S, –socket                      UNIX domain socket file to use for connection
-t, –threads                     使用的线程数量,默认 4
-C, –compress-protocol           连接上使用压缩协议
-V, –version                     Show the program version and exit
-v, –verbose                     更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2

使用方法示例

导出整个库:
mydumper -u root -S /tmp/my3308.sock -B freeoa_db -o /data/freeoa_db

仅仅导出 freeoa_db 的 ddl 语句不包含数据到指定的目录 / data/freeoa_db:
mydumper -u root -S /tmp/my3308.sock -B freeoa_db -m -o /data/freeoa_db

以压缩的方式导出的文件:
mydumper -u root -S /tmp/my3308.sock -B freeoa_db -c -o /data/freeoa_db

备份文件以. gz 的格式压缩

#ls
metadata freeoa_db.config.sql.gz freeoa_db.trade_order-schema.sql.gz
freeoa_db.config-schema.sql.gz freeoa_db-schema-create.sql.gz freeoa_db.trade_order.sql.gz

指定 –no-schemas 参数,此时导出的文件中就没有 Schema 文件了。默认无数据则只有表结构文件,加上 –build-empty-files 参数后,即使是一张空表,仍然会创建一个文件。

设置长查询的上限,如果存在比这个还长的查询则退出 mydumper,也可以设置杀掉这个长查询:
mydumper -h 127.0.0.1 -u root -p root –long-query-guard 300 –kill-long-queries

实现此功能需要指定 –long-query-guard 参数,后面加上限值即可。同时,杀掉长查询,需要指定 –kill-long-queries 参数。

把单表分成多个 chunks:
mydumper -h 127.0.0.1 -u root -p root –rows 2000

实现此功能,加上 –rows 参数。如果一张表的记录数超过设置的值,则这张表会拆分成多个 SQL 文件,命名规则如下:数据库名. 表名. 0000n.sql,n 从 0 开始。

指定导出线程数:
mydumper -h 127.0.0.1 -u root -p root -B test –threads 10

前面提到,mydumper 是多线程的。加上 –threads 参数后,可以指定线程数,如果导出的数据较多,建议指定此参数,并且设置一个合理的值。另外加上此参数,导出速度快了很多,这就是多线程的优势。

后台运行:
$ mydumper -h 127.0.0.1 -u root -p root -B test –daemon

加上 –daemon 参数即可实现后台执行导出命令。

使用正则表达式 (–regex 正则匹配):
mydumper -u root -S /tmp/mysql.sock –regex=’^(?!(mysql|test))’ -o /data/bk20170720

其中正则表达式可以是
–regex=order.*  导出所有 order 开头的表

-x ‘^(?!(dbname.user$))’

完全准确匹配库表名。

一些正则示例:

exlcude two tables
-x ‘^(?!(dbname.user$|dbname.tbl2$))’

exclude all tables on schema dbname starting with user, i.e. user, user2 user3
-x ‘^(?!(dbname.user))’

exclude all dbname schema
-x ‘^(?!(dbname))’

备份指定表 – T,并且不要导出表结构 – m
mydumper -u root-p 123456 -h 192.168.0.13 -P 3306 -m -B test -T b,a,c,f,h -o /home/freeoa/bak/

指定备份数据库:备份 abc、bcd、cde
mydumper -u backup -p 123456  -h 192.168.0.13 -P 3306 -t 3 -c -l 3600 -s 10000000 -e –regex ‘abc|bcd|cde’ -o dbak/

指定不备份的数据库:排除 abc、mysql、test 库,备份其他数据库
mydumper -u backup -p 123456  -h 192.168.0.13 -P 3306 -t 3 -c -l 3600 -s 10000000 -e –regex ‘^(?!(abc|mysql|test))’ -o dbak/

mydumper 支持一张表多个线程以 chunk 的方式批量导出,参数 – r:试图用行块来分割表,该参数关闭 –chunk-filesize 参数。如:
mydumper -u zjy -p 123456  -h 192.168.0.13 -P 3306 -t 5 -c -r 300000 -l 3600 -s 10000000 -B vsdb -o /home/freeoa/vsdb/

mydumper 导出的文件

# ls
metadata platform.config.sql platform.order.sql

metadata : 包含导出时刻的 binlog 位点信息 ,如果启用 gtid ,则记录 gtid 信息。

Started dump at: 2017-07-20 17:26:53
SHOW MASTER STATUS:
Log: mysql-bin.000025
Pos: 503319083
GTID:
Finished dump at: 2017-07-20 17:27:02
db.table.sql: 数据文件,insert 语句
db.table-schema.sql : 包含建表语句
db-schema.sql   : 包含建库语句

注意 0.9.1 版本去掉了 –binlogs 参数,故会少了 启用 binlogs 参数相关的文件。

–triggers –events –routines
用于导出触发器、事件、例程。

一些使用心得

在用 myloader 恢复库表时,如果不加’–enable-binlog’参数,则在从库中有库表不会与主库中的相同。这点一定要注意,除非你想在从库也来这么一把。

发表评论

电子邮件地址不会被公开。 必填项已用*标注