首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 常見錯誤代碼速查手冊(含原因與對策)

     編輯:MySQL 綜合教學

前言

本文整理自 MySQL 原始碼 mysql/include/mysqld_error.h,涵蓋開發與運維中高頻出現的錯誤代碼,附帶中文說明與排查建議,方便快速定位問題。

核心錯誤代碼分類表

資料庫/資料表操作類

代碼含義常見原因與對策
1005建立資料表失敗外鍵定義錯誤、引用表不存在、字元集不一致
1006建立資料庫失敗權限不足、磁碟空間不足、目錄已存在
1007資料庫已存在重複 CREATE DATABASE,改用 CREATE DATABASE IF NOT EXISTS
1008資料庫不存在拼寫錯誤、未建立、大小寫敏感(Linux)
1009無法刪除資料庫檔案檔案被鎖定、權限問題、手動刪除殘留
1010無法刪除資料目錄目錄非空、權限不足
1011刪除資料庫檔案失敗同上,檢查 datadir 權限
1012無法讀取系統表記錄權限表損壞,執行 mysql_upgrade
1050資料表已存在重複建表,使用 IF NOT EXISTS 或先 DROP
1051資料表不存在拼寫錯誤、大小寫、表已被刪除
1146資料表不存在同 1051,常見於應用程式 SQL 拼寫

記錄/索引/鍵值衝突類

代碼含義常見原因與對策
1022關鍵字重複,修改記錄失敗主鍵/唯一索引衝突,檢查業務邏輯去重
1032記錄不存在UPDATE/DELETE 影響 0 行,確認 WHERE 條件
1048欄位不能為空NOT NULL 欄位未賦值,調整預設值或應用層驗證
1054欄位不存在拼寫錯誤、Schema 變更未同步、大小寫敏感
1062欄位值重複,入庫失敗唯一鍵衝突(如手機號、身分證),捕獲異常處理
1169欄位值重複,更新失敗同 1062,發生於 UPDATE

連線/權限/資源類

代碼含義常見原因與對策
1040達到最大連線數調大 max_connections、檢查連線洩漏、啟用連線池
1041系統記憶體不足檢查 innodb_buffer_pool_size、排序緩衝區設定
1042無效主機名DNS 解析失敗、skip-name-resolve、/etc/hosts 配置
1043無效連線連線已斷、逾時、防火牆截斷
1044當前用戶無資料庫權限GRANT 權限、FLUSH PRIVILEGES
1045用戶名或密碼錯誤密碼錯誤、主機不匹配、密碼插件不相容(caching_sha2_password)
1130連線失敗,無連線權限用戶 Host 欄位不允許該 IP,需授權 user@'%' 或具體 IP
1133資料庫用戶不存在用戶未建立、拼寫錯誤、大小寫
1203用戶連線數達上限max_user_connections 限制,調整或拆分用戶
1226用戶資源用盡查詢/更新/連線時數超標,調整資源限制
1227權限不足缺少 SUPER、FILE 等特定權限

交易/鎖定/逾時類

代碼含義常見原因與對策
1180提交交易失敗磁碟空間、Binlog 錯誤、儲存引擎錯誤
1181回滾交易失敗同上,檢查錯誤日誌
1205鎖定逾時innodb_lock_wait_timeout 過短、長交易、死鎖,優化索引/縮短交易
1216外鍵約束檢查失敗(更新子表)父表無對應記錄,先插入父表
1217外鍵約束檢查失敗(刪除/修改父表)子表存在關聯記錄,先處理子表或設定 CASCADE

網路/通訊類

代碼含義常見原因與對策
1081無法建立 Socket 連線服務未啟動、埠被佔用、防火牆、bind-address 配置
1158網路讀取錯誤網路抖動、MTU 設定、驅動程式 Bug
1159網路讀取逾時net_read_timeout 過短、大查詢、網路延遲
1160網路寫入錯誤客戶端斷開、緩衝區滿、網路中斷
1161網路寫入逾時net_write_timeout 過短、大結果集傳輸

其他高頻代碼

代碼含義備註
1021磁碟空間不足清理日誌、擴容、tmpdir 空間
1036資料表唯讀FLUSH TABLES WITH READ LOCK、權限、磁碟滿
1037系統記憶體不足重啟服務或調整緩衝區
1038排序記憶體不足增大 sort_buffer_size
1065無效 SQL(空語句)應用層傳入空字串
1114資料表已滿MyISAM 達 4GB/2TB 限制、InnoDB 表空間滿、磁碟滿
1116開啟資料表過多增大 table_open_cache
1129資料庫異常建議重啟、檢查錯誤日誌
1149SQL 語法錯誤保留字未加反引號、版本語法差異
1235MySQL 版本過低功能不支援,升級版本

排查實戰建議

  1. 優先看錯誤日誌: log_error 路徑下的 .err 檔案含完整堆疊。
  2. 善用 SHOW ENGINE INNODB STATUS: 死鎖、鎖等待、外鍵錯誤詳情。
  3. 驗證字元集一致性: 1048/1062 常因字元集導致「看似相同實則不同」。
  4. 連線池配置: 1040/1203 多為連線未釋放或池子過小。
  5. 權限變更必執行: FLUSH PRIVILEGES 或 mysqladmin flush-privileges。

結語

錯誤代碼是資料庫發出的求救訊號,熟悉高頻代碼含義與定位思路,能將故障處理時間從「小時級」壓縮到「分鐘級」。建議收藏本表,實戰中遇到陌生代碼再查閱官方手冊補充。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved