技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

Can't connect to local MySQL server through socket

作者:admin    時(shí)間:2013-12-17 9:40:46    瀏覽:

今天調(diào)試網(wǎng)頁的時(shí)候,出現(xiàn)了一個(gè)錯(cuò)誤,提示Can’t connect to local MySQL server through socket...,從字面意思來看,是不能通過socket連接本地MySQL服務(wù)器,難道MySQL服務(wù)器哪里出問題了?

檢查一下MySQL有沒有啟動(dòng),看到已經(jīng)啟動(dòng)了的。為了保險(xiǎn),我又重新啟動(dòng)了一次。不過還是問題再現(xiàn)。

我接著看看其他程序是否有問題,結(jié)果讓我有點(diǎn)不解,因?yàn)槲业钠渌绦蚴钦5摹ky道是今天調(diào)試的網(wǎng)頁與其他程序的MySQL連接字符串不同?

我接著認(rèn)真檢查一下兩者之間的差異,結(jié)果發(fā)現(xiàn)servername一個(gè)使用127.0.0.1,另一個(gè)使用localhost。127.0.0.1連接正常,而localhost連接報(bào)錯(cuò)。問題是不是就出在這里呢?

我于是把localhost改為127.0.0.1試試,竟然能連接成功了!

不過我很詫異,使用localhost與127.0.0.1本地連接有什么不同?我一直沒有注意過這個(gè)問題,所以本地服務(wù)器都是隨意寫的localhost或127.0.0.1。

localhost與127.0.0.1連接MySQL時(shí)的一些差異

查了下資料,發(fā)現(xiàn)localhost與127.0.0.1在連接MySQL時(shí)是有一些差異的。

我們連接數(shù)據(jù)庫時(shí),localhost與127.0.0.1都是不加思考的使用的,沒有去想過兩者有什么不同。其實(shí)他們連接數(shù)據(jù)庫時(shí)使用的協(xié)議是不同的,具體來說,127.0.0.1 使用TCP/IP連接,而localhost使用Unix socket連接。

看看下面的實(shí)驗(yàn)證明:

shell> mysql -h 127.0.0.1
mysql> status;
Current user: root@127.0.0.1
Connection: 127.0.0.1 via TCP/IP

shell> mysql -h localhost
mysql> status;
Current user: root@localhost
Connection: Localhost via UNIX socket

不過,這只是linux套接字網(wǎng)絡(luò)的特性,win平臺(tái)不會(huì)有這個(gè)問題。也就是說,在win平臺(tái)里,可以用localhost或127.0.0.1連接MySQL數(shù)據(jù)庫,但在linux里不可以。

要使在linux也可以用localhost連接MySQL,解決方法是在my.cnf的[mysql]區(qū)段里添加如下代碼:

protocol=tcp

保存重啟MySQL即可。

相關(guān)資料

Can't connect to [local] MySQL server錯(cuò)誤

一個(gè)MySQL客戶可以兩種不同的方式連接mysqld服務(wù)器:Unix套接字或TCP/IP。

Unix套接字是通過在文件系統(tǒng)中的一個(gè)文件(預(yù)設(shè)“/tmp/mysqld.sock” )進(jìn)行連接;TCP/IP是通過一個(gè)端口號連接。Unix套接字比TCP/IP更快,但是只有用在連接同一臺(tái)計(jì)算機(jī)上的服務(wù)器。如果你不指定主機(jī)名或如果你指定特殊的主機(jī)名localhost,使用Unix套接字。

錯(cuò)誤(2002)Can't connect to ...通常意味著沒有一個(gè)MySQL服務(wù)器運(yùn)行在系統(tǒng)上或當(dāng)試圖連接mysqld服務(wù)器時(shí),你正在使用一個(gè)錯(cuò)誤的套接字文件或TCP/IP端口。

先檢查(使用ps )在你的服務(wù)器上是否有一個(gè)名為mysqld的進(jìn)程啟動(dòng)!如果沒有任何mysqld程序,你應(yīng)該啟動(dòng)一個(gè)。

如果一個(gè)mysqld程序正在運(yùn)行,你可以通過嘗試這些不同的連接來檢查服務(wù)器(當(dāng)然,端口號和套接字路徑名可能在你的安裝中是不同的):

shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h 'ip for your host' version
shell> mysqladmin --socket=/tmp/mysql.sock version

注意hostname命令使用反引號“`”而非正引號“'”﹔這些導(dǎo)致hostname輸出(即,當(dāng)前主機(jī)名)被代替進(jìn)mysqladmin命令中。

這是可能造成Can't connect to local MySQL server錯(cuò)誤的一些原因

1、mysqld沒有運(yùn)行。

2、你正在使用MIT-pthreads的一個(gè)系統(tǒng)上運(yùn)行。

如果正在運(yùn)行在一個(gè)沒有原生執(zhí)行緒的系統(tǒng)上,mysqld使用MIT-pthreads軟件包。然而,MIT-pthreads不支援Unix套接字,因此當(dāng)與服務(wù)器連接時(shí),在這樣一個(gè)系統(tǒng)上,你總是必須明確地指定主機(jī)名。試試使用這個(gè)命令檢查到服務(wù)器的連接:

shell> mysqladmin -h `hostname` version

3、某人刪除了mysqld使用的Unix套接字(預(yù)設(shè)“/tmp/mysqld.sock” )。

你可能有一個(gè)cron任務(wù)刪除了MySQL套接字(例如,一個(gè)把舊文件從“/tmp”目錄中刪除的任務(wù))。你總是可以運(yùn)行mysqladmin version并且檢查mysqladmin正在試圖使用的套接字確實(shí)存在。在這種情況下,修復(fù)方法是刪除cron任務(wù)而不刪除“mysqld.sock 或?qū)⑻捉幼址旁谄渌胤?。你能用這個(gè)命令在MySQL配置時(shí)指定一個(gè)不同的套接字地點(diǎn):

shell> ./configure --with-unix-socket-path=/path/to/socket

你也可以使用--socket=/path/to/socket選項(xiàng)啟動(dòng)safe_mysqld和在啟動(dòng)你的MySQL客戶前設(shè)置環(huán)境變數(shù)MYSQL_UNIX_PORT為套接字路徑名。你可用--socket=/path/to/socket選項(xiàng)啟動(dòng)mysqld服務(wù)器。如果你改變了服務(wù)器的套接字路徑名,你也必須通知MySQL客戶關(guān)于新路徑的情況。你可以通過設(shè)置環(huán)境變數(shù)MYSQL_UNIX_PORT為套接字路徑名或由提供套接字路徑名作為客戶的參數(shù)做到。你可用這個(gè)命令測試套接字:

shell> mysqladmin --socket=/path/to/socket version

4、你正在使用Linux和執(zhí)行緒已經(jīng)死了(核心傾倒了)。

在這種情況中,你必須殺死其它mysqld執(zhí)行緒(例如在啟動(dòng)一個(gè)新的MySQL服務(wù)器之前,可以用mysql_zap腳本)。

Can't connect to MySQL server on some_hostname錯(cuò)誤

如果你得到錯(cuò)誤Can't connect to MySQL server on some_hostname,你可以嘗試下列步驟找出問題是什么:

1、通過執(zhí)行:

telnet your-host-name tcp-ip-port-number

并且按幾次回車來檢查服務(wù)器是否正常運(yùn)行。如果有一個(gè)MySQL運(yùn)行在這個(gè)端口上,你應(yīng)該得到一個(gè)包含正在運(yùn)行的MySQL服務(wù)器的版本號的應(yīng)答。如果你得到類似于telnet: Unable to connect to remote host: Connection refused的一個(gè)錯(cuò)誤,那么沒有服務(wù)器在使用的端口上運(yùn)行。

2、嘗試連接本地機(jī)器上的mysqld背景執(zhí)行程式,并用mysqladmin variables檢查mysqld被配置使用的TCP/IP端口(變數(shù)port )。

3、檢查你的mysqld服務(wù)器沒有用--skip-networking選項(xiàng)啟動(dòng)。

您可能對如下文章也感興趣

localhost不能訪問127.0.0.1可以訪問的原因及解決方法

標(biāo)簽: 服務(wù)器  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */