Mydumper:MySQL多线程逻辑备份与恢复
2017-12-28 18:18
399 查看
http://blog.51cto.com/lookingdream/1906222
MySQL多线程逻辑备份
目前版本已经更新到了0.9.1,新增了一些参数,现在对新参数了解一下:Mydumper简介Mydumper是一个多线程的MySQL逻辑备份工具.逻辑备份速度非常快(跟mysqldump相比)myisam和innodb表的一致性备份如果不是使用myisam表,几乎无”锁”(no locking)每个表都是导出到独立的文件快速压缩,通常mydumper压缩的文件比XtraBackup压缩的文件小3~5倍Mydumper安装# yum install cmake glib2-devel zlib zlib-devel pcre-devel gcc-c++ # wget -c https://launchpad.net/mydumper/0.5/0.5.2/+download/mydumper-0.5.2.tar.gz # tar zxvf mydumper-0.5.2.tar.gz # cd mydumper-0.5.2 # cmake . # make && make install生成2个工具:mydumper(备份),myloader(导入),放入到bin目录下。mydumperMydumper通过使用多线程同时dump多个表或是表的一部分.它有很多选项参数
mydumper --help.以下是其中三个重要参数:
--database:指定要导出备份的数据库名 --threads:指定使用线程的数目.通常可设置为CPU的核数目,当然有时也会设置更多. --rows:指定每个"块"(chunk)的行(记录)数目.具体值的设置取决于数据表的记录数目.一个备份脚本例子dbdump.sh:
#!/bin/bash MYDUMPER=`which mydumper` DIR_BACKUP=/backup DB_HOST=192.168.1.190 DB_PORT=3306 DB_NAME=sakila DB_USER=root DB_PASS=123456 FDAY=`date "+%F"` DB_DUMP=$DIR_BACKUP/$DB_NAME.$FDAY $MYDUMPER \ --database=$DB_NAME \ --host=$DB_HOST \ - 4000 -port=$DB_PORT \ --user=$DB_USER \ --password=$DB_PASS \ --outputdir=$DB_DUMP \ --rows=500000 \ --compress \ --build-empty-files \ --threads=2 \ --compress-protocol \ --kill-long-queries注:由于Mydumper不处理MySQL的视图,触发器和存储过程,因此使用mydumper去导出schema并不可靠.实际生产环境中,建议mydumper仅用于导出数据(使用
--no-schemas),而通过mysqldump来导出schema.
MySQL多线程逻辑恢复
Myloader上面在安装Mydumper的同时也安装了Myloader.使用Myloader进行恢复的脚本例子dbload.sh:#!/bin/bash MYLOADER=`which myloader` DB_HOST="192.168.1.190" DB_PORT=3306 DB_NAME="sakila2" DB_USER="root" DB_PASS="123456" DB_DUMP="/data/backup/sakila.2013-04-29" $MYLOADER \ --database=$DB_NAME \ --host=$DB_HOST \ --port=$DB_PORT \ --user=$DB_USER \ --password=$DB_PASS \ --directory=$DB_DUMP \ --queries-per-transaction=50000 \ --threads=6 \ --compress-protocol \ --verbose=3root@op3:/home/zhoujy# mydumper --helpUsage: mydumper [OPTION...] multi-threaded MySQL dumpingHelp Options: -?, --help Show help optionsApplication Options: -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 2myloader(0.9.1):
root@op:~# myloader --help Usage: myloader [OPTION...] multi-threaded MySQL loader Help Options: -?, --help Show help optionsApplication Options: -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测试:测试基本用法1:备份
./mydumper -u zjy -p ##### -h 192.168.220.245 -P 3306 -B chushihua -o /home/zhoujy/bak/
root:homezhoujybak# ls分析:mydumper把数据和表结构分开备份,并且把二进制日志备份出来单独放到一个文件中。
metadata:元数据 记录备份开始和结束时间,以及binlog日志文件位置。
table data:每个表一个文件 table schemas:表结构文件 binary logs: 启用--binlogs选项后,二进制文件存放在binlog_snapshot目录下 daemon mode:在这个模式下,有五个目录0,1,binlogs,binlog_snapshot,last_dump。 备份目录是0和1,间隔备份,如果mydumper因某种原因失败而仍然有一个好的快照,当快照完成后,last_dump指向该备份。2:还原:还原到另一台服务器,先建立要还原的数据库(chushihua)./myloader -u root -p 123456 -h 192.168.200.25 -P 3307 -B chushihua -d /home/zhoujy/bak/和备份一样查看是多线程进一步测试:测试一些常用的参数备份指定表(-T),并且不要导出表结构(-m)./mydumper -u root-p 123456 -h 192.168.220.252 -P 3306 -m -B test -T b,a,c,d,e,g,f,h,i -o /home/zhoujy/bak/zhoujy@zhoujy:~/bak$ ls -lh-rw-rw-r-- 1 zhoujy zhoujy 3.4K 2013-11-14 20:57 test.a.sql-rw-rw-r-- 1 zhoujy zhoujy 1.6M 2013-11-14 20:57 test.b.sql-rw-rw-r-- 1 zhoujy zhoujy 7.8M 2013-11-14 20:57 test.c.sql-rw-rw-r-- 1 zhoujy zhoujy 1.7M 2013-11-14 20:57 test.d.sql-rw-rw-r-- 1 zhoujy zhoujy 303K 2013-11-14 20:57 test.e.sql-rw-rw-r-- 1 zhoujy zhoujy 517K 2013-11-14 20:57 test.f.sql-rw-rw-r-- 1 zhoujy zhoujy 646K 2013-11-14 20:57 test.g.sql-rw-rw-r-- 1 zhoujy zhoujy 394K 2013-11-14 20:57 test.h.sql-rw-rw-r-- 1 zhoujy zhoujy 34K 2013-11-14 20:57 test.i.sql-rw-rw-r-- 1 zhoujy zhoujy 75 2013-11-14 20:57 metadata压缩备份文件(-c),备份binlog(-b),正则表达式备份表(-x)./mydumper -u root -p 123456 -h 192.168.200.25 -P 3306 -m -c -b --regex=tmp.* -B test -o /home/zhoujy/bak/
drwx------ 2 zhoujy zhoujy 4.0K 2013-11-14 21:16 binlog_snapshot-rw-rw-r-- 1 zhoujy zhoujy 133 2013-11-14 21:16 metadata-rw-rw-r-- 1 zhoujy zhoujy 94K 2013-11-14 21:16 test.tmp_0808.sql.gz-rw-rw-r-- 1 zhoujy zhoujy 75K 2013-11-14 21:16 test.tmp_0809.sql.gz-rw-rw-r-- 1 zhoujy zhoujy 25K 2013-11-14 21:16 test.tmp_0813.sql.gz-rw-rw-r-- 1 zhoujy zhoujy 208K 2013-11-14 21:16 test.tmp_0826.sql.gz-rw-rw-r-- 1 zhoujy zhoujy 915 2013-11-14 21:16 test.tmp_0827.sql.gz-rw-rw-r-- 1 zhoujy zhoujy 901 2013-11-14 21:16 test.tmp_0912.sql.gz-rw-rw-r-- 1 zhoujy zhoujy 2.1K 2013-11-14 21:16 test.tmp_0916.sql.gz-rw-rw-r-- 1 zhoujy zhoujy 622K 2013-11-14 21:16 test.tmp_0918_a.sql.gz-rw-rw-r-- 1 zhoujy zhoujy 28M 2013-11-14 21:16 test.tmp_0918_ff.sql.gz如上所示,备份文件已经是压缩的了(用gzip-d 解压),并且备份出了tmp.*匹配出来的所有表,二进制日志也被备份到了binlog_snapshot文件中,并且也是被压缩的。新版本里(0.91)已经不能备份binlog了,没有-b参数。这里说明下备份指定数据库的方法:--regex正则匹配#指定备份数据库:备份abc、bcd、cdemydumper -u backup -p 123456 -h 192.168.180.13 -P 3306 -t 3 -c -l 3600 -s 10000000 -e --regex 'abc|bcd|cde' -o bbb/
指定不备份的数据库:不备份abc、mysql、test,备份其他数据库
mydumper -u backup -p 123456 -h 192.168.180.13 -P 3306 -t 3 -c -l 3600 -s 10000000 -e --regex '^(?!(abc|mysql|test))' -o bbb/还原,表存在先删除(-o):这里需要注意,使用该参数,备份目录里面需要有表结构的备份文件。./myloader -u root -p 123456 -h 192.168.200.25 -P 3306 -o -B test -d /home/zhoujy/bak/mydumper支持一张表多个线程以chunk的方式批量导出,参数-r:试图用行块来分割表,该参数关闭--chunk-filesize参数。如:
mydumper -u zjy -p xxx -h 192.168.123.70 -P 3306 -t 5 -c -r 300000 -l 3600 -s 10000000 -B vs -o /home/zhoujy/vs/表示每个线程用300000行块来分割表,通过show processlist 看到:5个线程备份这个可以更好的备份数据库,不管数据库里是否有大表。本文出自http://www.cnblogs.com/zhoujinyi/p/3423641.html
相关文章推荐
- Mydumper:MySQL多线程逻辑备份与恢复
- MySQL多线程备份恢复工具mydumper,myloder
- MySQL多线程逻辑备份工具之mydumper
- MySQL多线程备份工具:mydumper
- mysql 开发进阶篇系列 42 逻辑备份与恢复
- MySQL多线程备份工具:mydumper
- mysql 多线程备份工具mydumper 备份测试(含与mysqldump的对比)
- mysql 开发进阶篇系列 43 逻辑备份与恢复(基于时间和位置的不完全恢复)
- MySql逻辑备份恢复方法简单总结
- MySQL备份与恢复之逻辑备份
- MySql逻辑备份恢复方法简单总结
- mysql的逻辑备份和恢复
- MySQL备份与恢复常用方法总结(mysqldump/xtrabackup/lvm快照备份/逻辑备份与恢复/二进制日志及时点恢复) 推荐
- MySQL多线程逻辑备份工具之mydumper
- Mysql的逻辑备份与恢复
- MySQL多线程备份工具 mydumper
- MySQL逻辑备份利器-mydumper
- 记录一次 MySQL 逻辑备份与恢复的演练
- MySQL逻辑备份利器-mydumper
- MySQL多线程备份工具mydumper