mydumper_myloader使用参考
2017-07-26 10:17:47 阿炯

本站赞助商链接,请多关照。 相比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'参数,则在从库中有库表不会与主库中的相同。这点一定要注意,除非你想在从库也来这么一把。