千家信息网

mydumper工作原理解析

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,1、简介逻辑备份小钢炮--mydumper是针对MySQL的高性能多线程备份工具。该工具是由MySQL、Facebook、skysql公司的开发人员一起开发的。是由轻量级C语言开发;执行速度据说比my
千家信息网最后更新 2025年01月20日mydumper工作原理解析

1、简介

逻辑备份小钢炮--mydumper是针对MySQL的高性能多线程备份工具。该工具是由MySQL、Facebook、skysql公司的开发人员一起开发的。是由轻量级C语言开发;执行速度据说比mysqldump快10倍;支持事务和非事务表的一致性备份;还支持导出binlog;支持多线程备份;支持以守护进程的形式工作,定时备份;并且是开源的,其协议为GPLv3.

2、使用方法

root@dd:~/mydumper-0.6.2# ./mydumper --help  Usage:    mydumper [OPTION...] multi-threaded MySQL dumping  Help Options:    -?, --help                  Show help options  Application Options:    -B, --database              需要备份的库    -T, --tables-list           需要备份的表,用逗号分隔    -o, --outputdir             输出文件的目录    -s, --statement-size        生成插入语句的字节数, 默认 1000000,这个参数不能太小,不然会报 Row bigger than statement_size for tools.t_serverinfo    -r, --rows                  分裂成很多行块表    -c, --compress              压缩输出文件    -e, --build-empty-files     即使表没有数据,还是产生一个空文件    -x, --regex                 正则表达式: 'db.table'    -i, --ignore-engines        忽略的存储引擎,用逗号分隔    -m, --no-schemas            不导出表结构    -k, --no-locks              不执行共享读锁 警告:这将导致不一致的备份    -l, --long-query-guard      设置长查询时间,默认60秒,超过该时间则会报错:There are queries in PROCESSLIST running longer than 60s, aborting dump    --kill-long-queries         kill掉长时间执行的查询    -b, --binlogs               导出binlog    -D, --daemon                启用守护进程模式    -I, --snapshot-interval     dump快照间隔时间,默认60s,需要在daemon模式下    -L, --logfile               日志文件    -h, --host                  The host to connect to    -u, --user                  Username with privileges to run the dump    -p, --password              User password    -P, --port                  TCP/IP port to connect to    -S, --socket                UNIX domain socket file to use for connection    -t, --threads               使用的线程数,默认4    -C, --compress-protocol     在mysql连接上使用压缩协议    -V, --version               Show the program version and exit    -v, --verbose               更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2 

3、原理解析

1)该工具在--daemo模式下支持以守护进行形式启动,默认每60s进行一次备份。间隔时间由--snapshot-interval控制。

2)首先会创建一个MySQL服务的连接

3)然后在MySQL上执行show processlist,根据参数long-query-guard和kill-long-queries决定退出或杀掉长查询;

4)根据是否有--lock-all-tables,进行锁表:LOCK TABLE tn READ或者FLUSH TABLES WITH READ LOCK;然后执行START TRANSACTION;

5)创建4个备份表的子线程

6)创建1个work thread后,g_async_queue_pop(conf.ready);此时conf.ready为空需要sleep等待。

7)work线程执行:连接mysql;设置隔离级别RR;start transaction;g_async_queue_push(conf->ready,GINT_TO_POINTER(1));然后main函数的g_async_queue_pop挂住的地方可以唤醒了,继续创建线程或者向下走。

8)work线程接着执行:进入死循环,从队列里pop出任务job=(struct job *)g_async_queue_pop(conf->queue);,根据任务类型进行dump。这里的并行是根据表并行的。先备份非事务表,然后备份innodb表

9)最后等所有work线程完成非事务表备份后唤醒g_async_queue_pop(conf.unlock_tables);,执行UNLOCK TABLES解锁

10)事务结束

备份 线程 事务 支持 文件 时间 工具 模式 开发 查询 输出 一致 任务 参数 形式 是由 进程 逗号 会报 原理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全运维系统网站 嘉定区机电软件开发概念设计 电力网络安全自查总结报告 人大数据库技术 数据库dba衰落 手机搬家连接不到服务器怎么回事 服务器永久保留日志如何设计架构 手机网络安全云检测怎么关闭 网络安全与国家安全 网安凌云安全服务器虚拟系统 杭州外协加工软件开发费用 贵池区口碑好软件开发服务设备 徐州互联网软件开发诚信服务 网络安全绘画作品一二年级 石器时代单机服务器修改 区域矿产数据库 安装UG12已经有许可证服务器 互联网科技创新对企业经济的影响 梦幻175服务器推荐 购买sql数据库空间哪家 网络技术工作具体干什么的 戴尔r420服务器内存插法 网络安全竞赛直播 中南民族大学wifi服务器地址 开始文件管理系统服务器版 网络安全问题学生评语 软件开发岗位综合实践 施耐德招聘境外数据库 服务器有什么安全防护 服务器主机未安装防火墙
0