程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 使用MySQL時的一些常見錯誤

使用MySQL時的一些常見錯誤

編輯:關於MYSQL數據庫
MySQL Server has gone away錯誤
本小節也涉及有關Lost connection to server during query的錯誤。

對MySQL Server has gone away錯誤最常見的原因是服務器超時了並且關閉了連接。缺省地,如果沒有事情發生,服務器在 8個小時後關閉連接。你可在啟動MySQLd時通過設置wait_timeout變量改變時間限制。

你可以通過執行mysqladmin version並且檢驗正常運行的時間來檢查MySQL還沒死掉。

如果你有一個腳本,你只須再發出查詢讓客護進行一次自動的重新連接。

在這種請下,你通常能獲得下列錯誤代碼(你得到的是OS相關的):

CR_SERVER_GONE_ERROR 客戶不能發送一個問題給服務器。
CR_SERVER_LOST 當寫服務器時,客戶沒有出錯,但是它沒有得到對問題的一個完整的答案(或任何答案)。

如果你向服務器發送不正確的或太大的查詢,你也可能得到這些錯誤。如果mysqld得到一個太大或不正常的包,它認為客戶出錯了並關閉連接。如果你需要較大的查詢(例如,如果你正在處理較大的BLOB列),你可以使用-O max_allowed_packet=#選項(缺省1M)啟動mysqld以增加查詢限制。多余的內存按需分配,這樣mysqld只有在你發出較大差詢時或MySQLd必須返回較大的結果行時,才使用更多的內存!

Can't connect to [local] MySQL Server錯誤
一個MySQL客戶可以兩種不同的方式連接mysqld服務器:Unix套接字,它通過在文件系統中的一個文件(缺省“/tmp/MySQLd.sock”)進行連接;或TCP/IP,它通過一個端口號連接。Unix套接字比TCP/IP更快,但是只有用在連接同一台計算機上的服務器。如果你不指定主機名或如果你指定特殊的主機名localhost,使用Unix套接字。

錯誤(2002)Can't connect to ...通常意味著沒有一個MySQL服務器運行在系統上或當試圖連接MySQLd服務器時,你正在使用一個錯誤的套接字文件或TCP/IP端口。

由檢查(使用ps)在你的服務器上有一個名為mysqld的進程啟動!如果沒有任何mysqld過程,你應該啟動一個。見4.15.2 啟動MySQL服務器的問題。

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

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命令使用反引號“`”而非正引號“'”;這些導致hostname輸出(即,當前主機名)被代替進MySQLadmin命令中。

這是可能造成Can't connect to local MySQL Server錯誤的一些原因:

MySQLd不在運行。
你正在使用MIT-pthreads的一個系統上運行。如果正在運行在一個沒有原生線程的系統上,mysqld使用 MIT-pthreads 軟件包。見4.2 由MySQL支持的操作系統。然而,MIT-pthreads不支持Unix套接字,因此當與服務器連接時,在這樣一個系統上,你總是必須明確地指定主機名。試試使用這個命令檢查到服務器的連接:
shell> MySQLadmin -h `hostname` version

某人刪除了mysqld使用的Unix套接字(缺省“/tmp/mysqld.sock”)。你可能有一個cron任務刪除了MySQL套接字(例如,一個把舊文件從“/tmp”目錄中刪除的任務)。你總是可以運行mysqladmin version並且檢查mysqladmin正在試圖使用的套接字確實存在。在這種情況下,修復方法是刪除cron任務而不刪除“mysqld.sock 或將套接字放在其他地方。你能用這個命令在MySQL配置時指定一個不同的套接字地點:
shell> ./configure --with-unix-socket-path=/path/to/socket

你也可以使用--socket=/path/to/socket選項啟動safe_mysqld和在啟動你的MySQL客戶前設置環境變量MySQL_UNIX_PORT為套接字路徑名。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved