并发逻辑备份工具mydumper实践
- mysqldump单线程的备份恢复机制使得线上备份900G+数据近7个多小时,恢复30G数据需要2-3小时。
- mydumper的行级并发备份和myloder表级并发导入,理论上能够很大程度提升效率。
- 现对mydumper和mysqldump进行有差异性的性能比较。
安装
yum -y install git cmake pcre-devel.x86_64 glib2-devel mysql-devel mysql-libs
git clone https://github.com/maxbube/mydumper.git
cmake .
make && make install
mydump常用参数
-u 用户名
-p 密码
-h 主机IP或域名
-t 线程数
-o 备份文件名
-d 不带数据
-B schema名,多个用逗号间隔
-T table名,多个用逗号间隔
-R 导出trigger
-G 导出routines
mysqldump和mydumper测试对比
数据量约为21G,备份时间如下:
对比结果
mysqldump | mydumper(t=2) | mydumper(t=4) | mydumper(t=8) |
---|---|---|---|
8m28.707s | 3m54.025s | 4m15.256s | 4m24.299s |
对比分析
- mysqldump替换mydumper后,备份时间缩短一半左右
- mydmper中-t参数设置并非越大越好,在测试环境中,t=2反而比默认值4要快
myloader实践
myloader常用参数
-u 用户名
-p 密码
-h 主机IP或域名
-t 线程数
-d 备份文件名
-o 覆盖还原
-B 还原的schema名,可以重命名
-s 指定还原部分的schema名
不同线程数-t对恢复时间的影响
备份约4G左右,恢复时间如下:
对比结果:
t=2 | t=4 | t=6 | t=8 | t=10 | t=12 |
---|---|---|---|---|---|
5m22.614s | 3m11.709s | 2m50.085s | 2m20.515s | 2m9.527s | 2m5.290s |
对比分析:
- 线程数-t越高,恢复越快,但受IO限制,在测试环境下 t>8之后收益逐渐减少。
- 当恢复的数据库中存在特别大的表或者只有一张表,myloader收益较低甚至没有。
- -q(queries-per-transaction)参数的调整暂时没有发现对测试结果有影响。