找出真凶:谁在连接我的数据库?
qunyingliu
2014.10.31
背景:
数据库迁移需要梳理数据库认证信息,业务的数据库配置信息比较松散,已知的已经修改但是总有一些落单的。
怎么找出真凶?
1.登录数据库服务器查看连接数据库的网络链接:
ssh
netstat -ntp|grep “数据库IP:数据库端口”
查看数据库服务器上已经建立的连接,如下图所示:
tcp0010.1.1.85:330610.2.1.33:3610ESTABLISHED13025/mysqld
针对不能查看机器网络连接的,可通过mysql—->show processlist来确定来源IP与端口号:
mysql>showprocesslist;+———–+————+———————-+——+————-+———-+—————————————————————-+——————————————————————————————————+|Id|User|Host|db|Command|Time|State|Info|+———–+————+———————-+——+————-+———-+—————————————————————-+——————————————————————————————————+|204883537|hehe|10.2.1.33:3610|NULL|select*froma.table|13428752|sleep|NULL
2.登录与数据库建立连接的业务服务器,如10.2.1.33
通过网络连接状态查看:
tcp0010.2.1.33:361010.1.1.85:3306ESTABLISHED709/Datasend
一般情况下,通过网络连接状况就可以看到对应的进程ID与进程名,如PID为709,进程名为Datasend(随意起的一个名字)。
但是有的时候也会碰到以下这种情况:
tcp0010.2.1.33:361010.1.1.85:3306ESTABLISHED—–
进程ID与进程名的地方被一个横线或者一组横线替代,那么该怎么办呢?
3.通过lsof -i:端口号,如lsof -i:3610 可以查看业务机器上该端口号对应的进程ID和进程名。
myhost#lsof-i:3610COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEDatasend709root3uIPv416007698330t0TCP10.2.1.33:3610->mydbhost:mysql(ESTABLISHED)
PID和COMMAND都找到了,如果还不清楚是哪个进程,通过ll /proc/${PID}/exe
就可以找到对应的程序了。
这下子,对应的机器IP,端口号,进程,程序地址,都找到了,可以找事主聊聊天喝喝茶了。
本文出自 “运维者说:从菜鸟到老鸟” 博客,,请务必保留此出处
无论何时何地,只要创造就有收获,只有不息的奋进,才能证明生命的存在。