首頁  >  文章  >  資料庫  >  MySQL 常見的錯誤以及解決方法

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

怪我咯
怪我咯原創
2017-03-30 10:31:121609瀏覽

一、Can't connect to MySQL server on 'localhost'(10061)?

   翻譯:無法連線到localhost 上的mysql?分析:這說明「localhost」電腦是存在的,但在這台機器上卻沒提供MySQL服務。 ?需要啟動這台機器上的MySQL服務,如果機子負載太高沒空相應請求也會產生這個錯誤。 ?解決:既然沒有啟動那就去啟動這台機子的mysql。如果啟動不成功,多數是因為你的my.ini配置的有問題。重新配置其即可。 ?如果覺得mysql負載異常,可以到mysql/bin 的目錄下執行mysqladmin-uroot -p123 processlist來查看mysql目前的進程。

二、Unknown MySQL ServerHost 'localhosadst' (11001)

   翻譯:未知的MySQL伺服器localhosadst?分析:伺服器localhosasdst 不存在。或根本無法連線?解決:仔細檢查自己論壇下面的./config.inc.php找到$dbhost重新設定為正確的mysql 伺服器位址。

三、Access denied for user:'roota@localhost' (Using password: YES)

   ?翻譯:使用者roota 存取localhost 被拒絕(沒有允許通過) ?分析:造成這個錯誤一般資料庫使用者名稱和密碼相對mysql伺服器不正確?解決:仔細檢查自己論壇下面的./config.inc.php 找到$dbuser、$dbpw核實後重新設定保存即可。

四、Access denied for user:'red@localhost' to database 'newbbs'?

   翻譯:使用者red在localhost 伺服器上沒有權限操作資料庫newbbs?分析:這個提示和問題三是不同的。那個是在連接資料庫的時候就被阻止了,而這個錯誤是在對資料庫進行操作時引起的。例如在selectupdate等等。這個是因為該使用者沒有操作資料庫對應的權力。例如select 這個操作在mysql.user.Select_priv裡記錄 Y 可以操作N 不行操作。 ?解決:如果是自己的獨立主機那麼更新mysql.user 的對應使用者記錄,例如這裡要更新的使用者為red 。或直接修改./config.inc.php 為其配置一個具有對資料庫操作權限的使用者?或透過如下的命令來更新授權grantall privileges on dbname.* to 'user'@'localhost' identified by 'password'?提示:更新了mysql函式庫中的記錄一定要重新啟動mysql伺服器才能讓更新生效?FLUSH PRIVILEGES;

五、No Database Selected

#    ?翻譯:沒有資料庫被選擇上?分析:產生的原因有兩種?config.inc.php 裡面$dbname設定的不對。致使資料庫根本不存在,所以在$db->select_db($dbname); 時回傳了false?和上面問題四是一樣的,資料庫使用者沒有select權限,同樣會導致這樣的錯誤。當你發現config.inc.php的設定沒有任何問題,但還是提示這個錯誤,那一定就是這種情況了。 ?解決:對症下藥?打開config.inc.php找到$dbname核實重新配置並保存?同問題四的解決方法

六、Can't open file:'xxx_forums.MYI'. ( errno: 145)

   翻譯:不能開啟xxx_forums.MYI?問題分析:?這種情況是不能開啟cdb_forums.MYI 造成的,造成這種情況可能的原因有:?1、伺服器非正常關機,資料庫所在空間已滿,或一些它未知的原因,對資料庫表造成了損壞。 ?2、類 unix 作業系統下直接將資料庫檔案拷貝移動會因為檔案的屬組問題而產生這個錯誤。 ?解決方法:?1、修復資料表?可以使用下面的兩種方式修復資料表:(第一種方法僅適合獨立主機使用者)?1)使用myisamchk ,MySQL自帶了專門用戶資料表檢查和修復的工具―― myisamchk 。更改目前目錄到MySQL/bin 下面,一般情況下只有在這個下面才能執行 myisamchk 指令。常用的修復指令為:myisamchk-r 資料檔案目錄/資料表名.MYI;?2)透過phpMyAdmin 修復,phpMyAdmin 帶有修復資料表的功能,進入到某一個表中後,點擊“操作”,在下方的「表格維護」中點選「修復表」即可。 ?注意:以上兩種修復方式在執行前一定要備份資料庫。 ?2.修改檔案的屬群組(僅適合獨立主機使用者)?1)複製資料庫檔案的過程中沒有將資料庫檔案設定為MySQL 運作的帳號可讀寫(一般適用於 Linux和 FreeBSD 使用者)。

