MySQL 常見的錯誤以及解決方法

一、can’t connect to mysql server on ‘localhost'(10061)?

? ?翻譯:不能連接到localhost 上的mysql?分析:這說明“l(fā)ocalhost”計算機是存在的,但在這臺機器上卻沒提供mysql服務(wù)。?需要啟動這臺機器上的mysql服務(wù),如果機子負(fù)載太高沒空相應(yīng)請求也會產(chǎn)生這個錯誤。?解決:既然沒有啟動那就去啟動這臺機子的mysql。如果啟動不成功,多數(shù)是因為你的my.ini配置的有問題。重新配置其即可。?如果覺得mysql負(fù)載異常,可以到mysql/bin 的目錄下執(zhí)行mysqladmin-uroot -p123 processlist來查看mysql當(dāng)前的進程。

二、unknown mysql serverhost ‘localhosadst’ (11001)

? ?翻譯:未知的mysql服務(wù)器localhosadst?分析:服務(wù)器localhosasdst 不存在。或者根本無法連接?解決:仔細(xì)檢查自己論壇下面的./config.inc.php找到$dbhost重新設(shè)置為正確的mysql 服務(wù)器地址。

三、access denied for user:’roota@localhost’ (using password: yes)

? ??翻譯:用戶roota 訪問 localhost 被拒絕(沒有允許通過)?分析:造成這個錯誤一般數(shù)據(jù)庫用戶名和密碼相對mysql服務(wù)器不正確?解決:仔細(xì)檢查自己論壇下面的 ./config.inc.php 找到$dbuser、$dbpw核實后重新設(shè)置保存即可。

四、access denied for user:’red@localhost’ to database ‘newbbs’?

? ?翻譯:用戶 red在localhost 服務(wù)器上沒有權(quán)限操作數(shù)據(jù)庫newbbs?分析:這個提示和問題三是不同的。那個是在mysql的時候就被阻止了,而這個錯誤是在對數(shù)據(jù)庫進行操作時引起的。比如在selectupdate等等。這個是因為該用戶沒有操作數(shù)據(jù)庫相應(yīng)的權(quán)力。比如select 這個操作在mysql.user.select_priv里記錄 y 可以操作n 不可以操作。?解決:如果是自己的獨立主機那么更新mysql.user 的相應(yīng)用戶記錄,比如這里要更新的用戶為red 。或者直接修改./config.inc.php 為其配置一個具有對mysql權(quán)限的用戶?或者通過如下的命令來更新授權(quán)grantall privileges on dbname.* to ‘user’@’localhost’ identified by ‘password’?提示:更新了mysql庫中的記錄一定要重啟mysql服務(wù)器才能使更新生效?flush privileges;

五、no database selected

? ??翻譯:沒有數(shù)據(jù)庫被選擇上?分析:產(chǎn)生的原因有兩種?config.inc.php 里面$dbname設(shè)置的不對。致使數(shù)據(jù)庫根本不存在,所以在$db->select_db($dbname); 時返回了false?和上面問題四是一樣的,數(shù)據(jù)庫用戶沒有select權(quán)限,同樣會導(dǎo)致這樣的錯誤。當(dāng)你發(fā)現(xiàn)config.inc.php的設(shè)置沒有任何問題,但還是提示這個錯誤,那一定就是這種情況了。?解決:對癥下藥?打開config.inc.php找到$dbname核實重新配置并保存?同問題四的解決方法

六、can’t open file:’xxx_forums.myi’. (errno: 145)

