top
Loading...
A.2.2.無法連接到[local]MySQL服務器
A.2.2. 無法連接到[local] MySQL服務器
A.2.2.1. 在Windows上與MySQL服務器的連接失敗

Unix平臺上的MySQL客戶端能夠以兩種不同的方式連接到mysqld服務器:通過文件系統中的文件(默認為/tmp/mysql.sock)使用Unix套接字進行連接,或通過端口號使用TCP/IP進行連接。Unix套接字文件的連接速度比TCP/IP快,但僅能在與相同計算機上的服務器相連時使用。如果未指定指定主機名或指定了特殊的主機名localhost,將使用Unix套接字。

如果MySQL服務器運行在Windows 9xMe上,僅能通過TCP/IP進行連接。如服務器運行在Windows NT2000XP2003上,而且使用--enable-named-pipe選項啟動,如果在運行服務器的機器上運行客戶端,也能使用命名管道進行連接。默認情況下,命名管道的名稱為MySQL。如果在連接到mysqld時未給定主機名,MySQL客戶端首先會嘗試連接到命名管道。如果不能工作,將連接到TCP/IP端口。使用“.”作為主機名,可在Windows平臺上強制使用命名管道。

錯誤(2002)“無法連接到…”通常意味著在系統沒有運行的MySQL服務器,或在連接到服務器時使用了不正確的Unix套接字文件名或TCP/IP端口號。

首先檢查服務器主機上是否有名為mysqld的進程(在Unix平臺上使用ps xa | grep mysqld,或在Windows平臺上使用任務管理器)。如果沒有這類進程,應啟動服務器。請參見2.9.2.3節,“啟動MySQL服務器以及其故障診斷和排除”。

如果mysqld進程正在運行,可使用下述命令檢查。在你的具體設置中,端口號或Unix套接字文件名可能會有所不同。host_ip代表運行服務器的機器的IP編號。

shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h host_ip version
shell> mysqladmin --protocol=socket --socket=/tmp/mysql.sock version

注意,應與主機名命令一起使用“`”而不是“’”,這會使主機名輸出(當前主機名)被代入mysqladmin命令。如果沒有主機名命令或正運行在Windows平臺上,應以手動方式輸入機器的主機名(無“`”符號),后跟-h選項。也可以使用TCP/IP協議用-h 127.0.0.1連接到本地主機。

下面給出了一些“無法連接到本地MySQL服務器”錯誤的可能原因:

1.    Mysqld未運行。請檢查操作系統的進程列表以確保mysqld進程正在運行。

2.    你正在具有很多TCP/IP連接的Windows平臺上運行MySQL服務器。如果你的客戶端經常出現錯誤,請參見A.2.2.1節,“在Windows上與MySQL服務器的連接失敗”,以找出規避方法。

3.    你正在使用MIT-pthreads的系統上運行。如果你正在運行不具有固有線程的操作系統,mysqld將使用MIT-pthreads軟件包。請參見2.1.1節,“MySQL支持的操作系統”。但是,并非所有的MIT-pthreads版本均支持Unix套接字文件。在不支持套接字文件的系統上,連接到服務器時,必須明確指定主機名。請使用下述命令來檢查是否連接到了服務器:

4.           shell> mysqladmin -h `hostname` version

5.    某人移動了mysqld使用的Unix套接字文件(默認為/tmp/mysql.sock)。例如,你可能執行了將舊文件從/tmp目錄刪除的cron任務。你總能執行mysqladmin version來檢查mysqladmin試圖使用的Unix套接字文件是否的確存在。在該情況下,更正方式是更改cron任務,不刪除mysql.sock文件,或將套接字文件置于其他地方。請參見A.4.5節,“如何保護或更改MySQL套接字文件/tmp/mysql.sock”。

6.    你使用--socket=/path/to/socket選項啟動了mysqld服務器,當忘記將套接字文件的新名稱通知客戶端程序。如果更改了關于服務器的套接字路徑,也必須通知MySQL客戶端。可在運行客戶端程序時使用相同的—socket選項來完成該任務。此外,你還應確保客戶端具有訪問文件mysql.sock的權限。要想找出套接字文件的位置,可使用:

7.           shell> netstat -ln | grep mysql

請參見A.4.5節,“如何保護或更改MySQL套接字文件/tmp/mysql.sock”。

8.    你正在使用Linux而且1個服務器線程已死亡(內核已清除)。在此情況下,在重啟MySQL服務器之前,必須殺死其他mysqld線程(例如,使用killmysql_zap腳本)。請參見A.4.2節,“如果MySQL依然崩潰,應作些什么”。

9.    服務器或客戶端程序不具有訪問包含Unix套接字文件的目錄或套接字文件本身的恰當權限。在該情況下,必須更改目錄或套接字文件的訪問權限,以便服務器或客戶端程序能夠訪問它們,或用–socket選項重啟mysqld,在該選項中指定服務器能創建、而且客戶端可訪問的目錄下的套接字文件名。

如果遇到錯誤消息“無法連接到some_host上的MySQL服務器”,可嘗試采取下述步驟以找出問題所在:

·         執行“telnet some_host 3306并按兩次回車鍵,檢查服務器是否運行在該主機上(3306是默認的MySQL端口號。如果你的服務器正在監聽不同的端口,請更改該值)。如果有1MySQL服務器正在運行并監聽該端口,你應收到包含服務器版本號的回應。如果遇到錯誤,如“telnet:無法連接到遠程主機:拒絕連接,表示在該定端口上沒有運行的服務器。

·         如果服務器正運行在本地主機上,請使用Unix套接字文件,并使用mysqladmin -h localhost variables進行連接。驗證服務器監聽的TCP/IP端口號(它是port變量的值)。

·         確保你的mysqld服務器未用--skip-networking選項啟動。如果使用了該選項,將無法使用TCP/IP連接到它。

·         檢查并確認不存在屏蔽了對MySQL訪問的防火墻。需要配置諸如ZoneAlarmWindows XP個人防火墻等應用程序,以允許對MySQL服務器的外部訪問。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/problems.html
北斗有巢氏 有巢氏北斗