mysql.sock到底存储了什么东西?
mysql.sock
作为
mysql
的套接字一般用于本地连接数据库,在速度上优于
TCP/IP
连接。一般放置在
/tmp/mysql.sock
目录下,我们先查看下它的内容:
[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
的时候,却无法替代原有的空文件:
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
再次访问本地数据库:
[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
文件,这个文件到底存储了什么,又是怎么跟数据库互相认证的?