mydumper 快速高效备份mysql,按照表生成备份文件,快速恢复

时间:2024-09-18 13:37:44

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.****.net/lidan3959/article/details/20867711