作為網(wǎng)站所有者,您需要管理登錄您網(wǎng)站的瀏覽者和在線客戶的數(shù)據(jù)。好吧,您不能一直手動存儲數(shù)據(jù)。因此,您需要一個程序來讓您更輕松地存儲和收集數(shù)據(jù)。好吧,MySQL 是可以讓網(wǎng)站所有者執(zhí)行這些任務(wù)的程序。MySQL 基于關(guān)系數(shù)據(jù)庫管理系統(tǒng) (RDBMS)。它是使用最廣泛的數(shù)據(jù)庫管理系統(tǒng) (DBMS) 之一,由于其開源許可,無論大小公司都可以充分利用它,而無需擔(dān)心訂閱費用。
但是,當(dāng)您使用開源應(yīng)用程序或平臺時,您不會找到技術(shù)支持來解決您在使用它時可能遇到的任何問題。網(wǎng)絡(luò)論壇和同一開源平臺的其他用戶可以幫助您解決問題。為了幫助剛接觸 MySQL 數(shù)據(jù)庫的用戶,我們提供了一些在使用該程序時可能遇到的最常見錯誤的列表,從而使錯誤解決變得更加容易。除了錯誤列表,我們還提供相同的解決方案。
MySQL 中的常見錯誤
因此,既然您已經(jīng)了解了使用 MySQL 的好處,那么是時候看看使用 MySQL 處理數(shù)據(jù)庫時可能遇到的常見錯誤了。
1. Mysql Server 消失了
使用遠程數(shù)據(jù)庫時,您將收到的最常見錯誤之一是以MySQL Server Gone Away的形式呈現(xiàn)的服務(wù)器問題。如果顯示此錯誤,則如果數(shù)據(jù)庫中沒有發(fā)生任何更改,則服務(wù)器將在 8 小時后終止連接。但是您可以在啟動mysqld時手動設(shè)置時間限制。
除此之外,您收到此錯誤的另一個原因是您可能已將“關(guān)閉”添加到您的 MySQL 連接。一旦此命令處于活動狀態(tài),您嘗試在數(shù)據(jù)庫上運行的所有查詢都將不起作用,因為沒有關(guān)閉連接。
- CR_SERVER_GONE_ERROR:此錯誤表明試圖訪問數(shù)據(jù)庫的客戶端無法將問題發(fā)送到數(shù)據(jù)庫服務(wù)器。
- CR_SERVER_LOST:客戶端在發(fā)送請求時沒有收到完整的答案,或者在某些情況下,沒有收到來自服務(wù)器端的任何答案。
當(dāng)有人在使用服務(wù)器數(shù)據(jù)庫時錯誤地對正在運行的線程激活了kill?功能時,就會出現(xiàn)這兩個錯誤。要檢查 MySQL 是否還沒有死,可以執(zhí)行以下命令mysqladmin version。使用此命令,您將能夠找到數(shù)據(jù)庫的正常運行時間。如果由于某種原因,mysqld崩潰了,那么你需要重點尋找它崩潰的原因。
此外,在向服務(wù)器發(fā)送不正確或太大而無法處理的請求時,您可能會遇到此錯誤。如果mysqld從用戶那里收到一個非常大的數(shù)據(jù)包,它會認為用戶端發(fā)生了一些錯誤并中斷連接。
2.密碼失敗
每當(dāng)您與 MySQL 客戶端建立連接時,它都會要求您輸入密碼。此密碼有助于調(diào)用客戶端程序。您可以使用以下命令在 MySQL 中輸入密碼:
> mysql -u 用戶名 -p
出現(xiàn)提示時,鍵入密碼。如果您提供了選項文件或使用了命令行,則密碼可以完美運行。但是當(dāng)您在命令提示符上交互輸入密碼時,它會要求您輸入密碼。發(fā)生錯誤。在命令提示符下輸入相同密碼失敗的原因是系統(tǒng)提供的讀取用戶輸入密碼的庫將密碼值限制為很小的數(shù)字;在大多數(shù)情況下,它是八。
嗯,這是系統(tǒng)庫的問題,這個錯誤與MySQL無關(guān)。要解決此問題,您需要更改您正在使用的密碼并將其設(shè)置在八個字符的限制之下。
3.連接太多
當(dāng)您嘗試與mysqld服務(wù)器建立連接時,這意味著所有可用的連接都已在使用中。您可以在這里做兩件事,或者等待連接關(guān)閉,以便將您的連接與服務(wù)器連接。或者您可以要求服務(wù)器所有者增加與他們的 mysqld 的連接數(shù)。
要記住的一件事是mysqld服務(wù)器允許max_connections?+?1權(quán)限。max_connections附帶的額外連接是為具有管理員權(quán)限的帳戶保留的。
4. 內(nèi)存不足
有時當(dāng)您嘗試在 MySQL 中添加新數(shù)據(jù)時,它會顯示“內(nèi)存不足”錯誤。當(dāng) MySQL 內(nèi)存中沒有足夠空間用于您發(fā)出的查詢的整個請求時,就會發(fā)生這種情況。要修復(fù)此錯誤,您需要首先檢查您輸入的查詢是否正確?檢查查詢是否打算在單個輸出中返回那么多行。如果沒有,您需要對查詢進行更改并編寫正確的查詢。
另一方面,如果查詢沒問題,并且沒有需要進行更正,那么我們需要查找 MySQL 引起的問題。使用這樣的快速選項結(jié)果:mysql_use_result()
5. 包大小過大
面臨這個錯誤的原因有很多。數(shù)據(jù)包可以是您發(fā)送到 MySQL 服務(wù)器的單個 SQL 語句。此外,您將單行發(fā)送到服務(wù)器。最后,當(dāng)使用復(fù)制主服務(wù)器發(fā)送日志事件時,可能會發(fā)生錯誤。MySQL 接受的最大數(shù)據(jù)包大小為 1GB。這是可以從 MySQL 服務(wù)器發(fā)送和接收的最大大小。要增加數(shù)據(jù)包接受的大小,您需要編寫以下命令:
> mysql –max_allowed_pa??cket=32M
MySQL 的默認值僅為 64MB,因此增加其大小是每個用戶在開始使用 MySQL 之前必須做的一件事。變量的增加是一個預(yù)防步驟,以避免因大小而面臨錯誤。
6.通訊錯誤
使用較新版本的 MySQL 或 3.23.40 之后的版本,如果您啟動帶有警告的mysqld,用戶只會收到通信錯誤。如果您在錯誤日志中發(fā)現(xiàn)錯誤,則意味著您的 MySQL 中的以下問題之一導(dǎo)致了此問題。
- 該錯誤可能是由于您的計算機上運行的程序在您退出之前沒有調(diào)用mysql_close ()。
- 客戶端服務(wù)器處于睡眠狀態(tài)超過wait_timeout或interactive_timeout而不提供任何請求。
- 您正在運行的程序在傳輸過程中突然關(guān)閉。
- 除此之外,當(dāng)您使用錯誤的密碼時。
- 最后,當(dāng)服務(wù)器花費超過connect_timeout秒來與包建立連接時。
7. 表滿錯誤
當(dāng)您用于 MySQL 的磁盤已滿,或者您插入新值的表已達到其最大限制時,會發(fā)生此錯誤。MySQL 數(shù)據(jù)庫的最大大小取決于操作系統(tǒng)的限制。您需要知道 MySQL 對表的大小沒有任何內(nèi)部限制。要解決此錯誤,您首先需要查找分區(qū)以確保它未滿并首先導(dǎo)致錯誤。如果磁盤空間不是問題,請檢查變量innob_data_file_path以查看是否已定義最大表大小。
8. 命令不同步
當(dāng)你的 MySQL 發(fā)生這個錯誤時,這意味著你在調(diào)用客戶端函數(shù)時做了一些事情,但在大多數(shù)情況下,它是函數(shù)的錯誤順序。MySQL 通過使用半雙工響應(yīng)系統(tǒng)與客戶端進行通信來工作。因此,當(dāng)您鍵入要發(fā)送到服務(wù)器的查詢時,服務(wù)器將強制將結(jié)果發(fā)送給您。發(fā)生這種情況時,您需要執(zhí)行mysql_use_result()或mysql_store_result()來檢索服務(wù)器正在發(fā)送的結(jié)果。這將導(dǎo)致完整的查詢交互,因此您不會遇到此錯誤。但是如果你向服務(wù)器提交查詢?nèi)缓蟛换卣{(diào)結(jié)果,錯誤會再次出現(xiàn)。
另一方面,有些查詢沒有任何結(jié)果要返回。在此類查詢中,您可以使用mysql_rows(_pstMql)。此查詢將向您發(fā)送由您的查詢更新的記錄數(shù)。
作為 MySQL 用戶,您需要了解有關(guān)該程序的一件事是,當(dāng)您使用多線程時。您必須確保每個線程都有自己獨立的 Mysql 來訪問數(shù)據(jù)庫。如果您不遵循這種工作方式,您的一個線程可能無法保存結(jié)果集,并且在保存結(jié)果之前,第二個線程將啟動對數(shù)據(jù)庫的新查詢。因此,導(dǎo)致命令不同步。
9. 表名無效
很多人將此錯誤與從服務(wù)器刪除數(shù)據(jù)庫或從服務(wù)器刪除表混淆。您收到此錯誤的原因可能有很多。您可能輸入了錯誤的表名,或者您不正確地引用了您的表。作為程序員,您需要知道 MySQL 服務(wù)器是通過使用目錄和文件來存儲數(shù)據(jù)庫表的。該功能依賴于操作系統(tǒng)文件管理。此外,您用于表的名稱可能區(qū)分大小寫,因此請確保您正確檢查了表的名稱。
如果名稱沒有問題,您應(yīng)該重新啟動 MySQL 服務(wù)器,因為有時由于服務(wù)器關(guān)閉不當(dāng)而顯示此錯誤。如果問題仍然存在,您需要使用以下命令修復(fù)數(shù)據(jù)庫中的表:
修復(fù)表Table_name;
另一方面,您可以嘗試恢復(fù)為數(shù)據(jù)庫創(chuàng)建的備份并運行該備份表。如果所有這些方法對您沒有幫助,那么您需要復(fù)制備份中存在的 ibdata 文件,并啟用 InnoDB 崩潰恢復(fù)。請注意,在開始最后提到的過程之前,您必須對所有數(shù)據(jù)庫文件進行良好備份。
10. 主機名被封鎖
發(fā)生此錯誤的主要原因是當(dāng)您這邊有太多的連接請求在兩者之間被中斷時。您可以更改連續(xù)中斷的連接請求可接受的最大變量數(shù)。一旦有max_connect_errors數(shù)字繞過,服務(wù)器將假定您的端有問題。因此,它會阻止您的連接,直到您運行FLUSH?HOSTS。此查詢將取出存儲在 MySQL 服務(wù)器中的連接記錄。mysqld 服務(wù)器max_connect_errors的默認值為 100 個錯誤。您可以使用以下查詢來調(diào)整它們:
> mysqld_safe –max_connect_errors=10000
在對服務(wù)器設(shè)置進行任何更改之前,請確保檢查您的 TCP/IP 連接是否有問題,因為用戶很難在短時間內(nèi)犯 100 次錯誤。如果您的網(wǎng)絡(luò)出現(xiàn)問題,那么增加max_connect_errors不會幫助您解決錯誤。
結(jié)論
數(shù)據(jù)庫錯誤可能會迅速停止您的正常工作,如果問題持續(xù)太久,它還會影響您網(wǎng)站的穩(wěn)定性。使用此快速指南,您將能夠立即處理常見的 MySQL 錯誤并使您的數(shù)據(jù)庫恢復(fù)正常工作。
該數(shù)據(jù)庫是任何在線網(wǎng)絡(luò)服務(wù)的一個組成部分。將其停機時間保持在最低限度必須是 Web 開發(fā)人員和網(wǎng)站所有者的首要任務(wù)。我們希望這篇文章能幫助您解決您在 MySQL 中遇到的問題。我們上面提供的解決方案和方法甚至可以由非技術(shù)人員執(zhí)行。如果您的數(shù)據(jù)庫中仍然存在錯誤,那么您必須立即致電專家并快速解決問題,不要浪費任何時間。