作為網(wǎng)站所有者,您需要管理登錄您網(wǎng)站的瀏覽者和在線(xiàn)客戶(hù)的數(shù)據(jù)。好吧,您不能一直手動(dòng)存儲(chǔ)數(shù)據(jù)。因此,您需要一個(gè)程序來(lái)讓您更輕松地存儲(chǔ)和收集數(shù)據(jù)。好吧,MySQL 是可以讓網(wǎng)站所有者執(zhí)行這些任務(wù)的程序。MySQL 基于關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng) (RDBMS)。它是使用最廣泛的數(shù)據(jù)庫(kù)管理系統(tǒng) (DBMS) 之一,由于其開(kāi)源許可,無(wú)論大小公司都可以充分利用它,而無(wú)需擔(dān)心訂閱費(fèi)用。

但是,當(dāng)您使用開(kāi)源應(yīng)用程序或平臺(tái)時(shí),您不會(huì)找到技術(shù)支持來(lái)解決您在使用它時(shí)可能遇到的任何問(wèn)題。網(wǎng)絡(luò)論壇和同一開(kāi)源平臺(tái)的其他用戶(hù)可以幫助您解決問(wèn)題。為了幫助剛接觸 MySQL 數(shù)據(jù)庫(kù)的用戶(hù),我們提供了一些在使用該程序時(shí)可能遇到的最常見(jiàn)錯(cuò)誤的列表,從而使錯(cuò)誤解決變得更加容易。除了錯(cuò)誤列表,我們還提供相同的解決方案。
MySQL 中的常見(jiàn)錯(cuò)誤
因此,既然您已經(jīng)了解了使用 MySQL 的好處,那么是時(shí)候看看使用 MySQL 處理數(shù)據(jù)庫(kù)時(shí)可能遇到的常見(jiàn)錯(cuò)誤了。
1. Mysql Server 消失了
使用遠(yuǎn)程數(shù)據(jù)庫(kù)時(shí),您將收到的最常見(jiàn)錯(cuò)誤之一是以MySQL Server Gone Away的形式呈現(xiàn)的服務(wù)器問(wèn)題。如果顯示此錯(cuò)誤,則如果數(shù)據(jù)庫(kù)中沒(méi)有發(fā)生任何更改,則服務(wù)器將在 8 小時(shí)后終止連接。但是您可以在啟動(dòng)mysqld時(shí)手動(dòng)設(shè)置時(shí)間限制。
除此之外,您收到此錯(cuò)誤的另一個(gè)原因是您可能已將“關(guān)閉”添加到您的 MySQL 連接。一旦此命令處于活動(dòng)狀態(tài),您嘗試在數(shù)據(jù)庫(kù)上運(yùn)行的所有查詢(xún)都將不起作用,因?yàn)闆](méi)有關(guān)閉連接。
- CR_SERVER_GONE_ERROR:此錯(cuò)誤表明試圖訪問(wèn)數(shù)據(jù)庫(kù)的客戶(hù)端無(wú)法將問(wèn)題發(fā)送到數(shù)據(jù)庫(kù)服務(wù)器。
- CR_SERVER_LOST:客戶(hù)端在發(fā)送請(qǐng)求時(shí)沒(méi)有收到完整的答案,或者在某些情況下,沒(méi)有收到來(lái)自服務(wù)器端的任何答案。

當(dāng)有人在使用服務(wù)器數(shù)據(jù)庫(kù)時(shí)錯(cuò)誤地對(duì)正在運(yùn)行的線(xiàn)程激活了kill?功能時(shí),就會(huì)出現(xiàn)這兩個(gè)錯(cuò)誤。要檢查 MySQL 是否還沒(méi)有死,可以執(zhí)行以下命令mysqladmin version。使用此命令,您將能夠找到數(shù)據(jù)庫(kù)的正常運(yùn)行時(shí)間。如果由于某種原因,mysqld崩潰了,那么你需要重點(diǎn)尋找它崩潰的原因。
此外,在向服務(wù)器發(fā)送不正確或太大而無(wú)法處理的請(qǐng)求時(shí),您可能會(huì)遇到此錯(cuò)誤。如果mysqld從用戶(hù)那里收到一個(gè)非常大的數(shù)據(jù)包,它會(huì)認(rèn)為用戶(hù)端發(fā)生了一些錯(cuò)誤并中斷連接。
2.密碼失敗
每當(dāng)您與 MySQL 客戶(hù)端建立連接時(shí),它都會(huì)要求您輸入密碼。此密碼有助于調(diào)用客戶(hù)端程序。您可以使用以下命令在 MySQL 中輸入密碼:
> mysql -u 用戶(hù)名 -p
出現(xiàn)提示時(shí),鍵入密碼。如果您提供了選項(xiàng)文件或使用了命令行,則密碼可以完美運(yùn)行。但是當(dāng)您在命令提示符上交互輸入密碼時(shí),它會(huì)要求您輸入密碼。發(fā)生錯(cuò)誤。在命令提示符下輸入相同密碼失敗的原因是系統(tǒng)提供的讀取用戶(hù)輸入密碼的庫(kù)將密碼值限制為很小的數(shù)字;在大多數(shù)情況下,它是八。
嗯,這是系統(tǒng)庫(kù)的問(wèn)題,這個(gè)錯(cuò)誤與MySQL無(wú)關(guān)。要解決此問(wèn)題,您需要更改您正在使用的密碼并將其設(shè)置在八個(gè)字符的限制之下。

3.連接太多
當(dāng)您嘗試與mysqld服務(wù)器建立連接時(shí),這意味著所有可用的連接都已在使用中。您可以在這里做兩件事,或者等待連接關(guān)閉,以便將您的連接與服務(wù)器連接。或者您可以要求服務(wù)器所有者增加與他們的 mysqld 的連接數(shù)。
要記住的一件事是mysqld服務(wù)器允許max_connections?+?1權(quán)限。max_connections附帶的額外連接是為具有管理員權(quán)限的帳戶(hù)保留的。
4. 內(nèi)存不足
有時(shí)當(dāng)您嘗試在 MySQL 中添加新數(shù)據(jù)時(shí),它會(huì)顯示“內(nèi)存不足”錯(cuò)誤。當(dāng) MySQL 內(nèi)存中沒(méi)有足夠空間用于您發(fā)出的查詢(xún)的整個(gè)請(qǐng)求時(shí),就會(huì)發(fā)生這種情況。要修復(fù)此錯(cuò)誤,您需要首先檢查您輸入的查詢(xún)是否正確?檢查查詢(xún)是否打算在單個(gè)輸出中返回那么多行。如果沒(méi)有,您需要對(duì)查詢(xún)進(jìn)行更改并編寫(xiě)正確的查詢(xún)。
另一方面,如果查詢(xún)沒(méi)問(wèn)題,并且沒(méi)有需要進(jìn)行更正,那么我們需要查找 MySQL 引起的問(wèn)題。使用這樣的快速選項(xiàng)結(jié)果:mysql_use_result()
5. 包大小過(guò)大
面臨這個(gè)錯(cuò)誤的原因有很多。數(shù)據(jù)包可以是您發(fā)送到 MySQL 服務(wù)器的單個(gè) SQL 語(yǔ)句。此外,您將單行發(fā)送到服務(wù)器。最后,當(dāng)使用復(fù)制主服務(wù)器發(fā)送日志事件時(shí),可能會(huì)發(fā)生錯(cuò)誤。MySQL 接受的最大數(shù)據(jù)包大小為 1GB。這是可以從 MySQL 服務(wù)器發(fā)送和接收的最大大小。要增加數(shù)據(jù)包接受的大小,您需要編寫(xiě)以下命令:
> mysql –max_allowed_pa??cket=32M
MySQL 的默認(rèn)值僅為 64MB,因此增加其大小是每個(gè)用戶(hù)在開(kāi)始使用 MySQL 之前必須做的一件事。變量的增加是一個(gè)預(yù)防步驟,以避免因大小而面臨錯(cuò)誤。

6.通訊錯(cuò)誤
使用較新版本的 MySQL 或 3.23.40 之后的版本,如果您啟動(dòng)帶有警告的mysqld,用戶(hù)只會(huì)收到通信錯(cuò)誤。如果您在錯(cuò)誤日志中發(fā)現(xiàn)錯(cuò)誤,則意味著您的 MySQL 中的以下問(wèn)題之一導(dǎo)致了此問(wèn)題。
- 該錯(cuò)誤可能是由于您的計(jì)算機(jī)上運(yùn)行的程序在您退出之前沒(méi)有調(diào)用mysql_close ()。
- 客戶(hù)端服務(wù)器處于睡眠狀態(tài)超過(guò)wait_timeout或interactive_timeout而不提供任何請(qǐng)求。
- 您正在運(yùn)行的程序在傳輸過(guò)程中突然關(guān)閉。
- 除此之外,當(dāng)您使用錯(cuò)誤的密碼時(shí)。
- 最后,當(dāng)服務(wù)器花費(fèi)超過(guò)connect_timeout秒來(lái)與包建立連接時(shí)。
7. 表滿(mǎn)錯(cuò)誤
當(dāng)您用于 MySQL 的磁盤(pán)已滿(mǎn),或者您插入新值的表已達(dá)到其最大限制時(shí),會(huì)發(fā)生此錯(cuò)誤。MySQL 數(shù)據(jù)庫(kù)的最大大小取決于操作系統(tǒng)的限制。您需要知道 MySQL 對(duì)表的大小沒(méi)有任何內(nèi)部限制。要解決此錯(cuò)誤,您首先需要查找分區(qū)以確保它未滿(mǎn)并首先導(dǎo)致錯(cuò)誤。如果磁盤(pán)空間不是問(wèn)題,請(qǐng)檢查變量innob_data_file_path以查看是否已定義最大表大小。
8. 命令不同步
當(dāng)你的 MySQL 發(fā)生這個(gè)錯(cuò)誤時(shí),這意味著你在調(diào)用客戶(hù)端函數(shù)時(shí)做了一些事情,但在大多數(shù)情況下,它是函數(shù)的錯(cuò)誤順序。MySQL 通過(guò)使用半雙工響應(yīng)系統(tǒng)與客戶(hù)端進(jìn)行通信來(lái)工作。因此,當(dāng)您鍵入要發(fā)送到服務(wù)器的查詢(xún)時(shí),服務(wù)器將強(qiáng)制將結(jié)果發(fā)送給您。發(fā)生這種情況時(shí),您需要執(zhí)行mysql_use_result()或mysql_store_result()來(lái)檢索服務(wù)器正在發(fā)送的結(jié)果。這將導(dǎo)致完整的查詢(xún)交互,因此您不會(huì)遇到此錯(cuò)誤。但是如果你向服務(wù)器提交查詢(xún)?nèi)缓蟛换卣{(diào)結(jié)果,錯(cuò)誤會(huì)再次出現(xiàn)。

另一方面,有些查詢(xún)沒(méi)有任何結(jié)果要返回。在此類(lèi)查詢(xún)中,您可以使用mysql_rows(_pstMql)。此查詢(xún)將向您發(fā)送由您的查詢(xún)更新的記錄數(shù)。
作為 MySQL 用戶(hù),您需要了解有關(guān)該程序的一件事是,當(dāng)您使用多線(xiàn)程時(shí)。您必須確保每個(gè)線(xiàn)程都有自己獨(dú)立的 Mysql 來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。如果您不遵循這種工作方式,您的一個(gè)線(xiàn)程可能無(wú)法保存結(jié)果集,并且在保存結(jié)果之前,第二個(gè)線(xiàn)程將啟動(dòng)對(duì)數(shù)據(jù)庫(kù)的新查詢(xún)。因此,導(dǎo)致命令不同步。
9. 表名無(wú)效
很多人將此錯(cuò)誤與從服務(wù)器刪除數(shù)據(jù)庫(kù)或從服務(wù)器刪除表混淆。您收到此錯(cuò)誤的原因可能有很多。您可能輸入了錯(cuò)誤的表名,或者您不正確地引用了您的表。作為程序員,您需要知道 MySQL 服務(wù)器是通過(guò)使用目錄和文件來(lái)存儲(chǔ)數(shù)據(jù)庫(kù)表的。該功能依賴(lài)于操作系統(tǒng)文件管理。此外,您用于表的名稱(chēng)可能區(qū)分大小寫(xiě),因此請(qǐng)確保您正確檢查了表的名稱(chēng)。
如果名稱(chēng)沒(méi)有問(wèn)題,您應(yīng)該重新啟動(dòng) MySQL 服務(wù)器,因?yàn)橛袝r(shí)由于服務(wù)器關(guān)閉不當(dāng)而顯示此錯(cuò)誤。如果問(wèn)題仍然存在,您需要使用以下命令修復(fù)數(shù)據(jù)庫(kù)中的表:
修復(fù)表Table_name;
另一方面,您可以嘗試恢復(fù)為數(shù)據(jù)庫(kù)創(chuàng)建的備份并運(yùn)行該備份表。如果所有這些方法對(duì)您沒(méi)有幫助,那么您需要復(fù)制備份中存在的 ibdata 文件,并啟用 InnoDB 崩潰恢復(fù)。請(qǐng)注意,在開(kāi)始最后提到的過(guò)程之前,您必須對(duì)所有數(shù)據(jù)庫(kù)文件進(jìn)行良好備份。
10. 主機(jī)名被封鎖
發(fā)生此錯(cuò)誤的主要原因是當(dāng)您這邊有太多的連接請(qǐng)求在兩者之間被中斷時(shí)。您可以更改連續(xù)中斷的連接請(qǐng)求可接受的最大變量數(shù)。一旦有max_connect_errors數(shù)字繞過(guò),服務(wù)器將假定您的端有問(wèn)題。因此,它會(huì)阻止您的連接,直到您運(yùn)行FLUSH?HOSTS。此查詢(xún)將取出存儲(chǔ)在 MySQL 服務(wù)器中的連接記錄。mysqld 服務(wù)器max_connect_errors的默認(rèn)值為 100 個(gè)錯(cuò)誤。您可以使用以下查詢(xún)來(lái)調(diào)整它們:
> mysqld_safe –max_connect_errors=10000
在對(duì)服務(wù)器設(shè)置進(jìn)行任何更改之前,請(qǐng)確保檢查您的 TCP/IP 連接是否有問(wèn)題,因?yàn)橛脩?hù)很難在短時(shí)間內(nèi)犯 100 次錯(cuò)誤。如果您的網(wǎng)絡(luò)出現(xiàn)問(wèn)題,那么增加max_connect_errors不會(huì)幫助您解決錯(cuò)誤。

結(jié)論
數(shù)據(jù)庫(kù)錯(cuò)誤可能會(huì)迅速停止您的正常工作,如果問(wèn)題持續(xù)太久,它還會(huì)影響您網(wǎng)站的穩(wěn)定性。使用此快速指南,您將能夠立即處理常見(jiàn)的 MySQL 錯(cuò)誤并使您的數(shù)據(jù)庫(kù)恢復(fù)正常工作。
該數(shù)據(jù)庫(kù)是任何在線(xiàn)網(wǎng)絡(luò)服務(wù)的一個(gè)組成部分。將其停機(jī)時(shí)間保持在最低限度必須是 Web 開(kāi)發(fā)人員和網(wǎng)站所有者的首要任務(wù)。我們希望這篇文章能幫助您解決您在 MySQL 中遇到的問(wèn)題。我們上面提供的解決方案和方法甚至可以由非技術(shù)人員執(zhí)行。如果您的數(shù)據(jù)庫(kù)中仍然存在錯(cuò)誤,那么您必須立即致電專(zhuān)家并快速解決問(wèn)題,不要浪費(fèi)任何時(shí)間。






