欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql?sock?文件解析及作用講解

 更新時間:2022年07月15日 09:22:58   作者:趙帥強  
這篇文章主要為大家介紹了mysql.sock?文件解析及作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

在觀察MySQL本地連接的時候,發(fā)現對mysql.sock是個啥我不明白,于是我提出了一個問題:mysql.sock到底存了什么信息?

根據多方查資料和自我思考,我有了自己的一些認識和結論,但結論并不一定正確,歡迎大家指教。

連接MySQL

連接MySQL的操作實際上是啟動一個連接進程和MySQL數據庫實例進行通信,本質上屬于進程間通信,而進程通信的方式有管道、命名管道、命名字、TCP/IP套接字、UNIX套接字。MySQL數據庫提供的方式有3種:

  • TCP/IP套接字方式
  • 命名管道和共享內存(Windows平臺獨有)
  • UNIX套接字(UNIX平臺獨有)

TCP/IP套接字方式是MySQL數據庫在任何平臺都提供的連接方式,一般用于客戶端和服務端不在同一臺服務器上,基于網絡的遠程連接請求。

筆者使用的是UNIX服務器,所以不了解Windows相關的內容,在使用UNIX域套接字時,一般用于客戶端和服務端在同一臺服務器上的情況,而該套接字并不是一個網絡協(xié)議,只是用于同機器連接通訊的載體。

mysql.sock文件

我們可以在配置文件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.sock文件的作用

這個套接字文件在我們啟動MySQL后會自動在我們指定的路徑被創(chuàng)建:

[work@ work]$ ll /tmp | grep mysql.sock  
srwxrwxrwx 1 mysql          mysql                0 Aug 21 20:49 mysql.sock

可以看到該文件被剛剛創(chuàng)建,并且文件類型's'代表socket套接字類型。同時0代表該文件內容為空。

當我們使用localhostmysql命令 -h參數的缺省值)連接本地數據庫時,因為無法使用TCP/IP協(xié)議監(jiān)聽端口的請求和數據,我們需要使用該socket文件來進行你啟動的連接進程和MySQL實例進程的進程間通信,即通訊協(xié)議的載體。如果我們刪除了該文件,當你再次連接本地數據庫時會報錯:

[root@ work]# mysql -uroot -p
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

此時,我們新建一個socket文件,并且修改權限和擁有者,同時再次發(fā)起數據庫連接是依然會報錯,不過是不一樣的錯誤:

# 新建的為mysql.sock,原有的改名為mysql.sock.bak
mv mysql.sock mysql.sock.bak
# 創(chuàng)建新的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
# 再次發(fā)起連接
[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文件會監(jiān)聽創(chuàng)建它的進程,此處即本機的mysqld進程,用于其與MySQL實例進程通信,如果你關閉了mysqld進程,該文件會被自動刪除。而你新建的socket文件只是虛有其表,并沒有監(jiān)聽任何的IP和端口以及進程PID,所以自然不能與MySQL實例通信了。所以如果你刪掉了這個文件,只能殺死mysqld進程并重啟,因為此時你給MySQL實例發(fā)送關閉信號的通道也沒有了(當然此時你可以走TCP/IP通信的方法)。

為了證明我的猜測,做了一些測試:

  • 保留mysql.sock,殺死進程并重啟MySQL,復用該socket,依然無法通信,證明非僅僅簡單監(jiān)聽本地端口。
  • tail -f mysql.sock,由于socket只能通過進程間通信使用,所以不能通過open()方法打開,報錯無法打開該文件,因此無法觀察到是怎么通過該socket進行進程間通信的。

數據庫運維:mysql.sock錯誤修復

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節(jié) 連接MySQL:

http://www.dbjr.com.cn/books/598536.html

mysql.sock文件詳解:http://www.dbjr.com.cn/article/93285.htm

以上就是mysql sock 文件解析及作用的詳細內容,更多關于mysql sock 文件解析的資料請關注腳本之家其它相關文章!

相關文章

  • windows下重啟mysql的方法

    windows下重啟mysql的方法

    這篇文章主要介紹了windows下重啟mysql的方法,需要的朋友可以參考下
    2014-12-12
  • MySQL 游標的定義與使用方式

    MySQL 游標的定義與使用方式

    這篇文章主要介紹了MySQL 游標的定義與使用方式,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2021-01-01
  • mysql5.5.28安裝教程 超詳細!

    mysql5.5.28安裝教程 超詳細!

    這篇文章主要為大家詳細介紹了mysql5.5.28安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • MYSQL IN 與 EXISTS 的優(yōu)化示例介紹

    MYSQL IN 與 EXISTS 的優(yōu)化示例介紹

    當B表的數據集必須小于A表的數據集時,用in優(yōu)于exists,當A表的數據集系小于B表的數據集時,用exists優(yōu)于in
    2014-08-08
  • 達夢數據庫獲取SQL實際執(zhí)行計劃方法詳細介紹

    達夢數據庫獲取SQL實際執(zhí)行計劃方法詳細介紹

    在達夢數據庫中,使用EXPLAIN語句可以查看sql的執(zhí)行計劃,但EXPLAIN只生成執(zhí)行計劃,并不會真正執(zhí)行SQL語句,因此產生的執(zhí)行計劃有可能不準。本章將帶領大家了解多種獲取SQL實際的執(zhí)行計劃的方法
    2022-10-10
  • windows server2014 安裝 Mysql Applying Security出錯的完美解決方法

    windows server2014 安裝 Mysql Applying Security出錯的完美解決方法

    這篇文章給大家介紹了windows server2014 安裝 Mysql Applying Security出錯的完美解決方法,造成這種問題的主要原因是因為安裝一遍之后沒有卸載干凈,要解決這個問題需要注意以下幾點,具體解決方法,大家參考下本文
    2017-07-07
  • 數據庫索引的知識點整理小結,你所需要了解的都在這兒了

    數據庫索引的知識點整理小結,你所需要了解的都在這兒了

    這篇文章主要介紹了數據庫索引的知識點整理小結,你所需要了解的都在這兒了,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • MYSQL 的10大經典優(yōu)化案例場景實戰(zhàn)

    MYSQL 的10大經典優(yōu)化案例場景實戰(zhàn)

    在應用開發(fā)的早期,數據量少,開發(fā)人員開發(fā)功能時更重視功能上的實現,隨著生產數據的增長,很多SQL語句開始暴露出性能問題,對生產的影響也越來越大,有時可能這些有問題的SQL就是整個系統(tǒng)性能的瓶頸。本文我們就聊聊MYSQL的優(yōu)化
    2021-09-09
  • Mysql區(qū)間分組查詢的實現方式

    Mysql區(qū)間分組查詢的實現方式

    這篇文章主要介紹了Mysql區(qū)間分組查詢的實現方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Mysql的timestamp時間戳詳解及2038問題

    Mysql的timestamp時間戳詳解及2038問題

    本文主要介紹了Mysql的timestamp時間戳詳解及2038問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04

最新評論