mysql sock文件存储了什么信息
mysql.sock到底存储了什么东西?
mysql.sock
作为mysql
的套接字一般用于本地连接数据库,在速度上优于TCP/IP
连接。一般放置在/tmp/mysql.sock
目录下,我们先查看下它的内容:
1 2 | [root@ tmp] # ll -i | grep mysql 85 srwxrwxrwx 1 mysql mysql 0 Apr 18 15:03 mysql.sock |
可以看到它的内容大小为0,即没有存储任何的内容,此时我们通过mysql -uroot -p
来访问(即默认的-h localhost
)可以访问成功数据库。
但当我们新建一个相似的mysql.sock
的时候,却无法替代原有的空文件:
1 2 3 4 5 6 7 8 9 | mv mysql.sock mysql.sock.bak # 创建新的mysql socket文件 mksock mysql.sock chown mysql:mysql mysql.sock chmod 777 mysql.sock # 展示对比两个mysql.sock [root@ tmp] # ll -i | grep mysql 85 srwxrwxrwx 1 mysql mysql 0 Apr 18 15:03 mysql.sock.bak 37 srwxrwxrwx 1 mysql mysql 0 Aug 20 20:35 mysql.sock |
再次访问本地数据库:
?1 2 | [root@ tmp] # mysql -uroot -p -hlocalhost ERROR 2002 (HY000): Can 't connect to local MySQL server through socket ' /var/lib/mysql/mysql .sock' (2) |
两者内容除了inode
号不一样外,完全一样,但却不能使用mysql
访问本地数据库了,新的socket
为什么不能代替原有的socket
文件,这个文件到底存储了什么,又是怎么跟数据库互相认证的?
思考良久,有了自己的解释,但由于没有看linux对socket的具体设计和实现代码,不一定正确,详情查看:
http://www.tuohang.net/article/234774.html
想要看具体实现的可以参考linux源码:
https://man7.org/linux/man-pages/man7/socket.7.html
以上就是mysql sock文件存储了什么信息的详细内容,更多关于mysql sock文件存储信息的资料请关注服务器之家其它相关文章!
原文链接:https://segmentfault.com/q/1010000016082235
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。