MySQL 錯誤代碼 (Error Code) 是診斷故障的第一現場指紋。本文整理 1005-1235 範圍內高頻錯誤代碼、標準訊息、中文解釋、常見觸發場景與快速排查動作,作為 DBA 與開發者故障定位速查表。
| 代碼 | 標準訊息 | 中文解釋 | 常見場景 | 排查動作 |
|---|---|---|---|---|
| 1005 | Can't create table | 建表失敗 | 外鍵定義錯誤、字符集不匹配、磁盤滿 | 檢查 SHOW ENGINE INNODB STATUS、外鍵欄位類型長度一致性 |
| 1006 | Can't create database | 建庫失敗 | 權限不足、目錄不存在、磁盤滿 | 檢查 datadir 權限、磁盤空間 |
| 1007 | Database exists | 庫已存在 | 重複 CREATE DATABASE | 先 DROP 或 IF NOT EXISTS |
| 1008 | Database doesn't exist | 庫不存在 | DROP/USE 不存在的庫 | 確認庫名拼寫、大小寫 (Linux 區分) |
| 1009 | Error dropping database (can't remove directory) | 刪庫失敗 (無法刪除目錄) | 文件被佔用、權限不足、非空目錄 | lsof 檢查佔用進程、手動清理目錄 |
| 1010 | Error dropping database (can't remove database directory) | 刪庫失敗 (無法刪除庫目錄) | 同 1009 | 同 1009 |
| 1011 | Error on delete of database file | 刪除庫文件錯誤 | 文件系統錯誤、鎖定 | 檢查磁盤健康、重啟服務 |
| 1012 | Can't read record in system table | 無法讀取系統表記錄 | 數據字典損壞、權限 | CHECK TABLE mysql.*、恢復備份 |
| 1020 | Record has been changed by another user | 記錄被其他用戶修改 | 樂觀鎖衝突、並發更新 | 重試機制、版本號欄位 |
| 1021 | Disk is full | 磁盤空間不足 | data 目錄磁盤滿 | 清理日志/備份、擴容、檢查 tmpdir |
| 1022 | Duplicate key | 鍵值重複 | 主鍵/唯一索引衝突 | INSERT IGNORE / ON DUPLICATE KEY UPDATE |
| 1023 | Error on close | 關閉錯誤 | 文件句柄洩漏 | 重啟服務、檢查 open_files_limit |
| 1024 | Error reading file | 讀文件錯誤 | 磁盤壞道、文件損壞 | 備份恢復、檢查硬體 |
| 1025 | Error on rename | 重命名錯誤 | RENAME TABLE 失敗、外鍵阻塞 | 先刪外鍵、檢查權限 |
| 1026 | Error writing file | 寫文件錯誤 | 磁盤滿、只讀、權限 | 同 1021 |
| 1032 | Record doesn't exist | 記錄不存在 | UPDATE/DELETE 未命中 | 檢查 WHERE 條件、事務隔離級別 |
| 1036 | Table is read only | 表唯讀 | MyISAM 表損壞、FLUSH TABLES WITH READ LOCK | REPAIR TABLE、UNLOCK TABLES |
| 1037 | Out of memory | 內存不足 | 排序緩存/連接緩存耗盡 | 調大 sort_buffer_size、減少並發 |
| 1038 | Out of sort memory | 排序內存不足 | ORDER BY 大結果集 | 調大 sort_buffer_size、加索引避免 filesort |
| 1040 | Too many connections | 連接數達上限 | max_connections 耗盡 | 調大 max_connections、連接池洩漏排查 |
| 1041 | Out of memory | 系統內存不足 | OS OOM Killer | 調整 innodb_buffer_pool、升級內存 |
| 1042 | Bad host | 無效主機名 | DNS 解析失敗、skip-name-resolve | 檢查 /etc/hosts、啟用 skip-name-resolve |
| 1043 | Invalid connection | 無效連接 | 網絡中斷、超時 | 檢查防火牆、keepalive、驅動版本 |
| 1044 | Access denied for user to database | 用戶無庫訪問權限 | GRANT 缺失、Host 不匹配 | SHOW GRANTS、檢查 User/Host 欄位 |
| 1045 | Access denied (user/password) | 用戶名或密碼錯誤 | 密碼錯誤、插件不匹配 (caching_sha2_password) | 重置密碼、指定 --default-auth=mysql_native_password |
| 1048 | Column cannot be null | 欄位不能為空 | NOT NULL 欄位插入 NULL | 應用層校驗、DEFAULT 值 |
| 1049 | Unknown database | 庫不存在 | 同 1008 | 同 1008 |
| 1050 | Table already exists | 表已存在 | 重複 CREATE TABLE | IF NOT EXISTS、先 DROP |
| 1051 | Unknown table | 表不存在 | 拼寫錯誤、大小寫、庫未選擇 | USE db、DESC tbl 確認 |
| 1054 | Unknown column | 欄位不存在 | 拼寫錯誤、ALTER 未生效 | DESC tbl 確認欄位名 |
| 1062 | Duplicate entry for key | 鍵值重複入庫失敗 | 同 1022 | 同 1022 |
| 1065 | Empty query | 空 SQL 語句 | 驅動發送空字串 | 應用層檢查 SQL 非空 |
| 1081 | Can't create socket | 無法建立 Socket | 端口佔用、權限、文件句柄盡 | netstat -anp、ulimit -n |
| 1114 | Table is full | 表滿 (Memory 引擎/磁盤滿) | MEMORY 表超過 max_heap_table_size | 調大參數、轉 InnoDB |
| 1116 | Too many open tables | 打開表過多 | table_open_cache 過小 | 調大 table_open_cache |
| 1129 | Host is blocked | 主機被阻擋 | 連接錯誤超過 max_connect_errors | FLUSH HOSTS、調大 max_connect_errors |
| 1130 | Host not allowed to connect | 主機無連接權限 | 用戶 Host 欄位不匹配 | GRANT ... TO 'user'@'%'/IP |
| 1133 | User doesn't exist | 用戶不存在 | DROP USER 後仍在用 | CREATE USER、FLUSH PRIVILEGES |
| 1141 | User has no access to database | 用戶無庫權限 | 同 1044 | 同 1044 |
| 1142 | User has no access to table | 用戶無表權限 | GRANT 粒度不足 | GRANT SELECT/INSERT ON db.tbl TO user |
| 1143 | User has no access to column | 用戶無欄位權限 | 欄位級 GRANT 缺失 | GRANT SELECT (col) ON db.tbl TO user |
| 1146 | Table doesn't exist | 表不存在 | 同 1051 | 同 1051 |
| 1147 | Undefined user access to table | 用戶表權限未定義 | GRANT 語法錯誤 | 檢查 GRANT 語句 |
| 1149 | Syntax error | 語法錯誤 | 保留字未轉義、引號不匹配 | 反引號包裹識別符、檢查 SQL |
| 1158 | Network read error | 網絡讀錯誤 | 網絡抖動、MTU、驅動 | 檢查網絡、驅動升級 |
| 1159 | Network read timeout | 網絡讀超時 | 慢查詢、網絡延遲 | 優化 SQL、調大 net_read_timeout |
| 1160 | Network write error | 網絡寫錯誤 | 同 1158 | 同 1158 |
| 1161 | Network write timeout | 網絡寫超時 | 大結果集傳輸、網絡 | 分頁、壓縮協議、調大 net_write_timeout |
| 1169 | Duplicate entry on update | 更新時鍵值重複 | UPDATE 導致唯一鍵衝突 | 同 1022 |
| 1177 | Can't open table | 無法打開表 | 表損壞、鎖衝突、權限 | CHECK TABLE、REPAIR TABLE |
| 1180 | Commit failed | 提交事務失敗 | 死鎖、鎖等待超時、磁盤錯誤 | SHOW ENGINE INNODB STATUS 分析死鎖 |
| 1181 | Rollback failed | 回滾失敗 | 同 1180 | 同 1180 |
| 1203 | User has exceeded max connections | 用戶連接數超限 | MAX_USER_CONNECTIONS 觸發 | 調大限制、連接池洩漏排查 |
| 1205 | Lock wait timeout exceeded | 鎖等待超時 | innodb_lock_wait_timeout (預設 50s) | 優化長事務、索引、死鎖檢測 |
| 1211 | User has no create user privilege | 無創建用戶權限 | 非 root 執行 CREATE USER | GRANT CREATE USER ON *.* TO admin |
| 1216 | Foreign key constraint fails (child) | 外鍵約束失敗 (子表) | 插入子表時父表無對應記錄 | 先插父表、檢查外鍵定義 |
| 1217 | Foreign key constraint fails (parent) | 外鍵約束失敗 (父表) | 刪除父表時子表仍有引用 | 先刪子表、SET NULL/CASCADE |
| 1226 | User exceeded resource limits | 用戶資源超限 | MAX_QUERIES_PER_HOUR 等觸發 | 調大限制、檢查應用邏輯 |
| 1227 | Access denied; need SUPER privilege | 權限不足需 SUPER | 非 SUPER 執行 CHANGE MASTER/SET GLOBAL | 授予 SUPER 或專用運維賬號 |
| 1235 | This version doesn't support feature | 版本不支援功能 | 低版本用 GTID/CTE/窗口函數 | 升級版本、改寫兼容語法 |
SHOW ERRORS / SHOW WARNINGS 獲取 4 位數字代碼。