美文网首页
php连接mysql过程

php连接mysql过程

作者: traveller227 | 来源:发表于2019-01-12 08:19 被阅读9次

目的:
了解php连接mysql时,具体过程

方法:
php-cli连接mysql
tcpdump抓包,wireshark分析

环境:
ubuntu18.04,php7.3, mysql5.7

脚本:

$db = new mysqli("127.0.0.1",'root','password','database');
if($db->connect_errno) {
    exit("failed,errno:".$db->connect_errno."||".$db->connect_error);
}

$data = $db->query("select * from demo");
foreach($data as $item) {
    var_dump($item);
}
$db->close();

抓包:
sudo tcpdump -i 2 -w db.log

wireshark过滤网络包:


image.png

分析:
分节No207~209,tcp协议的三次握手
No210,连接成功,mysql server发送一个greeting packet
No211,对No210的ACK,表示收到了No210 Packet
No212,client(php-cli)请求登录,packet信息包括账号、密码(加密后)、库名
No213,对No212的ACK
No214,mysql server 的response packet,表示client的账号、密码验证成功
No215,client发送查询命令
No216,mysql server返回查询结果
No217,client主动关闭连接(mysql_close)
No218~220,tcp连接断开,四次挥手(No219,server端的FIN和ACK包合并了)

对于mysql而言,
No210~No214,称为连接阶段;
No215~No217,称为命令阶段。

总结
通过tcpdump抓包配合wireshark,可以简单分析mysql协议的交互过程。
另外,数据包中包含了很多信息(文章末尾的两个链接可供参考)

Refer:
mysql协议
官网:https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_PROTOCOL.html
http://heguangyu5.github.io/mysql/1-protocol.html
https://www.cnblogs.com/davygeek/p/5647175.html

相关文章

网友评论

      本文标题:php连接mysql过程

      本文链接:https://www.haomeiwen.com/subject/txtfdqtx.html