七、Table'test.xxx_sessions' doesn't exist

   ?翻譯:xxxxx表不存在?分析:在執行sql語句時沒有找到表,例如:SELECT * FROMxxx_members WHERE uid='XX' 這裡如果表xxx_members不存在於$dbname庫裡,那麼就會提示這個錯誤。具體可分為以下三種情況來討論:?安裝插件或hack時修改了程式文件,而忘記了對資料庫作相應的升級。 ?後台使用了不完全備份,導入資料時沒有導入到已經安裝了相應版本的論壇的資料庫中。 ?解決: 同樣對症下藥,不同的原因不同的處理方法。 ?仔細對照插件作者提供的安裝說明,把遺漏的對資料庫的操作補上,如果仍然不能解決問題,那麼應該懷疑該插件的可用性了。去諮詢插件作者,或將其卸載。 ?不要張冠李戴,多大的腳就穿多大的鞋。總之讓程式檔案和資料庫配對即可.

八、Unknown column'column_name' in 'field list'

   翻譯:未知的欄位名稱column_name?分析:在執行sql語句是出現了指定表中沒有的欄位名稱,就會出現這個錯誤。具體導致的原因可分為以下兩種?安裝插件或hack時修改了程式文件,而忘記了對資料庫作相應的升級。 ?程式檔案和資料庫不配套,例如d2.5的資料庫配置給d4.1的程式來用肯定會出現這個錯誤。 ?解決: 導致的原因和問題八的1和 3是相同的,所以解決方法也是一樣。

N、You have an error in yourSQL syntax

   翻譯:有一個語法錯誤在你的sql中?分析:論壇標準的程式是沒有sql語法錯誤的。所以造成這個錯誤的原因一般就兩類?安裝外掛或擅自修改程式。 ?不同的資料庫版本資料庫匯出匯入,像是MySQL4.1的資料在匯出的語句包含了MySQL4.0沒有的功能,像是字元集的設定,這時如果將這些sql導入到MySQL4 .0的時候就會產生sql語法錯誤。 ?解決:?仔細檢查看到底是哪裡的錯誤,將其修正,實在不行就用標準程序把出錯的程序替換。 ?在資料庫備份的時候要留意,如果不打算倒入到其他版本的mysql中則不用特殊考慮,反之要特殊的設定。使用DZ4.1的後台資料備份,可以依照提示去設定想要的格式。獨立主機的也可以在到處的時候將其匯出為mysql4.0的格式。 ?mysqldump -uroot -p--default-character-set=latin1 --set-charset=gbk --skip-opt databse >test.sql

#十、 Duplicate entry 'xxx'for key 1

   翻譯:插入xxx使索引1重複?分析:索引如果是primaryunique這兩兩種,那麼數據表的數據對應的這個字段就必須保證其每筆記錄的唯一性。否則就會產生這個錯誤。 ?一般發生在對資料庫寫入作業的時候,例如Discuz!4.1論壇程式要求所有會員的使用者名稱username必須唯一,即username的索引是unique,這時如果強行往cdb_members表裡插入一個已有的username的記錄就會發上這個錯誤,或是將一筆記錄的username更新為已有的一個username。 ?改變表結構的時候也有可能導致這個錯誤。例如 Discuz!4.0論壇的資料庫中cdb_members.username的索引類型是index這個時候是允許有相同username的記錄存在的,在升級到4.1的時候,因為要將username的索引由原來的index變 為unique。如果這時cdb_members裡面有相同的username的記錄,那麼就會引發這個錯誤。 ?匯出資料據時有時會因為一些原因(作者目前還不清楚)導致同一筆記錄被重複匯出,那麼這個備份資料在匯入的時候出現這個錯誤是在所難免的了。 ?修改了auto_increment的值,致使「下一個Autoindex」為一條已經存在的記錄?解決: 兩種思路,一是破壞掉唯一性的索引。二是把重複的資料記錄幹掉,只保留一筆。很顯然第一種思路是不可取的。那麼按照二的思路我們得到以下幾種解決方法,對應上面的i iiiii?略?按照錯誤提示裡的信息到數據庫中將重複的記錄刪除,僅保留一條即可。之後繼續執行升級操作。 ?這種情況發生的機率很小,可以用文字編輯器開啟備份文檔,尋找重複的資訊。將其多餘的拿掉,僅保留一條即可。 ?查詢出表中auto_increment最大的一筆記錄,設定auto_incerment比其大一即可。 ?PS:repaire table "表名“,可以暫時解決問題。

十一、 Duplicate key name'xxx'

#   ?翻譯:索引名重複?分析:要創建的索引已經存在了,就會引發這個錯誤,這個錯誤多發生在升級的時候。可能是已經升級過的,重複升級所引起的錯誤。也有可能是之前用戶擅自加的索引,剛好與升級檔案中的所以相同了。 ?解決: 看看已經存在的索引和要新增的索引是否一樣,一樣的話可以跳過這條sql語句,如果不一樣那麼現刪除已存在的所以,之後再執行。

