mydumper 快速高效备份mysql,按照表生成备份文件,快速恢复
Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具。开发人员主要来自MySQL,Facebook,SkySQL公司。目前已经在一些线上使用了Mydumper。
Mydumper主要特性:
1.轻量级C语言写的
2.执行速度比mysqldump快10倍
3.事务性和非事务性表一致的快照(适用于0.2.2以上版本)
4.快速的文件压缩
5.支持导出binlog
6.多线程恢复(适用于0.2.1以上版本)
7.以守护进程的工作方式,定时快照和连续二进制日志(适用于0.5.0以上版本)
8.开源 (GNU GPLv3)
下载链接
wget https://launchpad.net/mydumper/0.6/0.6.1/+download/mydumper-0.6.1.tar.gz
安装
cd /usr/local/tools tar -xzvf /tmp/mydumper-0.6.1.tar.gz cd mydumper-0.6.1 [root@db01 mydumper-0.6.1]# cmake . -- Using mysql-config: /usr/bin/mysql_config -- Found MySQL: /usr/include/mysql, /usr/lib64/mysql/libmysqlclient_r.so;/usr/lib64/libz.so; /usr/lib64/libpthread.so;/usr/lib64/libcrypt.so;/usr/lib64/libnsl.so; /usr/lib64/libm.so;/usr/lib64/libpthread.so;/usr/lib64/libssl.so;/usr/lib64/libcrypto.so -- checking for module 'libpcre' -- found libpcre, version 6.6 -- Found PCRE: /usr/include WARNINGUnable to find Sphinx documentation generator -- ------------------------------------------------ -- MYSQL_CONFIG = /usr/bin/mysql_config -- CMAKE_INSTALL_PREFIX = /usr/local -- BUILD_DOCS = ON -- RUN_CPPCHECK = OFF -- Change a values with: cmake -D= -- ------------------------------------------------ -- -- Configuring done -- Generating done -- Build files have been written to: /usr/local/tools/mydumper-0.6.1 [root@db01 mydumper-0.6.1]# make Scanning dependencies of target mydumper [ 20%] Building C object CMakeFiles/mydumper.dir/mydumper.c.o [ 40%] Building C object CMakeFiles/mydumper.dir/binlog.c.o [ 60%] Building C object CMakeFiles/mydumper.dir/server_detect.c.o [ 80%] Building C object CMakeFiles/mydumper.dir/g_unix_signal.c.o Linking C executable mydumper [ 80%] Built target mydumper Scanning dependencies of target myloader [100%] Building C object CMakeFiles/myloader.dir/myloader.c.o Linking C executable myloader [100%] Built target myloader [root@db01 mydumper-0.6.1]# make install [ 80%] Built target mydumper [100%] Built target myloader Install the project... -- Install configuration: "" -- Installing: /usr/local/bin/mydumper -- Removed runtime path from "/usr/local/bin/mydumper" -- Installing: /usr/local/bin/myloader -- Removed runtime path from "/usr/local/bin/myloader"
测试用例
(1) 单线程,无压缩
mydumper -u root -p root -P 3308 -h 10.211.55.5 -B ymz -o /backup -b
(2) 单线程,输出更多信息
mydumper -u root -p root -P 3308 -h 10.211.55.5 -B ymz -o /backup -b -v 3
(3) 2线程无压缩备份
mydumper -u root -p root -P 3308 -h 10.211.55.5 -t 2 -B ymz -o /backup -b -v 3
(4) 2线程、压缩备份
mydumper -u root -p root -P 3308 -h 10.211.55.5 -t 2 -c -B ymz -o /backup -b -v 3
(5) -e 参数,即使没有数据,会生成空文件
mydumper -u root -p root -P 3308 -h 10.211.55.5 -t 2 -c -e -B ymz -o /backup -b -v 3
(6) 排除yiqifa_bs_push、yiqifa_bs和yiqifa_an及mysql库,相当于只备份test库
mydumper –regex=’^(?!(yiqifa_bs_push|yiqifa_bs|yiqifa_an|mysql))’ -u root -p xxx –binlogs -c -v 3 -o /data/mysql_bak/
总结:
(1)数据不一致情况:
在备份期间先对表t 执行了insert 操作,然后执行alter table t drop name 而此时备份记录的binlog pos点是在insert 之前的点,当基于时间点恢复的时候因为备份文件里T的字段name 已经被drop 那么在解析binlog 执行insert的时候就会报列匹配不上的错误
这也是为何mysql5.5加入metadata lock的主要原因—-防止事物被ddl语句破坏
(2)mydumper 无法备份view和trigger (无论是整库还是单独指定库),不过整库备份模式下可以备份procedure和function(因为存储在mysql.proc里),但是单库备份依然无法备份procedure和function,希望想使用mydumper进行备份的小伙伴们引起重视
mydumper 参数介绍
-B, --database 需要备份的库 -T,--tables-list需要备份的表,用,分隔 -o,--outputdir输出目录 -s,--statement-sizeAttemptedsizeofINSERTstatementinbytes,default1000000 -r,--rows试图分裂成很多行块表 -c,--compress压缩输出文件 -e,--build-empty-files即使表没有数据,还是产生一个空文件 -x,--regex支持正则表达式 -i,--ignore-engines忽略的存储引擎,用,分隔 -m,--no-schemas不导出表结构 -k,--no-locks不执行临时共享读锁警告:这将导致不一致的备份 -l,--long-query-guard长查询,默认60s --kill-long-querieskill掉长时间执行的查询(insteadofaborting) -b,--binlogs导出binlog -D,--daemon启用守护进程模式 -I,--snapshot-intervaldump快照间隔时间,默认60s,需要在daemon模式下 -L,--logfile日志文件 -h,--host -u,--user -p,--password -P,--port -S,--socket -t,--threads使用的线程数,默认4 -C,--compress-protocol在mysql连接上使用压缩 -V,--version -v,--verbose更多输出,0=silent,1=errors,2=warnings,3=info,default2
myloader参数介绍:
-d,--directory导入备份目录 -q,--queries-per-transaction每次执行的查询数量,默认1000 -o,--overwrite-tables如果表存在删除表 -B,--database需要还原的库 -e,--enable-binlog启用二进制恢复数据 -h,--host -u,--user -p,--password -P,--port -S,--socket -t,--threads使用的线程数量,默认4 -C,--compress-protocol连接上使用压缩 -V,--version -v,--verbose更多输出,0=silent,1=errors,2=warnings,3=info,default2
参考网站:
https://launchpad.net/mydumper
http://www.ttlsa.com/mysql/mysql-backup-tool-mydumper/
http://blog.csdn.net/lidan3959/article/details/20867711