? ?翻譯:不能打開xxx_forums.myi?問題分析:?這種情況是不能打開cdb_forums.myi 造成的,引起這種情況可能的原因有:?1、服務(wù)器非正常關(guān)機,數(shù)據(jù)庫所在空間已滿,或一些其它未知的原因,對數(shù)據(jù)庫表造成了損壞。?2、類 unix 操作系統(tǒng)下直接將數(shù)據(jù)庫文件拷貝移動會因為文件的屬組問題而產(chǎn)生這個錯誤。?解決方法:?1、修復(fù)數(shù)據(jù)表?可以使用下面的兩種方式修復(fù)數(shù)據(jù)表:(第一種方法僅適合獨立主機用戶)?1)使用 myisamchk ,mysql自帶了專門用戶數(shù)據(jù)表檢查和修復(fù)的工具 ―― myisamchk 。更改當(dāng)前目錄到mysql/bin 下面,一般情況下只有在這個下面才能運行 myisamchk 命令。常用的修復(fù)命令為:myisamchk-r 數(shù)據(jù)文件目錄/數(shù)據(jù)表名.myi;?2)通過 phpmyadmin 修復(fù),phpmyadmin 帶有修復(fù)數(shù)據(jù)表的功能,進入到某一個表中后,點擊“操作”,在下方的“表維護”中點擊“修復(fù)表”即可。?注意:以上兩種修復(fù)方式在執(zhí)行前一定要備份數(shù)據(jù)庫。?2、修改文件的屬組(僅適合獨立主機用戶)?1)復(fù)制數(shù)據(jù)庫文件的過程中沒有將數(shù)據(jù)庫文件設(shè)置為mysql 運行的帳號可讀寫(一般適用于 linux和 freebsd 用戶)。

七、table’test.xxx_sessions’ doesn’t exist

? ??翻譯:xxxxx表不存在?分析:在執(zhí)行sql語句時沒有找到表,比如:select * fromxxx_members where uid=’xx’ 這里如果表xxx_members不存在于$dbname庫里,那么就會提示這個錯誤。具體可分為以下三種情況來討論:?安裝插件或者h(yuǎn)ack時修改了程序文件,而忘記了對數(shù)據(jù)庫作相應(yīng)的升級。?后臺使用了不完全備份,導(dǎo)入數(shù)據(jù)時沒有導(dǎo)入到已經(jīng)安裝了相應(yīng)版本的論壇的數(shù)據(jù)庫中。?解決: 同樣對癥下藥,不同的原因不同的處理方法。?仔細(xì)對照插件作者提供的安裝說明,把遺漏的對數(shù)據(jù)庫的操作補上,如果仍然不能解決問題,那么應(yīng)該懷疑該插件的可用性了。去咨詢一下插件作者,或者將其卸載。?不要張冠李戴,多大的腳就穿多大的鞋。總之使得程序文件和數(shù)據(jù)庫配套即可.

八、unknown column’column_name’ in ‘field list’

? ?翻譯:未知的字段名column_name?分析:在執(zhí)行sql語句是出現(xiàn)了指定表中沒有的字段名稱,就會出現(xiàn)這個錯誤。具體導(dǎo)致的原因可分為以下兩種?安裝插件或者h(yuǎn)ack時修改了程序文件,而忘記了對數(shù)據(jù)庫作相應(yīng)的升級。?程序文件和數(shù)據(jù)庫不配套,比如d2.5的數(shù)據(jù)庫配置給d4.1的程序來用肯定會出現(xiàn)這個錯誤。?解決: 導(dǎo)致的原因和問題八的1和 3是相同的,所以解決方法也一樣。

九、you have an error in yoursql syntax

? ?翻譯:有一個mysql在你的sql中?分析:論壇標(biāo)準(zhǔn)的程序是沒有sql語法錯誤的。所以造成這個錯誤的原因一般就兩類?安裝插件或擅自修改程序。?不同的數(shù)據(jù)庫版本數(shù)據(jù)庫導(dǎo)出導(dǎo)入,比如mysql4.1的數(shù)據(jù)在導(dǎo)出的語句包含了mysql4.0沒有的功能,像mysql的設(shè)定,這時如果將這些sql導(dǎo)入到mysql4.0的時候就會產(chǎn)生sql語法錯誤。?解決:?仔細(xì)檢查看到底是哪里的錯誤,將其修正,實在不行就用標(biāo)準(zhǔn)程序把出錯的程序替換。?在數(shù)據(jù)庫備份的時候要留意,如果不打算倒入到其他版本的mysql中則不用特殊考慮,反之要特殊的設(shè)定。使用dz4.1的后臺數(shù)據(jù)備份,可以按照提示去設(shè)定想要的格式。獨立主機的也可以在到處的時候?qū)⑵鋵?dǎo)出為mysql4.0的格式。?mysqldump -uroot -p–default-character-mysql=latin1 –set-charset=gbk –skip-opt databse >test.sql

十、duplicate entry ‘xxx’for key 1

? ?翻譯:插入 xxx使索引1重復(fù)?分析:索引如果是primaryunique這兩兩種,那么數(shù)據(jù)表的數(shù)據(jù)對應(yīng)的這個字段就必須保證其每條記錄的唯一性。否則就會產(chǎn)生這個錯誤。?一般發(fā)生在對數(shù)據(jù)庫寫操作的時候,例如discuz!4.1論壇程序要求所有會員的用戶名username必須唯一,即username的索引是unique,這時如果強行往cdb_members表里插入一個已有的username的記錄就會發(fā)上這個錯誤,或者將一條記錄的username更新 為已有的一個username。?改變表結(jié)構(gòu)的時候也有可能導(dǎo)致這個錯誤。例如 discuz!4.0論壇的數(shù)據(jù)庫中cdb_members.username的索引類型是index這個時候是允許有相同username的記錄存在的,在升級到4.1的時候,因為要將username的索引由原來的index變 為unique。如果這時cdb_members里存在有相同的username的記錄,那么就會引發(fā)這個錯誤。?導(dǎo)出數(shù)據(jù)據(jù)時有時會因為一些原因(作者目前還不清楚)導(dǎo)致同一條記錄被重復(fù)導(dǎo)出,那么這個備份數(shù)據(jù)在導(dǎo)入的時候出現(xiàn)這個錯誤是在所難免的了。?修改了auto_increment的值,致使“下一個autoindex”為一條已經(jīng)存在的記錄?解決: 兩種思路,一是破壞掉唯一性的索引。二是把重復(fù)的數(shù)據(jù)記錄干掉,只保留一條。很顯然第一種思路是不可取的。那么按照二的思路我們得出以下幾種解決方法,對應(yīng)上面的i iiiii?略?按照錯誤提示里的信息到數(shù)據(jù)庫中將重復(fù)的記錄刪除,僅保留一條即可。之后繼續(xù)執(zhí)行升級操作。?這種情況發(fā)生的概率很小,可以用文本編輯器打開備份文檔,查找重復(fù)的信息。將其多余的拿掉,僅保留一條即可。?查詢出表中auto_increment最大的一條記錄,設(shè)置auto_incerment比其大一即可。?ps:repaire table “表名“,可以暫時解決問題。

十一、 duplicate key name’xxx’

? ??翻譯:索引名重復(fù)?分析:要創(chuàng)建的索引已經(jīng)存在了,就會引發(fā)這個錯誤,這個錯誤多發(fā)生在升級的時候。可能是已經(jīng)升級過的,重復(fù)升級引起的錯誤。也有可能是之前用戶擅自加的索引,剛好與升級文件中的所以相同了。?解決: 看看已經(jīng)存在的索引和要添加的索引是否一樣,一樣的話可以跳過這條sql語句,如果不一樣那么現(xiàn)刪除已存在的所以,之后再執(zhí)行。

十二、 duplicate column name’xxx’

? ??翻譯:字段名xxx重復(fù)?分析:添加的字段xxx已經(jīng)存在,多發(fā)生在升級過程中,與問題十二的產(chǎn)生是一樣的。?解決: 看一下已經(jīng)存在的字段是否和將要添加的字段mysql完全相同,如果相同則可以跳過不執(zhí)行這句sql,如果不一樣則刪除掉這個字段。之后繼續(xù)執(zhí)行升級程序。

十三、 table ‘xxx’ alreadyexists

? ??翻譯:數(shù)據(jù)表xxx已經(jīng)存在?分析:xxx表已經(jīng)存在于庫中,再次試圖創(chuàng)建這個名字的表就會引發(fā)這個錯誤。同樣多發(fā)生在論壇的升級中。類似于問題十二。?解決: 看看已經(jīng)存在的表是否和將要創(chuàng)建的表完全一樣,一樣的話可以跳過不執(zhí)行這個sql,否則請將存在的表先刪除,之后繼續(xù)執(zhí)行升級文件。

十四、 can’t create database’xxx’. database exists

? ?翻譯:不能mysqlxxx,數(shù)據(jù)庫已經(jīng)存在?分析:一個mysql下面的數(shù)據(jù)庫名稱必須保證唯一性,否則就會有這個錯誤。?解決:把已經(jīng)存在的數(shù)據(jù)庫改名或者把將要創(chuàng)建的數(shù)據(jù)庫改名,總之不讓他們的名稱沖突。

十五、 小結(jié)(針對問題1112131415)

? ?此類問題錯誤提示中都暗藏一個關(guān)鍵詞duplicate(重復(fù))?那么對于mysql來說什么東西是不能重復(fù)的呢??數(shù)據(jù)庫 database?同一個數(shù)據(jù)庫下數(shù)據(jù)表table?同一個數(shù)據(jù)表下字段 column?同一個數(shù)據(jù)表下索引 key?同一個數(shù)據(jù)表在索引唯一(uniqueprimary)的情況下記錄中的這些字段不可以重復(fù)

十六、unknown system variable’names’

? ??翻譯:未知的mysqlnames?分析:mysql版本不支持字符集設(shè)定,此時強行設(shè)定字符集就會出現(xiàn)這個錯誤。?解決: 將sql語句中的set names ‘xxx’ 語句去掉

十七、 lost connection tomysql server during query?

? ?翻譯:mysql服務(wù)器失去連接在查詢期間?分析:遠(yuǎn)程連接數(shù)據(jù)庫是有時會有這個問題。mysql服務(wù)器在執(zhí)行一條sql語句的時候失去了連接造成的。?解決: 一般不需要怎么去處理,如果頻繁的出現(xiàn)那么考慮改善硬件環(huán)境。

十八、user ‘red’ has exceededthe ‘max_updates’ resource (current value: 500)

? ?翻譯:msql用戶red已經(jīng)超過了’max_updates’(最大更新次數(shù)),’max_questions’(最大查詢次數(shù)),’max_connections’(最大連接數(shù)),當(dāng)前設(shè)定為500?分析:在mysql數(shù)據(jù)庫的下有一個庫為mysql,它其中有一個表為user這里面的紀(jì)錄每一條都對應(yīng)為一個mysql用戶的授權(quán)。其中字段max_questions max_updates max_connections分別記錄著最大查詢次數(shù) 最大更新數(shù) 最大連接數(shù),當(dāng)目前的任何一個參數(shù)大于任何一個設(shè)定的值就會產(chǎn)生這個錯誤。?解決: 獨立主機用戶可以直接修改授權(quán)表。修改完之后重啟mysql或者跟新授權(quán)表,進入mysql提示符下執(zhí)行?flush privileges;?記得后面要有分號’;’?mysql的用戶如果總是出現(xiàn)這個問題可找空間商協(xié)商解決。

十九、too many connections(1040)鏈接過多?

? ?翻譯:達到最大連接數(shù)?問題分析:?連接數(shù)超過了mysql設(shè)置的值,與max_connections和wait_timeout 都有關(guān)系。wait_timeout的值越大,連接的空閑等待就越長,這樣就會造成當(dāng)前連接數(shù)越大?解決方法:?1.虛擬主機用戶請聯(lián)系空間商優(yōu)化mysql 服務(wù)器的配置;?2.獨立主機用戶請聯(lián)系服務(wù)器管理員優(yōu)化mysql 服務(wù)器的配置,可參考:?修改mysql mysql my.ini 或者 my.cnf 中的參數(shù):?max_connections= 1000?wait_timeout = 10?修改后重啟 mysql ,如果經(jīng)常性的報此錯誤,請做一下服務(wù)器的整體優(yōu)化。

二十、there is no such grantdefined for user ‘%s’ on host ‘%s’?

? ?錯誤編號:1141?問題分析:?mysql當(dāng)前用戶無權(quán)訪問數(shù)據(jù)庫。?解決方法:?1、虛擬主機用戶請聯(lián)系空間商,確認(rèn)給你提供的帳號是否有授權(quán)數(shù)據(jù)庫的權(quán)限。?2、獨立主機用戶請聯(lián)系服務(wù)器管理員,確認(rèn)給您提供的數(shù)據(jù)庫帳號是否有管理此數(shù)據(jù)庫的權(quán)限。

二十一、error on rename of ‘%s’to ‘%s’ (errno: %d)?error.:1025?

? ?問題分析:?請檢查一下您的程序是否有修改數(shù)據(jù)庫表名的語句。?解決方法:?1.請檢查您的程序中哪些地方需要修改數(shù)據(jù)庫表名;?2.如果您的實際應(yīng)用確實需要修改到數(shù)據(jù)庫表名的話,請聯(lián)系空間商或者服務(wù)器管理員給您開放修改庫名的權(quán)限和服務(wù)器本身是否正常。

二十二、error reading file ‘%s'(errno: %d)?error.:1023?

? ?問題分析:?數(shù)據(jù)庫文件不能被讀取。?解決方法:?1.虛擬主機用戶請聯(lián)系空間商查看數(shù)據(jù)庫是否完好。?2.獨立主機用戶請聯(lián)系服務(wù)器管理員檢查一下mysql 本身是否正常, mysql 是否可以讀取文件,linux 用戶可以檢查一下mysql 的數(shù)據(jù)庫文件的屬主是否正確以及本身的文件是否損壞。

二十三、host ‘*****’ is blockedbecause of many connection errors; unblock with ‘mysqladmin flush-hosts’?error.:1129

? ?問題分析:?數(shù)據(jù)庫出現(xiàn)異常,請重啟數(shù)據(jù)庫。?解決方法:?1. 由于存在很多連接錯誤,主機’****’被屏蔽,虛擬主機用戶請聯(lián)系空間商處理,獨立主機用戶請聯(lián)系服務(wù)器管理員,在mysql 的命令控制臺下執(zhí)行’mysqladmin flush-hosts’解除屏蔽即可,或者重啟mysql 數(shù)據(jù)庫

二十四、dropping database (can’tdelete ‘%s’, errno: %d)?error.:1009?

? ?問題分析:?不能刪除數(shù)據(jù)庫文件,導(dǎo)致刪除數(shù)據(jù)庫失敗。?解決方法:?1.檢查您使用的數(shù)據(jù)庫管理帳號是否有權(quán)限刪除數(shù)據(jù)。?2.檢查數(shù)據(jù)庫是否存在。

二十五、got error 28 from tablehandler?error.:1030?

? ?問題分析:?數(shù)據(jù)庫所在磁盤空間已滿。?解決方法:?1.虛擬主機用戶請聯(lián)系空間商增加mysql 所在的磁盤空間或者清理一些無用文件;?2.獨立主機用戶請聯(lián)系服務(wù)器管理員增加mysql 所在的磁盤空間或者清理一些無用文件

二十六、can’t create a newthread; if you are not out of available memory, you can consult the manual fora possible os-dependent bug。?error.:11/35?

? ?問題分析:?數(shù)據(jù)庫服務(wù)器問題,數(shù)據(jù)庫操作無法創(chuàng)建新線程。一般是兩個原因:?1.服務(wù)器系統(tǒng)內(nèi)存溢出。?2.環(huán)境軟件損壞或系統(tǒng)損壞。?解決方法:?1.虛擬主機用戶請聯(lián)系下空間商數(shù)據(jù)庫服務(wù)器的內(nèi)存和系統(tǒng)是否正常。?2.獨立主機用戶請聯(lián)系服務(wù)器管理員檢查服務(wù)器的內(nèi)存和系統(tǒng)是否正常,如果服務(wù)器內(nèi)存緊張,請檢查一下哪些進程消耗了服務(wù)器的內(nèi)存,同時考慮是否增加服務(wù)器的內(nèi)存來提高整個的負(fù)載能力。

二十七、error: client does notsupport authentication protocol requested by server; consider upgrading mysqlclient?error.:1251?

