mydumper&myloader使用介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sun_ashe/article/details/81938916

软件简介

更快的,mysql数据库多线程导入导出工具。

下载

https://launchpad.net/mydumper/+download

安装

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
[root@10-127-33-80 data]# tar -zxvf mydumper-0.9.1.tar.gz
[root@10-127-33-80 data]#cd mydumper-0.9.1
[root@10-127-33-80 mydumper-0.9.1]# cmake .
[root@10-127-33-80 mydumper-0.9.1]# make && make install

基本使用

数据导出(对于test库所有表导出,16个线程,基本为热数据。)

mydumper -u root -p redhat -S /tmp/mysql_13308.sock -t 16 -B test -o /data/test
导出文件示例:
[root@10-127-33-80 test]# ll -h
total 61G
-rw-r–r– 1 root root 532 Jul 19 17:47 metadata
-rw-r–r– 1 root root 382 Jul 19 17:46 test.sbtest10-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest10.sql
-rw-r–r– 1 root root 382 Jul 19 17:46 test.sbtest11-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest11.sql
-rw-r–r– 1 root root 382 Jul 19 17:46 test.sbtest12-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest12.sql
-rw-r–r– 1 root root 382 Jul 19 17:46 test.sbtest13-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest13.sql
-rw-r–r– 1 root root 382 Jul 19 17:46 test.sbtest14-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest14.sql
-rw-r–r– 1 root root 382 Jul 19 17:46 test.sbtest15-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest15.sql
-rw-r–r– 1 root root 382 Jul 19 17:46 test.sbtest16-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest16.sql
-rw-r–r– 1 root root 380 Jul 19 17:46 test.sbtest1-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest1.sql
-rw-r–r– 1 root root 380 Jul 19 17:46 test.sbtest2-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest2.sql
-rw-r–r– 1 root root 380 Jul 19 17:46 test.sbtest3-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest3.sql
-rw-r–r– 1 root root 380 Jul 19 17:46 test.sbtest4-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest4.sql
-rw-r–r– 1 root root 380 Jul 19 17:46 test.sbtest5-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest5.sql
-rw-r–r– 1 root root 380 Jul 19 17:46 test.sbtest6-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest6.sql
-rw-r–r– 1 root root 380 Jul 19 17:46 test.sbtest7-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest7.sql
-rw-r–r– 1 root root 380 Jul 19 17:46 test.sbtest8-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:46 test.sbtest8.sql
-rw-r–r– 1 root root 380 Jul 19 17:46 test.sbtest9-schema.sql
-rw-r–r– 1 root root 3.8G Jul 19 17:47 test.sbtest9.sql
-rw-r–r– 1 root root 63 Jul 19 17:46 test-schema-create.sql

61G sql文件导出时间大概为:
[root@10-127-33-80 data]# time sh mydumper.sh
real 0m29.172s
user 4m56.947s
sys 1m49.880s

导出多个库用法
mydumper -u root -p root123 -S /tmp/mysql3308.sock -t 16 –regex ‘a|b’ -o /data/test //使用regex正则匹配
也可以使用–regex ‘^(?!(mysql|test))’ 这种方式去反向过滤。

导入

myloader -u root -p redhat -S /tmp/mysql_13308.sock -t 16 -B test -d /data/test/
real 19m50.933s
user 1m18.263s
sys 0m48.272s
注意事项
1,多线程导出会耗尽磁盘IO,争夺innodb内存池,挤掉热数据。应该在系统访问量最低时进行,避免影响线上业务
2,导出导入不支持管道
3,不支持隐式密码输入,安全起见,放在shell脚本中执行。

一致性多线程备份原理

0,捞取所有待导入的表结构,以及对于的innodb行数级别,根据表宽度和行数级别,制定并发执行计划
1,执行FLUSH TABLES WITH READ LOCK,禁止数据写入
2,show master status;获取GTID
3,开启多线程, SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;START TRANSACTION WITH CONSISTENT SNAPSHOT;
4,unlock tables;释放全局读锁
5,各线程数据导出,获取表结构信息,备份过程结束,断开线程。

TODO

1,目前只能导出到文件,再导入数据库,如果支持直接导出导入,可以节约更多的时间
2,导出表顺序问题,如果考虑到数据量大小,也可以节省很多时间。

猜你喜欢

转载自blog.csdn.net/sun_ashe/article/details/81938916