<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在觀察MySQL
本地連線的時候,發現對mysql.sock
是個啥我不明白,於是我提出了一個問題:mysql.sock到底存了什麼資訊?
根據多方查資料和自我思考,我有了自己的一些認識和結論,但結論並不一定正確,歡迎大家指教。
連線MySQL
的操作實際上是啟動一個連線程序和MySQL
資料庫範例進行通訊,本質上屬於程序間通訊,而程序通訊的方式有管道、命名管道、命名字、TCP/IP
通訊端、UNIX
通訊端。MySQL
資料庫提供的方式有3種:
TCP/IP
通訊端方式Windows
平臺獨有)UNIX
通訊端(UNIX
平臺獨有)TCP/IP
通訊端方式是MySQL
資料庫在任何平臺都提供的連線方式,一般用於使用者端和伺服器端不在同一臺伺服器上,基於網路的遠端連線請求。
筆者使用的是UNIX
伺服器,所以不瞭解Windows
相關的內容,在使用UNIX
域通訊端時,一般用於使用者端和伺服器端在同一臺伺服器上的情況,而該通訊端並不是一個網路協定,只是用於同機器連線通訊的載體。
我們可以在組態檔my.cnf
中指定通訊端檔案的路徑:
[mysqld] socket = /tmp/mysql.sock
也可以在啟動時指定socket
檔案的路徑:
# 以下兩種均可 ./mysqld_safe --socket=/tmp/mysql.sock ./mysqld_safe -S /tmp/mysql.sock
在啟動MySQL
之後我們可以查詢socket
檔案的路徑:
mysql> show variables like 'socket'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | socket | /tmp/mysql.sock | +---------------+-----------------+ 1 row in set (0.00 sec)
這個通訊端檔案在我們啟動MySQL
後會自動在我們指定的路徑被建立:
[work@ work]$ ll /tmp | grep mysql.sock srwxrwxrwx 1 mysql mysql 0 Aug 21 20:49 mysql.sock
可以看到該檔案被剛剛建立,並且檔案型別's'
代表socket
通訊端型別。同時0
代表該檔案內容為空。
當我們使用localhost
(mysql
命令 -h
引數的預設值)連線本地資料庫時,因為無法使用TCP/IP
協定監聽埠的請求和資料,我們需要使用該socket
檔案來進行你啟動的連線程序和MySQL
範例程序的程序間通訊,即通訊協定的載體。如果我們刪除了該檔案,當你再次連線本地資料庫時會報錯:
[root@ work]# mysql -uroot -p ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
此時,我們新建一個socket
檔案,並且修改許可權和擁有者,同時再次發起資料庫連線是依然會報錯,不過是不一樣的錯誤:
# 新建的為mysql.sock,原有的改名為mysql.sock.bak 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 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
可以看出除了inode
不同之外其他的資訊全部一樣,而且內容都是空的,為什麼就不能使用呢?
以下原因為個人推測,實際的原因需要看linux對socket檔案的實現,每個socket肯定有屬性的不同。
原因是由於mysql.sock
是每一次MySQL
啟動之後生成的,該socket
檔案會監聽建立它的程序,此處即本機的mysqld
程序,用於其與MySQL
範例程序通訊,如果你關閉了mysqld
程序,該檔案會被自動刪除。而你新建的socket
檔案只是虛有其表,並沒有監聽任何的IP
和埠以及程序PID
,所以自然不能與MySQL
範例通訊了。所以如果你刪掉了這個檔案,只能殺死mysqld
程序並重啟,因為此時你給MySQL
範例傳送關閉訊號的通道也沒有了(當然此時你可以走TCP/IP
通訊的方法)。
為了證明我的猜測,做了一些測試:
mysql.sock
,殺死程序並重啟MySQL
,複用該socket
,依然無法通訊,證明非僅僅簡單監聽本地埠。tail -f mysql.sock
,由於socket
只能通過程序間通訊使用,所以不能通過open()
方法開啟,報錯無法開啟該檔案,因此無法觀察到是怎麼通過該socket
進行程序間通訊的。ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
問題根源:mysql.sock
檔案找不到了
問題場景:一般為該檔案被誤刪,或者PHP
等後端指定的該socket
檔案地址路徑不對
解決方案:
1 . 重啟
ps -auxf | grep mysql kill -SIGKILL pid(找到指定的mysql程序pid) ./mysqld_safe
2 . 使用locate mysql.sock
定位,同時重啟:./mysqld_safe -S /path/to/mysql.sock
3 . 在php
等組態檔(如php.ini
)中修改指定該socket
的設定地址
pdo_mysql.default_socket = /path/to/mysql.sock mysql.default_socket = /path/to/mysql.sock mysqli.default_socket = /path/to/mysql.sock
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
問題根源:mysql.sock
檔案無法通訊
問題場景:一般為該mysql.sock
檔案內容不符合通訊的需要
解決方案:跟上面的(2)
錯誤本質上一樣,解決方案也一樣
參考資料
MySQL技術內幕 InnoDB儲存引擎第2版 1.5節 連線MySQL:
https://www.jb51.net/books/598536.html
mysql.sock檔案詳解:https://www.jb51.net/article/93285.htm
以上就是mysql sock 檔案解析及作用的詳細內容,更多關於mysql sock 檔案解析的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45