前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >tcpdump在mySQL数据库中的应用实践

tcpdump在mySQL数据库中的应用实践

作者头像
MySQL数据库技术栈
发布于 2020-08-05 09:04:08
发布于 2020-08-05 09:04:08
5.2K0
举报

一、概述

tcpdump在我们平时运维中充当了很重要的角色,对复杂问题的排查、分析起到了至关重要的作用,确实为运维中的一大利器。

用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。本文主要从两个方面介绍tcpdump,首先是介绍下tcpdump的使用方式,然后介绍下tcpdump在mySQL数据库运维过程中具体实践,如果DBA能熟练的使用tcpdump,在运维工作中一定如虎添翼

二、参数介绍

命令格式:

1.-c:指定要抓取的包数量,抓取X个包后就停止。

2.-i:interface:指定tcpdump需要监听的窗口,默认会抓取第一个网络接口。指定为any代表抓取所有网卡上的包。

3.-P:指定要抓取的包是流入还是流出的包,具体值”in”、”out”和”inout”,默认为”inout”。

4.-s:设置显示前多少个字节的包内容(snaplength)。设置为0代表显示完整的包内容。

5.-v,-vv,-vvv:详细!更详细!再详细些!冗余输出包的信息。

6.-w:结果文件输出的位置。结果文件是以tcpdump的格式存储,可以用Wireshark工具解析。

expression表达式

一个基本的表达式单元格式为:”proto dir type”

类型type

host,net,port,portrange

例如:host 192.168.1.1,net 128.2,port 20

目标dir

src,dst,src or dst,src and dst

协议proto

tcp,udp,icmp,若未给定协议类型,则匹配所有可能的类型。

三、使用示例

1. 截取所有192.168.94.128的主机收到和发出的所有数据包。

#tcpdump host 192.168.94.128

2. 监听指定主机192.168.94.128和指定网卡上的数据包

#tcpdump host 192.168.94.128 -i eth0

3. 监听指定网卡、端口的数据包

#tcpdump –i eth0 port 8080

4. 监听所有发送到192.168.94.128的数据包

#tcpdump -i eth0 dst host 192.168.94.128

5. 监听192.168.94.128和192.168.94.129或者192.168.94.130间的通讯包

# tcpdump -i eth0 host 192.168.94.128 and \(192.168.94.129 or 192.168.94.130\)

6. 监听本机3306端口的包,抓取完整包,并输出到tmp下

#tcpdump -s0 -vv port 3306 -w /tmp/`hostname`.pcap

四、在MySQL中的应用

案例一

第一个想写的是mySQL的建链和断链过程,本人在实际运维过程中遇到过由于网络原因导致的建链异常的情况,当你怀疑网络有问题时可以通过tcpdump进行分析。那我们先来一起看下MySQL的的三次握手和四次挥手吧(关于TCP协议中的三次握手和四次挥手的原理需要自行查询)。

首先我们在MySQL服务器上执行监听命令: tcpdump -i eth0 -s0 port 3306 -w 1513.pcap

可以看到我们一共抓了44个包,我们将pcap文件下载到电脑后,用Wireshark进行分析。

从图上可以看出192.168.94.1是客户端,192.168.94.128是MySQL服务端,第一个包是客户端向服务端发送了一个SYN包(Sequence 1803591875)请求建链,第二个包是服务端对客户端的请求的确认,发送了ACK包(Sequence 1803591876),同时也给客户端发送了一个SYN包(Sequence 93871103),第三个包是客户端收到服务端的SYN+ACK包后,对服务端进行了回应,发送了ACK包(Sequence 93871104),至此客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成了三次握手。完成三次握手,客户端与服务器开始传送数据。

如果客户端发送SYN包之后,一直收不到服务端的ACK包,这时候就要排查下MySQL服务器以及中间网络是否正常了。

接下来我们再看下MySQL的断链过程。首先是客户端发送了FIN包(Sequence 1803593470),服务端收到后对客户端的请求进行确认,发送给客户端了一个ACK包(Sequence 1803593471),此时客户端只能接收数据而不能发送数据了。紧接着服务端向客户端发送了一个FIN包(Sequence 93871103),客户端收到FIN包后发ACK进行确认,至此四次挥手完成,链接关闭。

如果你的应用客户端有大量CLOSE_WAIT状态的链接,很有可能就是MySQL服务异常重启了。

案例二

在实际的运维过程中,有时业务反应慢,应用端也能看到SQL执行的时间比较长,但是数据库的慢日志中并没有抓到慢SQL。首先我们能想到的原因可能是SQL执行虽然慢但是还没有达到long_query_time定义的基线,或者是数据库执行很快,但是中间的网络出现了异常,亦或者就是数据库执行SQL的时间慢。这种问题该如何定位呢?这时候仅仅说数据库没有问题是没有说服力的,必须拿出真实数据来自证其说。这时候就可以通过tcpdump来定位问题了。

1. 在数据库上进行抓包

tcpdump -i eth0 -s0 port 3306 -w SlowSql.pcap

应用程序抓到了一个慢sql,慢sql的执行时间大约5.6秒,执行的sql为:select count(1) from table_test。执行完sql后停止抓包

2. 打开pcap包

3. 跟踪TCP流

搜索关键字table_test,找到一条记录,点击Follow TCP Stream,跟踪TCP流

4. 分析TCP流

我们详细分析下这几条TCP流

第一条记录:

这条记录是应用向MySQL服务器发出sql请求,发送时间是09:52:15.488165,右下角可以看到执行的sql:select count(1) from table_test。

第二条记录:

这条记录是数据库收到sql后,给客户端发送的确认ACK,表明已经收到了sql,发送的时间是09:52:15.530525。

第二条的时间减去第一条的时间为42.360ms。即MySQL服务器接收到应用的请求用了约42ms。

第三条记录:

第三条记录是数据库执行完sql把结果返回给应用,右下角可以看到查询结果是2439392。返回的时间是09:52:21.080593。第三条减去第二条的时间是5.55s,这就是数据库执行sql的时间。

第四条记录:

第四条记录是应用给数据库服务器发送了ACK(Sequence 2479403991),并发起了另一笔请求,这条记录表明应用已经收到数据库返回的查询结果了。

第四条发送时间是09:52:21.082586,减去第三条的时间为1.99ms,这个时间是数据库返回结果到应用收到的时间。

通过整个TCP流的分析跟踪,基本可以判断出整个sql执行过程中慢在了数据库端,耗时约5.6s,整个过程中也没有丢包重传,也没有其他耗时的的情况发生,说明网络是正常的。

通过以上两个案例可以看出tcpdump在DBA实际工作中的重要性,不仅能诊断网络丢包、网络延迟的问题,还能协助DBA进行一些复杂数据库问题的诊断。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL数据库技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【Python基础】适合小白的Python 简易入门指南(附代码)
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
黄博的机器学习圈子
2020/12/25
1.3K0
Python入门到放弃 | 超简单 跟我学(九)
Python 诞生之初就被誉为最容易上手的编程语言。进入火热的 AI 人工智能时代后,它也逐渐取代 Java,成为编程界的头牌语言。
剑指工控
2021/11/09
6520
Python语法
您还可以通过在花括号 {carname} 中输入名称来使用命名索引,但是在传递参数值 txt.format(carname = “Ford”) 时,必须使用名称:
码客说
2021/11/17
3.2K0
一句python,一句R︱python中的字符串操作、中文乱码、NaN情况(split、zip...)
先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python。最好就是一句python,对应写一句R。
悟乙己
2019/05/26
3.2K0
笨办法学 Python3 第五版(预览)(三)
这是你将要输入的下一个 Python 脚本,它向你介绍了if语句。输入这个代码,确保它能够完美运行,然后我们将看看你的练习是否有所收获。
ApacheCN_飞龙
2024/03/03
1650
笨办法学 Python3 第五版(预览)(三)
python的学习和使用
1、python的官网:https://www.python.org/ Python简介: 1、Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 2、Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。   a、Python是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。   b、Python是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你
别先生
2018/07/31
9180
【编写环境一】遇到常见python函数处理方式
*Dict()**可用字典(dictionary)的形式储存空间特征,因此可以描述更多特性并用于构建更为复杂的空间
汀丶人工智能
2022/12/21
4670
这些python3的小知识点你都知道吗?
在 Python 中,else 语句不仅能跟 if 语句搭,构成“要么怎样,要么不怎样”的语境;Ta 还能跟循环语句(for 语句或者 while 语句),构成“干完了能怎样,干不完就别想怎样”的语境;其实 else 语句还能够跟我们刚刚讲的异常处理进行搭配,构成“没有问题,那就干吧”的语境。
程序员小新
2021/12/17
6510
这些python3的小知识点你都知道吗?
优雅编写Python3的62个小贴士!
▍42、创建一个迭代器,它从iterable中过滤元素,只返回谓词为False的元素
AI科技大本营
2019/08/01
7800
优雅编写Python3的62个小贴士!
【Python | 入门】 从输出打印到面对对象(五分钟速通Python)
python的学习还是要多以练习为主,想要练习python的同学,推荐可以去牛客网看看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程+刷题+面经+求职+讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费
计算机魔术师
2022/08/23
4690
【Python | 入门】 从输出打印到面对对象(五分钟速通Python)
从零开始学习Python基础语法:打开编程大门的钥匙
https://cloud.tencent.com/developer/article/2465647?shareByChannel=link
忆愿
2024/11/26
1560
从零开始学习Python基础语法:打开编程大门的钥匙
这些优质Python项目已分成初、中、高级,你想学习哪个(附代码)
导读:本文介绍了三种不同的阶段去开发Python项目,旨在提供适合各种难度层次Python项目。
IT阅读排行榜
2019/05/16
1.2K0
这些优质Python项目已分成初、中、高级,你想学习哪个(附代码)
生信算法 | 矩阵分解除了NMF,也可以试试这个 NatGenet 新发的 GBCD 算法
生信菜鸟团
2025/02/03
1200
生信算法 | 矩阵分解除了NMF,也可以试试这个 NatGenet 新发的 GBCD 算法
Python 语法规则(语法、注释、变量、数据类型、数字、字符、布尔、运算符)
参考链接: Python成员资格和身份运算符 | in, not in, is, is not
用户7886150
2020/11/27
9680
Python课程基础总结概括梳理【pyhton笔记】
Python3 手册学习:系统化全面化 视频学习:实用性高、学到了经验、用途 刷题平台:结合学习,事半功倍 1、Python可以同时为多个变量赋值,如a, b = 1, 2。 反斜杠()可以作为续行符 python库是可以其它语言编写,非常高效 python自身运行效率低于c 老师提供的学习网站http://sdlg.alphacoding.cn/course/292/chapters #格式化输出 a = 18 b = 12 print(f'今年{a}岁{b+1}')#这个更高效 #今年18岁13
来杯Sherry
2023/05/25
5020
Python(二) 序列
常用的序列结构:列表、元组、字符串、字典、range、zip、enumerate 等
赤蓝紫
2023/01/01
1.8K0
Python快速学习第四天
第四天: 条件 、循环和其他语句 1、    print 使用逗号输出 - 打印多个表达式也是可行的,但要用逗号隔开 >>> print 'tanggao ',20 tanggao  20 >>> 1,2,3 (1, 2, 3) >>> print 1,2,3 1 2 3 >>> print(1,2,3) (1, 2, 3) 注意:python3.0以后,print不再是语句,而是函数,函数要加上括号 2、   把某件事作为另一件事导入 importsomemodule fromsomemodule imp
汤高
2018/01/11
8110
Python快速学习第四天
Python基础知识总结(期末复习精简版)「建议收藏」
本文针对《Python语言程序设计基础 (第2版)》——嵩天 礼欣 黄天羽,此书进行简单知识总结。
全栈程序员站长
2022/09/06
1.9K0
Python基础知识总结(期末复习精简版)「建议收藏」
你好,这30个Python常见错误都踩过吗!
在这篇文章中,我将总结新老Python程序员常犯的一些错误,以帮助你们在自己的工作避免犯同样或类似错误。
1480
2019/08/05
5960
【python篇】——python基础语法一篇就能明白,快速理解
整数类型 (int):整数类型用于表示没有小数部分的数值,正负均可。 Python 中的整数不受大小限制,可以表示任意大的数
用户11286421
2024/09/23
1220
【python篇】——python基础语法一篇就能明白,快速理解
推荐阅读
相关推荐
【Python基础】适合小白的Python 简易入门指南(附代码)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文