处理一个关于binlog增量恢复很慢的问题
来源:互联网 发布:国内域名国外空间 编辑:程序博客网 时间:2024/05/01 00:53
今天帮网友处理了一个关于binlog增量恢复很慢的问题。
问题描述:
网友是先通过xtrabackup将mysql全量恢复到测试环境中,然后再增量恢复binlog,具体操作为:用mysqlbinlog -v -v --base64-output=DECODE-ROWS解析binlog到一个sql文件中,然后再将sql文件应用到mysql中。在binlog增量恢复时非常慢,基于2分钟才生成1M的binlog。
问题分析:
1.我先要网友检查并提供服务器硬件资源使用情况,特别是IO,网友反应硬件资源很闲,没有任何负载,IO情况如下:
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
vda 0.00 0.00 1.00 0.00 0.01 0.00 16.00 0.01 8.00 8.00 0.80
vdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
vdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
上面说明IO很闲。
2.请网友用show processlist提供mysql进程情况
网码提供如下:
(root@localhost) [(none)]>show processlist;
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+-------+------------------+
| 1 | root | localhost | test | Sleep | 3348 | | NULL |
| 2 | root | localhost | NULL | Query | 0 | init | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
上面也没有发现明显异常.
3.请网友查看解析出来的binlog中是些什么操作
网友提供如下:
BINLOG '
q4ZxVxMBAAAAigAAABFSFQAAACiYBQAAAAEACndqZGJjZW50ZXIAE3dqX3RibF9tZW1iZXJfY2Fj
aGUAHggPAwMDDw8PCg8PDxIPDw/29vb29gMSEgESEvYBEiZIADwAlgDAADwAPADAAACWADwAPAAU
AhQCFAIUAhQCAAAAABQCAGARwDgoHXRQ
q4ZxVx8BAAAA6gEAAPtTFQAAACiYBQAAAAEAAgAe//////////8AAADAFzA0AAAAAAAA1gAAANcP
AAAFAAAABDgxMDgIMTAwMDAyMDIG6Z2e5rSyCosPA+eUtwnouqvku73or4ESNDUwMjIxMTk4OTA4
MTAyOTMymZP9XGggZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UG5ZCv55SoCzEzNzY4
NTc1NzY2gAAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAAAgAAAAAAABrAADgAAAJmU
oh4ImbR8AAAAmZjUpAeZmbhA7oAAAAAAAAAAAACZmbhA7gAAAMAXMDQAAAAAAADWAAAA1w8AAAUA
AAAEODEwOAgxMDAwMDIwMgbpnZ7mtLIKiw8D55S3Cei6q+S7veivgRI0NTAyMjExOTg5MDgxMDI5
MzKZk/1caCBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZQblkK/nlKgLMTM3Njg1NzU3
NjaAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAGsAAOAAAAmZSiHgiZ
tHwAAACZmNSkB5mZuED4gAAAAAAAAAAAAJmZuED4yYjykg==
5 QUERY COMMIT
上面应该没有使用--base64-output=DECODE-ROWS转换显示内容,表面上看是没有任何有用的信息,但从5 QUERY COMMIT中的commit字眼提醒了我。
4.请网友提供查看一下sync_binlog和innodb_flush_log_at_trx_commit两个参数的设置是否都为1。
网友很快回复参数有设置为1,同时有跟他确认了机器为虚拟机,现在问题的原因应该就是这两个参数的设置,因为我曾经同样在测试环境的虚拟机上测试过这两个参数在不同值下的性能比较。详见blog:http://blog.csdn.net/zengxuewen2045/article/details/51476186。
期间我同时也怀疑恢复操作可能有大量的insert,而且是每插入一行,就commit一次,也跟网友说过:用show global status like 'Handler_commit';查看一下commit次数,间隔一段时间查看一次,确认值是否在不断增加,不过这些数据没有提供,不影响这个问题的处理。
问题解决:
当发现上面参数设置为1后,将参数全都改为默认值(都改为0性能更好,反正测试嘛,安全不是重要的),就重新来一次全量恢复,再进行一次binlog增量恢复,这次速度很快。
下面是网友在QQ上的回复:
午后单车(175686647) 16:52:06
果然快了非常多
午后单车(175686647) 17:00:03
@代言人 多谢哈, 看来还是缺乏经验
要多测试
这个坑困扰我2天了
代言人(171057655) 17:02:48
不会吧
呵呵
- 处理一个关于binlog增量恢复很慢的问题
- 关于mysql binlog过期失效的问题
- 一个重大轮子: 基于mysql数据库binlog的增量订阅&消费
- 一个关于字符集处理的问题
- 一个关于LVM_DELETEITEM 的问题处理
- mysql对binlog的处理
- mysql对binlog的处理
- MySQL数据库备份还原(基于binlog的增量备份)
- mysql备份还原-基于binlog的增量备份还原
- 基于MYSQL的Binlog增量数据同步服务
- MySQL数据库备份还原(基于binlog的增量备份)
- MySQL数据库备份还原(基于binlog的增量备份)
- MySQL数据库备份还原(基于binlog的增量备份)
- 利用mysql的binlog恢复数据
- 利用mysql的binlog恢复数据
- 利用mysql的binlog恢复数据
- 利用mysql的binlog恢复数据
- 利用mysql的binlog恢复数据
- angularjs1.0使用总结
- CRF as RNN的原理及Caffe实现
- 详解MySql优化步骤
- ActionListener的三种实现方法
- Oracle切换UNDO空间数据库后存储过程无法正常编译
- 处理一个关于binlog增量恢复很慢的问题
- valgrind 简介
- 文字渐渐显示效果
- redis总结
- 数据结构(王道)【线性表】【算法1.3】
- c++ template 实现一个简单的"栈"
- apache、php、mysql和phpmyadmin安装及环境配置
- 理解Python中的装饰器
- service