2、Duplicate column name'xxx'

   ?翻譯:欄位名稱xxx重複?分析:新增的欄位xxx已經存在,多發生在升級過程中,與問題十二的產生是一樣的。 ?解決: 看一下已經存在的欄位是否和將要新增的欄位屬性完全相同,如果相同則可以跳過不執行這句sql,如果不一樣則刪除掉這個欄位。之後繼續執行升級程序。

十三、 Table 'xxx' alreadyexists

   ?翻譯:資料表xxx已經存在?分析:xxx表已經存在於庫中,再次試圖創建這個名字的表就會引發這個錯誤。同樣多發生在論壇的升級。類似問題十二。 ?解決: 看看已經存在的表是否和將要建立的表完全一樣,一樣的話可以跳過不執行這個sql,否則請將存在的表先刪除,之後繼續執行升級檔。

#14, Can't create database'xxx'. Database exists

   翻譯:不能建立資料庫xxx,資料庫已經存在?分析:一個mysql下面的資料庫名稱必須保證唯一性,否則就會有這個錯誤。 ?解決:把已經存在的資料庫改名或把將要建立的資料庫改名,總之不讓他們的名稱衝突。

十五、 小結(針對問題11\12\13\14\15)

   此類問題錯誤提示中都隱藏一個關鍵字duplicate(重複) ?那麼對於mysql資料庫來說什麼東西是不能重複的呢? ?資料庫database?同一個資料庫下資料表table?同一個資料表下欄位column?同一個資料表下索引key?同一個資料表在索引唯一(UNIQUEPRIMARY)的情況下記錄中的這些欄位不可以重複

十六、Unknown system variable'NAMES'

   ?翻譯:未知的系統變數NAMES?解析:Mysql版本不支援字元集設定,此時強行設定字元集就會出現這個錯誤。 ?解決: 將sql語句中的SET NAMES 'xxx' 語句去掉


十七、Lost connection toMySQL server during query?

#    翻譯:MySQL伺服器失去連線在查詢期間?分析:遠端連線資料庫是有時會有這個問題。 MySQL伺服器在執行一條sql語句的時候失去了連線造成的。 ?解決: 一般不需要怎麼去處理,如果頻繁的出現那麼考慮改善硬體環境。

11、User 'red' has exceededthe 'max_updates' resource (current value: 500)

   翻譯:msql用戶red已經超過了'max_updates'(最大更新次數),'max_questions'(最大查詢次數),'max_connections'(最大連線數),目前設定為500?分析:在mysql資料庫的下方有一個函式庫為mysql,它其中有一個表為user面的紀錄每一則對應為一個mysql用戶的授權。其中欄位max_questions max_updates max_connections分別記錄最大查詢次數 最大更新數 最大連線數,當目前的任何一個參數大於任何一個設定的值就會產生這個錯誤。 ?解決: 獨立主機使用者可以直接修改授權表。修改完後重啟mysql或跟新授權表,進入mysql提示字元下執行?FLUSH PRIVILEGES;?記得後面要有分號';'?虛擬主機的使用者如果總是出現這個問題可找空間商協商解決。

