mysql sock文件存儲瞭什麼信息

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文件,這個文件到底存儲瞭什麼,又是怎麼跟數據庫互相認證的?

思考良久,有瞭自己的解釋,但由於沒有看linux對socket的具體設計和實現代碼,不一定正確,詳情查看:

https://www.jb51.net/article/255511.htm

想要看具體實現的可以參考linux源碼:

https://man7.org/linux/man-pages/man7/socket.7.html

以上就是mysql sock文件存儲瞭什麼信息的詳細內容,更多關於mysql sock文件存儲信息的資料請關註WalkonNet其它相關文章!

推薦閱讀: