mysql.sock作为mysql的套接字一般用于本地连接数据库,在速度上优于TCP/IP连接。一般放置在/tmp/mysql.sock目录下,我们先查看下它的内容:
可以看到它的内容大小为0,即没有存储任何的内容,此时我们通过mysql -uroot -p来访问(即默认的-h localhost)可以访问成功数据库。
但当我们新建一个相似的mysql.sock的时候,却无法替代原有的空文件:
再次访问本地数据库:
两者内容除了inode号不一样外,完全一样,但却不能使用mysql访问本地数据库了,新的socket为什么不能代替原有的socket文件,这个文件到底存储了什么,又是怎么跟数据库互相认证的?
思考良久,有了自己的解释,但由于没有看linux对socket的具体设计和实现代码,不一定正确,详情查看:
#
想要看具体实现的可以参考linux源码:
https://man7.org/linux/man-pages/man7/socket.7.html
本篇文章到此结束,如果您有相关技术方面疑问可以联系我们技术人员远程解决,感谢大家支持本站!