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