最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

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

根據(jù)多方查資料和自我思考,我有了自己的一些認(rèn)識(shí)和結(jié)論,但結(jié)論并不一定正確,歡迎大家指教。

連接MySQL

連接MySQL的操作實(shí)際上是啟動(dòng)一個(gè)連接進(jìn)程和MySQL數(shù)據(jù)庫實(shí)例進(jìn)行通信,本質(zhì)上屬于進(jìn)程間通信,而進(jìn)程通信的方式有管道、命名管道、命名字、TCP/IP套接字、UNIX套接字。MySQL數(shù)據(jù)庫提供的方式有3種:

  • TCP/IP套接字方式
  • 命名管道和共享內(nèi)存(Windows平臺(tái)獨(dú)有)
  • UNIX套接字(UNIX平臺(tái)獨(dú)有)

TCP/IP套接字方式是MySQL數(shù)據(jù)庫在任何平臺(tái)都提供的連接方式,一般用于客戶端和服務(wù)端不在同一臺(tái)服務(wù)器上,基于網(wǎng)絡(luò)的遠(yuǎn)程連接請求。

筆者使用的是UNIX服務(wù)器,所以不了解Windows相關(guān)的內(nèi)容,在使用UNIX域套接字時(shí),一般用于客戶端和服務(wù)端在同一臺(tái)服務(wù)器上的情況,而該套接字并不是一個(gè)網(wǎng)絡(luò)協(xié)議,只是用于同機(jī)器連接通訊的載體。

mysql.sock文件

我們可以在配置文件my.cnf中指定套接字文件的路徑:

[mysqld]
socket = /tmp/mysql.sock

也可以在啟動(dòng)時(shí)指定socket文件的路徑:

# 以下兩種均可
./mysqld_safe --socket=/tmp/mysql.sock
./mysqld_safe -S /tmp/mysql.sock

在啟動(dòng)MySQL之后我們可以查詢socket文件的路徑:

mysql> show variables like 'socket';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| socket        | /tmp/mysql.sock | 
+---------------+-----------------+
1 row in set (0.00 sec)

mysql.sock文件的作用

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

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

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

當(dāng)我們使用localhostmysql命令 -h參數(shù)的缺省值)連接本地?cái)?shù)據(jù)庫時(shí),因?yàn)闊o法使用TCP/IP協(xié)議監(jiān)聽端口的請求和數(shù)據(jù),我們需要使用該socket文件來進(jìn)行你啟動(dòng)的連接進(jìn)程和MySQL實(shí)例進(jìn)程的進(jìn)程間通信,即通訊協(xié)議的載體。如果我們刪除了該文件,當(dāng)你再次連接本地?cái)?shù)據(jù)庫時(shí)會(huì)報(bào)錯(cuò):

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

此時(shí),我們新建一個(gè)socket文件,并且修改權(quán)限和擁有者,同時(shí)再次發(fā)起數(shù)據(jù)庫連接是依然會(huì)報(bào)錯(cuò),不過是不一樣的錯(cuò)誤:

# 新建的為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
# 展示對(duì)比兩個(gè)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不同之外其他的信息全部一樣,而且內(nèi)容都是空的,為什么就不能使用呢?

以下原因?yàn)閭€(gè)人推測,實(shí)際的原因需要看linux對(duì)socket文件的實(shí)現(xiàn),每個(gè)socket肯定有屬性的不同。

原因是由于mysql.sock是每一次MySQL啟動(dòng)之后生成的,該socket文件會(huì)監(jiān)聽創(chuàng)建它的進(jìn)程,此處即本機(jī)的mysqld進(jìn)程,用于其與MySQL實(shí)例進(jìn)程通信,如果你關(guān)閉了mysqld進(jìn)程,該文件會(huì)被自動(dòng)刪除。而你新建的socket文件只是虛有其表,并沒有監(jiān)聽任何的IP和端口以及進(jìn)程PID,所以自然不能與MySQL實(shí)例通信了。所以如果你刪掉了這個(gè)文件,只能殺死mysqld進(jìn)程并重啟,因?yàn)榇藭r(shí)你給MySQL實(shí)例發(fā)送關(guān)閉信號(hào)的通道也沒有了(當(dāng)然此時(shí)你可以走TCP/IP通信的方法)。

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

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

數(shù)據(jù)庫運(yùn)維:mysql.sock錯(cuò)誤修復(fù)

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

問題根源:mysql.sock文件找不到了

問題場景:一般為該文件被誤刪,或者PHP等后端指定的該socket文件地址路徑不對(duì)

解決方案:

1 . 重啟

ps -auxf | grep mysql
    kill -SIGKILL pid(找到指定的mysql進(jìn)程pid)
    ./mysqld_safe

2 . 使用locate mysql.sock定位,同時(shí)重啟:./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文件內(nèi)容不符合通信的需要

解決方案:跟上面的(2)錯(cuò)誤本質(zhì)上一樣,解決方案也一樣

參考資料

MySQL技術(shù)內(nèi)幕 InnoDB存儲(chǔ)引擎第2版 1.5節(jié) 連接MySQL:

http://m.fzitv.net/books/598536.html

mysql.sock文件詳解:http://m.fzitv.net/article/93285.htm

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

相關(guān)文章

  • mysql下為數(shù)據(jù)庫設(shè)置交叉權(quán)限的方法

    mysql下為數(shù)據(jù)庫設(shè)置交叉權(quán)限的方法

    由于 SupeSite 需要調(diào)用 Discuz! 和 UCHome 的數(shù)據(jù),所以如果它們不安裝在同一個(gè)數(shù)據(jù)庫,SupeSite 的數(shù)據(jù)庫用戶必須要對(duì) Discuz! 和 UCHome 的數(shù)據(jù)庫有讀取、修改、刪除等權(quán)限。
    2011-07-07
  • dmysql自己封裝的mysql庫

    dmysql自己封裝的mysql庫

    dmysql自己封裝的mysql庫...
    2007-07-07
  • MySQL 實(shí)現(xiàn)雙向復(fù)制的方法指南

    MySQL 實(shí)現(xiàn)雙向復(fù)制的方法指南

    這篇文章主要介紹了MySQL 實(shí)現(xiàn)雙向復(fù)制的方法指南,本文包括:主機(jī)配置,從機(jī)配置,建立主-從復(fù)制,建立雙向復(fù)制,需要的朋友可以參考下
    2015-03-03
  • C# Mysql 查詢 Rownum的解決方法

    C# Mysql 查詢 Rownum的解決方法

    C# Mysql 查詢 Rownum的解決方法,需要的朋友可以參考一下
    2013-03-03
  • mysql使用字符串字段判斷是否包含某個(gè)字符串的方法

    mysql使用字符串字段判斷是否包含某個(gè)字符串的方法

    在MySQL中,判斷字符串字段是否包含特定子字符串,可使用LIKE操作符、INSTR()函數(shù)、LOCATE()函數(shù)、POSITION()函數(shù)、FIND_IN_SET()函數(shù)以及正則表達(dá)式REGEXP或RLIKE,每種方法適用于不同的場景和需求,LIKE和INSTR()通常用于簡單包含判斷
    2024-09-09
  • MySQL timestamp自動(dòng)更新時(shí)間分享

    MySQL timestamp自動(dòng)更新時(shí)間分享

    在mysql中timestamp數(shù)據(jù)類型是一個(gè)比較特殊的數(shù)據(jù)類型,他可以自動(dòng)在你不使用程序更新情況下只要你更新了記錄timestamp會(huì)自動(dòng)更新時(shí)間
    2013-06-06
  • SUSE Linux下源碼編譯方式安裝MySQL 5.6過程分享

    SUSE Linux下源碼編譯方式安裝MySQL 5.6過程分享

    這篇文章主要介紹了SUSE Linux下源碼編譯方式安裝MySQL 5.6過程分享,本文使用SUSE Linux Enterprise Server 10 SP3 (x86_64)系統(tǒng),需要的朋友可以參考下
    2014-09-09
  • 在CentOS上MySQL數(shù)據(jù)庫服務(wù)器配置方法

    在CentOS上MySQL數(shù)據(jù)庫服務(wù)器配置方法

    最近工作中經(jīng)常需要使用到MySQL,有時(shí)候在WINXP,有時(shí)候在Linux中,而這次,需要在CentOS中配置一下,還需要用到phpmyadmin, 在網(wǎng)上搜了不少的資料。
    2010-04-04
  • mysql InnoDB建表時(shí)設(shè)定初始大小的方法

    mysql InnoDB建表時(shí)設(shè)定初始大小的方法

    這篇文章主要介紹了mysql InnoDB建表時(shí)設(shè)定初始大小的方法,需要大家到MYSQL后臺(tái)實(shí)際操作方可以看到效果
    2013-11-11
  • MySQL到Kafka實(shí)時(shí)數(shù)據(jù)同步

    MySQL到Kafka實(shí)時(shí)數(shù)據(jù)同步

    很多 DBA 同學(xué)經(jīng)常會(huì)遇到要從一個(gè)數(shù)據(jù)庫實(shí)時(shí)同步到另一個(gè)數(shù)據(jù)庫的問題,同構(gòu)數(shù)據(jù)還相對(duì)容易,遇上異構(gòu)數(shù)據(jù)、表多、數(shù)據(jù)量大等情況就難以同步,我自己親測了一種方式,可以非常方便的實(shí)現(xiàn)MySQL Kafka實(shí)時(shí)數(shù)據(jù)同步,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

杭州市| 景宁| 玉溪市| 葫芦岛市| 株洲县| 福贡县| 成安县| 遂平县| 南漳县| 通道| 蕲春县| 林芝县| 宁远县| 砀山县| 兰西县| 宝应县| 天台县| 凉城县| 鄄城县| 梨树县| 红桥区| 浏阳市| 苏尼特左旗| 冷水江市| 东辽县| 固原市| 香格里拉县| 洛南县| 乌什县| 民乐县| 九江县| 防城港市| 五指山市| 上林县| 浦城县| 南投县| 盱眙县| 双城市| 台山市| 广饶县| 中阳县|