(十九、Too many connections(1040)連結過多?

   翻譯:達到最大連結數?問題分析:?連線數超過了mysql設定的值,與max_connections和wait_timeout 都有關係。 wait_timeout的值越大,連線的空閒等待就越長,這樣就會造成目前連線數越大?解決方法:?1.虛擬主機使用者請聯絡空間商優化MySQL 伺服器的設定;?2.獨立主機使用者請聯絡伺服器管理員最佳化MySQL 伺服器的配置,可參考:?修改MySQL 設定檔 my.ini 或my.cnf 中的參數:?max_connections= 1000?wait_timeout = 10?修改後重新啟動MySQL ,如果經常性的報此錯誤,請做一下伺服器的整體最佳化。

二十、There is no such grantdefined for user '%s' on host '%s'?

   錯誤編號:1141?問題分析:?MySQL當前使用者無權存取資料庫。 ?解決方法:?1、虛擬主機使用者請聯絡空間商,確認給你提供的帳號是否有授權資料庫的權限。 ?2.獨立主機使用者請聯絡伺服器管理員,確認給您提供的資料庫帳號是否有管理此資料庫的權限。

二十一、Error on rename of '%s'to '%s' (errno: %d)?error.:1025?
##    問題分析: ?請檢查一下您的程式是否有修改資料庫表名的語句。 ?解決方法:?1.請檢查您的程式中哪些地方需要修改資料庫表名;?2.如果您的實際應用確實需要修改到資料庫表名的話,請聯絡空間商或伺服器管理員給您開放修改庫名的權限和伺服器本身是否正常。



二十二、Error reading file '%s'(errno: %d)?error.:1023?
   問題分析:?資料庫文件不能被讀取。 ?解決方法:?1.虛擬主機使用者請聯絡空間商查看資料庫是否完好。 ?2.獨立主機使用者請聯絡伺服器管理員檢查一下MySQL 本身是否正常, MySQL 是否可以讀取文件,Linux 使用者可以檢查一下MySQL 的資料庫檔案的屬主是否正確以及本身的檔案是否損壞。



二十三、Host '*****' is blockedbecause of many connection errors; unblock with 'mysqladmin flush-hosts'?error.:1129
   問題分析:?資料庫出現異常,請重新啟動資料庫。 ?解決方法:?1. 由於存在許多連線錯誤,主機'****'被封鎖,虛擬主機使用者請聯絡空間商處理,獨立主機使用者請聯絡伺服器管理員,在MySQL 的命令控制台下執行' mysqladmin flush-hosts'解除屏蔽即可,或重新啟動MySQL 資料庫



二十四、dropping database (can'tdelete '%s', errno: %d)?error.: 1009?
   問題分析:?無法刪除資料庫文件,導致刪除資料庫失敗。 ?解決方法:?1.檢查您使用的資料庫管理帳號是否有權限刪除資料。 ?2.檢查資料庫是否存在。



二十五、Got error 28 from tablehandler?error.:1030?
   問題分析:?資料庫所在磁碟空間已滿。 ?解決方法:?1.虛擬主機使用者請聯絡空間商增加MySQL 所在的磁碟空間或清理一些無用檔案;?2.獨立主機使用者請聯絡伺服器管理員增加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?
   問題分析:?資料庫伺服器問題,資料庫操作無法建立新執行緒。一般是兩個原因:?1.伺服器系統記憶體溢位。 ?2.環境軟體損壞或系統損壞。 ?解決方法:?1.虛擬主機使用者請聯絡下空間商資料庫伺服器的記憶體和系統是否正常。 ?2.獨立主機用戶請聯絡伺服器管理員檢查伺服器的內存和系統是否正常,如果伺服器內存緊張,請檢查一下哪些進程消耗了伺服器的內存,同時考慮是否增加伺服器的內存來提高整個的負載能力。



二十七、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?一般情況下都可以解決。如果還出現這種錯誤,可以按照下面的方法來做:?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?

   問題分析:?出現這個錯誤一般情況下是因為下面兩個原因:?1.MySQL 伺服器沒有開啟。 ?2.MySQL 伺服器開啟了,但不能找到 socket 檔。 ?解決方法:?1.虛擬主機用戶,請聯絡空間商確認資料庫是否正常啟動。 ?2.獨立主機用戶,請檢查MySQL 服務是否已經開啟,沒有開啟,請啟動MySQL 服務;如果已經開啟,並且是Linux 系統,請檢查一下MySQL 的socket 的路徑,然後打開config.inc.php 找到?$dbhost = 'localhost'; 在hostname 後面加上冒號':'和MySQL 的socket 的路徑。 ?例如MySQL 伺服器為localhost?MySQL的socket 的路徑為/tmp/mysql.sock?那麼就改成如下:?$dbhost= 'localhost:/temp/mysql.sock';


#二十九、Can't connect to MySQLserver on 'localhost'?error.:2003?

   問題分析:?MySQL服務沒有啟動,通常是在異常的情況下MySQL 無法啟動導致的,例如無可用的磁碟空間,my.ini裡MySQL 的basedir 路徑設定錯誤等。 ?解決方法:?1.檢查磁碟空間是否還有剩餘可用空間,盡量保持有足夠的磁碟空間可用。 ?2.檢查 my.ini 裡的basedir 等參數設定是否正確,然後重新啟動下 MySQL 服務。

三十、Lost connection to MySQLserver during query?error.:2013

   ?問題分析:?資料庫查詢過程中遺失了與MySQL 伺服器的連線。 ?解決方法:?1.請確認您的程序中是否有效率很低的程序,比如某些插件,可以卸載掉插件,檢查一下伺服器是否正常;?2.伺服器本身資源緊張,虛擬主機用戶請聯繫空間商確認,獨立主機使用者請聯絡伺服器管理員,檢查伺服器是否正常。


三十一、Got a packet bigger than\'max_allowed_pa​​cket\' bytes?

   錯誤編號:1153?問題分析:調整了Mantis 的上傳附件的大小卻沒有調整MySQL 的設定檔。 ?解決方法:?1、獨立主機使用者請依照以下方法調整:?尋找MySQL 的設定檔(my.cnf 或my.ini)?在[mysqld] 部分加一句(如果存在,調整其值就可以): ?max_allowed_pa​​cket=10M?重啟MySQL 服務就可以了。這裡設定的是 10MB。


以上是MySQL 常見的錯誤以及解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn