mydumper_myloader使用参考
相比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'参数,则在从库中有库表不会与主库中的相同。这点一定要注意,除非你想在从库也来这么一把。