博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL5.5 Semi-sync备库响应协议分析
阅读量:6966 次
发布时间:2019-06-27

本文共 2026 字,大约阅读时间需要 6 分钟。

这又是一篇介绍Semi-sync的文章。

Semi-sync主库在一定时间内(可配置的超时时间),如果没有收到备库的响应,则会超时从而降级为普通的replication复制。如果超时发生,有时需要查清什么原因导致备库没有及时响应,一方面可以从备库的日志着手,另一方面,如果需要更细致的信息则需要从备库端的网络包查找原因。这里介绍如何分析一个Semi-sync备库响应主库的数据包。

概述:先使用tcpdump抓取正确(主要是src和dst都正确)的数据包;然后借助wireshark玻璃TCP/IP等层的头信息,仅保留发送的MySQL数据包;再分析MySQL Semi-sync Slave响应的协议。

1. tcpdump原始数据包

通过如下tcpdump抓取主机的网络包:

nohup tcpdump -n -nn -tttt -i bond0 -s 65535 'port 3306 and ((dst host master.host and src host slave.host and len < 100) or (dst host slave.host and src host master.host))' -w tcpdump.ret -C 50 &

参数简单说明:

 
-n  表示ip不要转换为主机名-nn表示端口号,不要转为为服务名(例如3306会被转换为mysql)-tttt 打印出完成的格式化的时间戳-C 50 表示抓取的结果放到文件中,文件大小不超过50MB
2. 使用wireshark找到对应的包

Semi-sync备库响应主库包,一般大小整个包大小约95字节。找到该网络包如下:

完整网络包内容:

0000  00 24 e8 57 76 5e 00 1d  70 82 ca c0 08 00 45 00   .$.Wv^.. p.....E.0010  00 51 a6 e2 40 00 3e 06  89 34 ac 13 46 44 ac 17   .Q..@.>. .4..FD..0020  6e 21 b3 35 0c ea b2 2d  26 2a da 46 3c df 80 18   n!.5...- &*.F<...0030  04 82 35 ef 00 00 01 01  08 0a 5a a2 7f cd 50 43   ..5..... ..Z...PC0040  c1 5b 19 00 00 00 ef 38  40 01 00 00 00 00 00 6d   .[.....8 @......m0050  79 73 71 6c 2d 62 69 6e  2e 30 30 31 35 31 36      ysql-bin .001516
3. MySQL数据包分析

剥去TCP/IP等层(使用wireshark就可以了),剩下MySQL 包如下:

0040        19 00 00 00 ef 38  40 01 00 00 00 00 00 6d   .[.....8 @......m0050  79 73 71 6c 2d 62 69 6e  2e 30 30 31 35 31 36      ysql-bin .001516

更具Semi-sync备库响应源码分析如下:

+============================+| packetlength      0 : 4    | 对应的:19 00 00 00 表示包数据长度为0x19=25字节+----------------------------+| magic_num         4 : 1    | 对应的:ef 这是一个kPacketMagicNum,表示这是一个Semi-sync slave响应+----------------------------+| binlog_pos        5 : 4    | 对应的:38  40 01 00 Binlog Pos:0x14038 = 81976+----------------------------+| event_length      9 : 20   | 对应的:00 00 00 00 6d 79 73 71 6c .... 31 36 (mysql-bin.001516)+----------------------------+

可以看出,改网络包,响应主库端的mysql-bin.001516中的偏移为81976的事务。

4. 最后【更新2011-10-19】

通过tcpdump的网络包,我们可以看到毫秒(甚至微秒)级别数据包的传送情况。依据此,通常可以精确分析出Semi-sync在何时、何处出现超时。然后,可以继续分析为何出现超时。

That's all... 这篇枯燥吧,哈哈 

转载地址:http://qidsl.baihongyu.com/

你可能感兴趣的文章
JVM学习笔记之四:分代垃圾回收
查看>>
杨辉三角(C++)
查看>>
C++ 类的大小计算
查看>>
Android 使用摄像头拍照
查看>>
Session与request的使用
查看>>
Node.js session 存储的几种方法
查看>>
mongodb的监控与性能优化
查看>>
使用ContentProvider
查看>>
《为了你我愿意热爱整个世界》
查看>>
闭包block多种应用方式
查看>>
前端框架
查看>>
iOS多线程:『NSOperation、NSOperationQueue』详尽总结
查看>>
在linux上配置JDK环境变量
查看>>
layer.load 支持文字内容
查看>>
java如何访问局域网共享文件
查看>>
Maven学习(六):灵活的构建
查看>>
淘宝姐姐不要过滤掉js我们还是好朋友
查看>>
Nutch爬取Ajax请求的动态网页
查看>>
SVN 使用细则
查看>>
7天学会spring cloud教程
查看>>