一、说明
MyDumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具。开发人员主要来自MySQL,Facebook,SkySQL公司。备份格式为逻辑备份,每张表(非空表)会默认生成两个文件,分别包括建表语句及数据。
1.1 MyDumper优势
1.多线程备份工具2.支持文件压缩功能3.一致性:在所有的threads之间维护快照,提供master和slave日志的准确位置等4.支持多线程恢复5.比mysqldump备份速度及恢复速度都更快默认是关闭了binlog的dump功能,要想开启,需要在cmke编译的时候添加-DWITH_BINLOG=ON
1.2 MyDumper如何获取一致性快照的
1.server上正在运行的慢查询或中断或者被kill掉2.需要施加全局写锁("flush tables with read lock")3.读取不同的元数据("show slave status","show master status")4.创建具有事务性和非事务性表一致的快照(0.2.2+)3.一旦所有的工作现成通知已经创建好快照,master会执行"unlock tables",开始运行队列中的job
二、MyDumper/ MyLoader安装
2.1 下载地址

2.2 安装MyDumper依赖包
* Ubuntu or Debian: apt-get install libglib2.0-dev libmysqlclient15-dev zlib1g-dev libpcre3-dev libssl-dev * Fedora, RedHat and CentOS: yum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel * openSUSE: zypper install glib2-devel libmysqlclient-devel pcre-devel zlib-devel * MacOSX: port install glib2 mysql5 pcre pkgconfig cmake
2.3 安装MyDumper
shell> tar -zxvf mydumper-0.9.1.tar.gz shell> cd mydumper-0.9.1 shell> cmake . shell> make
注:安装完毕会生成两个文件mydumper和myloader
2.4 检验是否安装成功
shell> mydumper -V mydumper 0.9.1, built against MySQL 5.6.38
三、MyDumper常用参数列表
常用参数 |
说明 |
-B, --database |
要导出的数据库名 |
-T, --tables-list |
要导出的表名,多个表用逗号分隔。不支持正则表达式 |
-o, --outputdir |
导出数据文件存放的目录, mydumper 会自动创建 |
-c, --compress |
压缩导出的文件 |
-e, --build-empty-files |
即使是空表也为表创建文件 |
-x, --regex |
使用正则表达式匹配 'db.table' |
-i, --ignore-engines |
忽略的存储引擎,多个存储引擎使用逗号分隔 |
-m, --no-schemas |
只导出数据,不导出建库建表语句 |
-d, --no-data |
仅仅导出建表结构,创建 db 的语句,不导出表的数据 |
-G, --triggers |
导出触发器 |
-E, --events |
导出 events |
-R, --routines |
导出存储过程和函数 |
-k, --no-locks |
不施加临时的共享读锁,会导致备份不一致 |
-L, --logfile |
指定 mydumper 输出的日志文件,默认使用控制台输出 |
-h, --host |
主机 |
-u, --user |
用户名 |
-p, --password |
密码 |
-P, --port |
端口 |
-S, --socket |
套接字文件 |
-t, --threads |
所使用的线程数,默认是 4 |
-C, --compress-protocol |
压缩协议 |
-v, --verbose |
输出模式 , 0 = silent, 1 = errors, 2 = warnings, 3 = info, 默认为 2 |
四、导出示例
注:1.添加--compress参数,会生成.sql.gz文件2.加上-G -E -R参数,会生成dbname-schema-post.sql文件3.--outputdir目录不要求为空,同名文件会直接覆盖4.可以用 --regex '^(?!(mysql))' 来忽略某个库5.-B 后面不指定即所有库(不包括performance_schema), 后面指定即导出指定库
4.1 全库导出
mydumper --user=root --password='mysql' --socket=/tmp/mysql.sock --outputdir=/backup/mydumper -G -E -R --verbose=3 --logfile=/backup/mydumper/mydumper.log
4.2备份指定库指定表
mydumper --user=root --password='mysql' --socket=/tmp/mysql.sock -B db1 -T t1,t2 --outputdir=/backup/mydumper --verbose=3 --logfile=/backup/mydumper/mydumper.log
4.3 只导出结构
mydumper --user=root --password='mysql' --socket=/tmp/mysql.sock -B db1 -d --outputdir=/backup/mydumper --verbose=3 --logfile=/backup/mydumper/mydumper.log
注:可用于测试升级
4.4 只导出数据
mydumper --user=root --password='mysql' --socket=/tmp/mysql.sock -B db1 -m --outputdir=/backup/mydumper --verbose=3 --logfile=/backup/mydumper/mydumper.log
4.5 远程压缩及使用压缩协议
mydumper --user=root --password='mysql' --socket=/tmp/mysql.sock -B db1 -d --outputdir=/backup/mydumper -c -C tar --verbose=3 --logfile=/backup/mydumper/mydumper.log
4.6 匹配多张表备份
mydumper --user=root --password='mysql' --socket=/tmp/mysql.sock -B db1 --regex=db* --outputdir=/backup/mydumper --verbose=3 --logfile=/backup/mydumper/mydumper.log
4.7 过滤多个库
mydumper --user=root --password='mysql' --socket=/tmp/mysql.sock --regex '^(?!(mysql|db2))' --outputdir=/backup/mydumper --verbose=3 --logfile=/backup/mydumper/mydumper.log
4.8 即使是空表也生成.sql
mydumper --user=root --password='mysql' --socket=/tmp/mysql.sock --regex '^(?!(mysql))' -B db1 -e --outputdir=/backup/mydumper --verbose=3 --logfile=/backup/mydumper/mydumper.log
五、MyLoader常用参数
常用参数 |
说明 |
-d,--directory |
备份文件目录 |
-q,--queries-per-transaction |
每次事务执行的查询时间,默认为 1 000 |
-o,--overwrite-tables |
如果恢复表存在,先 drop |
-B,--database |
需要还原的数据库 |
-s,--source-db |
源数据库 |
-e,--enable-binlog |
启动还原数据的二进制日志 |
-h,--host |
主机 /I P |
-u,--user |
还原时用户 |
-p,--password |
密码 |
-P,--port |
端口 |
-S,--socket |
套接字 |
-t,--threads |
线程数,默认为 4 |
-C,--compress-protocol |
压缩协议 |
-V,--version |
查看版本 |
六、导入示例
6.1 恢复指定库
myloader --user=root --password='mysql' --socket=/tmp/mysql.sock --directory=/backup/mydumper --verbose=3 -s db3
6.2 恢复一个库到原来的实例
myloader --user=root --password='mysql' --socket=/tmp/mysql.sock --directory=/backup/mydumper --verbose=3 -s db1 -B 目标库
