mysql实例与连接
1.一个mysql实例(进程)可以创建多个连接(线程)吗?
2.这里连接的概念有分物理上的连接和逻辑上的连接吗?它们和mysql实例是什么关系,是否一一对应关系?
3.php里的mysql_connect()是指创建什么连接?是物理连接吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
1.一个mysql实例(进程)可以创建多个连接(线程)吗?
2.这里连接的概念有分物理上的连接和逻辑上的连接吗?它们和mysql实例是什么关系,是否一一对应关系?
3.php里的mysql_connect()是指创建什么连接?是物理连接吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
我思考过这个问题,如果你真正明白了什么是一个TCP连接,你的问题你就明白了。
第一点需要明确的是:mysql的Server实例与mysql的Client间通信是走TCP连接
好,明白了这点,现在尝试搞明白什么才是一个真正的TCP连接?
用一个四元组就可以表示一个真正的连接。
[sourceIP,sourcePort,desIP,descPort]该四元组唯一的表示一条TCP连接。
当明白这个你就知道其实一个mysql客户端进程与mysql Server直接是可以有多条TCP连接的。因为mysql客户端可以开启多个端口来连接Server端。
再会上题主的问题。当在mysql client端调用connect()方法的时候,是客户端启动一个端口与mysql Server进行TCP握手连接,三次握手完毕后TCP连接建立完毕。
MySQL的最大连接数max_connections默认151,PHP与其建立的数据库连接都是真正的TCP连接,在PHP使用持久连接下执行下列操作可见:
比如下面就是就是PHP-FPM和MySQL建立持久连接的情况:
上面有5个PHP-FPM工作进程.注意,PHP-FPM的进程数pm.max_children不要多于MySQL的最大连接数max_connections(默认151).
PHP-FPM进程维护的持久连接空闲时间超过wait_timeout后,页面再次执行new mysqli()会返回"MySQL server has gone away"的Warning信息,并重新建立持久连接,可以用@抑制Warning信息的输出.