mydumper原理和使用
来源:互联网 发布:unity3d游戏开发教程 编辑:程序博客网 时间:2024/04/30 13:46
工具对比
特点
mydumper是一个高性能多线程备份和恢复工具,能够实现记录级的多线程一致性备份。
1:轻量级C语言写的2:执行速度比mysqldump快10倍
3:事务性和非事务性表一致的快照(适用于0.2.2以上版本)
4:快速的文件压缩
5:支持导出binlog
6:多线程恢复(适用于0.2.1以上版本)
7:以守护进程的工作方式,定时快照和连续二进制日志(适用于0.5.0以上版本)
8:开源 (GNU GPLv3)
工作原理
安装完mydumper之后,会生成2个工具:mydumper和myloader,mydumper用于导出数据,myloader用于导入数据。
mydumper原理
在mydumper进行备份的时候,由一个主线程以及多个备份线程完成。
其主线程的流程是:
<1>连接数据库
<2>FLUSH TABLES WITH READ LOCK 将脏页刷新到磁盘并获得只读锁
<3>START TRANSACTION /!40108 WITH CONSISTENT SNAPSHOT / 开启事物并获取一致性快照
<4>SHOW MASTER STATUS 获得binlog信息
<5>创建子线程并连接数据库
<6>为子线程分配任务并push到队列中
<7>UNLOCK TABLES / FTWRL / 释放锁
子线程的主要流程是:
<1>连接数据库
<2>SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE
<3>START TRANSACTION /!40108 WITH CONSISTENT SNAPSHOT /
<4>从队列中pop任务并执行
myloader原理
备份恢复命令
【版本是0.9.1】
导出
mydumper -h 192.168.100.83 -P 3306 -u root -p '123456' --rows=100000 -e -B sbtest -t 8 -o /tmp/bak_3306 #导出单库所有表
mydumper -h 192.168.100.83 -P 3306 -u root -p '123456' --rows=100000 -e -B sbtest -T sbtest1,sbtest2 -t 8 -o /tmp/bak_3306 #导出单库几个表
mydumper -h 192.168.100.83 -P 3306 -u root -p '123456' --rows=100000 -e -t 8 -o /tmp/bak_3306 #导出所有库
mydumper -h 192.168.100.83 -P 3306 -u root -p '123456' --rows=100000 -e --regex 'db1|db2' -t 8 -o /tmp/bak_3306 #导出指定库
mydumper -h 192.168.100.83 -P 3306 -u root -p '123456' --rows=100000 -e --regex '^(?!(mysql|test))' -t 8 -o /tmp/bak_3306 #导出除mysql、test之外的所有库
-r, --rows 试图用行块来分割表,导出的每个文件多少行,该参数关闭--chunk-filesize
-F, ----chunk-filesize 试图用块来分割表,会生成一个一个的100M大小的sql备份文件
-e, --build-empty-files 即使表没有数据,也产生一个空文件
-B, --database 指定要还原的数据库
-x, --regex 正则表达式
-T, --tables-list 需要备份的表,用逗号分隔
-t, --threads 备份执行的线程数,默认4个线程
-o, --outputdir 备份文件输出目录
-D, --daemon 启用守护进程模式
导入
myloader -h 192.168.100.83 -P 3306 -u root -p '123456' -d /tmp/bak_3306 -o -t 8 -e
-d, --directory 备份文件所在的目录
-o, --overwrite-tables 如果表存在则先删除,使用该参数,需要备份时候要备份表结构,不然还原会找不到表
-t, --threads 使用的线程数量,默认4个线程
-e, --enable-binlog 启用二进制日志恢复数据,如果不加此参数不会记录binlog
远程导入导出
mydumper -h 192.168.100.83 -P 3306 -u root -p '123456' --rows=100000 -e --regex 'db1|db2' -o /tmp/bak_3306 -t 8 ; myloader -h 127.0.0.1 -P 3308 -u root -p '123456' -d /tmp/bak_3306 -o -t 8 -e
注意事项
<1>为了能够得到一致性的数据,各种备份工具,包括xtrabackup和mydumper,都需要有个短暂给源实例加读锁的过程,正常情况下短暂,但也会有例外,如源实例中存在数据量较大的MyISAM表时,持锁时间会变长。建议在业务低峰期进行。
<2>不是线程开的越多越好,受限于磁盘的IO能力,在使用前做好相关测试评估。<3>如果在从库恢复,注意导出导入时加上参数-e,否则不会记录binlog,会导致主从数据不一致。
<4>对于单表备份恢复,注意加上参数-r或者-F
<5>在数据导入时,可以将innodb_flush_log_at_trx_commit设置为0来最大限度提高导入性能,在完成数据导入后再将对应的参数调整为原值。
利用mydumper创建主从复制
1、在主库导出数据
mydumper -h 192.168.100.83 -P 3306 -u root -p '123456' --rows=100000 -e -t 8 -o /tmp/bak_33062、导入数据
scp -r bak_3306/ 192.168.20.84:/tmp/
myloader -h 192.168.100.84 -P 3306 -u root -p '123456' -d /tmp/bak_3306 -o -t 8 -e
3、查看二进制日志和pos
[root@84 bak_3306]# cat metadata
Started dump at: 2017-04-14 15:05:52
SHOW MASTER STATUS:
Log: mysql-bin-83-3306.000021
Pos: 12679211
GTID:
SHOW SLAVE STATUS:
Host: 192.168.20.100
Log: mysql-bin-83-3306.000014
Pos: 120
GTID:
Finished dump at: 2017-04-14 15:05:57
4、配置复制
change master to master_host='192.168.100.83',master_user='slave',master_password='slave123',master_log_file='mysql-bin-83-3306.000021',master_log_pos=12679211;
start slave;
参考文章
http://baiyangtx.net/2016/09/04/mydumper-principle/
http://www.yunweipai.com/archives/9771.html
http://www.cnblogs.com/zhoujinyi/p/3423641.html
- mydumper原理和使用
- mydumper备份原理和使用方法
- mydumper备份原理和使用方法
- mydumper原理
- mydumper & myloader 使用
- mydumper
- mysql备份工具 :mysqldump mydumper Xtrabackup 原理
- 利用mydumper和myloader备份恢复mysql
- CentOS6.7_Mysql5.6_使用mydumper全库备份
- 安装mydumper
- MySQL备份最流行的两把工具 --- Innobackupex 和 mydumper
- Dll原理和使用
- Dll原理和使用
- DLL 原理和使用
- RapidXml原理和使用
- Dll原理和使用
- RapidXml原理和使用
- SSH原理和使用
- 关于Curl的get和post请求
- Pycharm 中的 全局搜索(ctrl+shift+f) 功能无法使用的原因
- 机器学习一些数据集
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 妈妈群的诞生
- mydumper原理和使用
- 思考,分析:思维
- Android给textview添加超链接事件
- hdu1874(dijkstra解法优先队列优化)
- Redux 入门教程(一):基本用法
- STM32F4系列单片机ADC多通道DMA程序,注意DMA配置一定要先于DAC的配置
- 在android的webview中跳转到微信支付和支付宝app支付
- 18个月从A轮迅猛发展到C轮
- C语言实现从字符串中提取整数组(正负数整数和零),并计算整数组的和