? ?問題分析:?如果你升級mysql 到 4.1 以上版本后遇到以上問題,請先確定你的mysql client 是 4.1 或者更高版本(windows下有問題你就直接跳到下面看解決方法了,因為 mysql 在windows 是 client 和 server 一起裝上了的)。?解決方法:?1.windows 平臺?主要是改變連接mysql 的帳戶的加密方式,mysql 4.1/5.0 是通過password 這種方式加密的。可以通過以下兩種方法得到解決:?1) mysql->set password for’some_user’@’some_host’=old_password(‘new_password’);?2) mysql->update mysql.user setpassword=old_password(‘new_password’) where host=’some_host’ anduser=’some_user’;?2.linux/unix 平臺?linux平臺下首先確定是否安裝過 mysql 的客戶端,這個用 rpm安裝很簡單,linux 代碼為:?rpm -ivh mysql-client-4.1.15-0.i386.rpm?然后在編譯 php 的時候要加上:?–with-mysql=/your/path/to/mysql?一般情況下都可以解決。如果還出現(xiàn)這種錯誤,可以按照下面的方法來做:?mysql->set password for’some_user’@’some_host’=old_password(‘new_password’);?mysql->update mysql.user set password=old_password(‘new_password’)where host=’some_host’ and user=’some_user’;

二十八、error: can’t connect tolocal mysql server through socket ‘/var/lib/mysql/mysql.sock’?error.:2002?

? ?問題分析:?出現(xiàn)這個錯誤一般情況下是因為下面兩個原因:?1.mysql 服務(wù)器沒有開啟。?2.mysql 服務(wù)器開啟了,但不能找到 socket 文件。?解決方法:?1.虛擬主機用戶,請聯(lián)系空間商確認(rèn)數(shù)據(jù)庫是否正常啟動。?2.獨立主機用戶,請檢查一下 mysql 服務(wù)是否已經(jīng)開啟,沒有開啟,請啟動mysql 服務(wù);如果已經(jīng)開啟,并且是 linux 系統(tǒng),請檢查一下mysql 的 socket 的路徑,然后打開 config.inc.php 找到?$dbhost = ‘localhost’; 在hostname 后面加冒號‘:’和 mysql 的socket 的路徑。?比如mysql 服務(wù)器為 localhost?mysql的 socket 的路徑為 /tmp/mysql.sock?那么就改成如下:?$dbhost= ‘localhost:/temp/mysql.sock’;

二十九、can’t connect to mysqlserver on ‘localhost’?error.:2003?

? ?問題分析:?mysql服務(wù)沒有啟動,一般是在異常的情況下 mysql 無法啟動導(dǎo)致的,比如無可用的磁盤空間,my.ini里 mysql 的 basedir 路徑設(shè)置錯誤等。?解決方法:?1.檢查磁盤空間是否還有剩余可用空間,盡量保持有足夠的磁盤空間可用。?2.檢查 my.ini 里的basedir 等參數(shù)設(shè)置是否正確,然后重新啟動下 mysql 服務(wù)。

三十、lost connection to mysqlserver during query?error.:2013

? ??問題分析:?數(shù)據(jù)庫查詢過程中丟失了與mysql 服務(wù)器的連接。?解決方法:?1.請確認(rèn)您的程序中是否有效率很低的程序,比如某些插件,可以卸載掉插件,檢查一下服務(wù)器是否正常;?2.服務(wù)器本身資源緊張,虛擬主機用戶請聯(lián)系空間商確認(rèn),獨立主機用戶請聯(lián)系服務(wù)器管理員,檢查一下服務(wù)器是否正常。

三十一、got a packet bigger than’max_allowed_packet’ bytes?

? ?錯誤編號:1153?問題分析:調(diào)整了 mantis 的上傳附件的大小卻沒有調(diào)整 mysql 的配置文件。?解決辦法:?1、獨立主機用戶請按照以下方法調(diào)整:?查找 mysql 的配置文件(my.cnf 或者my.ini)?在[mysqld] 部分添加一句(如果存在,調(diào)整其值就可以):?max_allowed_packet=10m?重啟 mysql 服務(wù)就可以了。這里設(shè)置的是 10mb。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊7 分享