錯誤代碼速查表
| 代碼 | 含義 | 常見原因 | 解決方向 |
| 1005 | 創建表失敗 | 外鍵定義錯誤、引擎不支持 | 檢查外鍵語法、引擎一致性 |
| 1006 | 創建庫失敗 | 權限不足、路徑不存在 | 檢查數據目錄權限 |
| 1007 | 庫已存在 | 重複創建 | CREATE DATABASE IF NOT EXISTS |
| 1008 | 庫不存在 | 拼寫錯誤、已刪除 | 確認庫名 |
| 1016 | 無法打開文件 | 表損壞、文件丟失、權限 | myisamchk -r / mysqlcheck -r |
| 1021 | 磁盤空間不足 | 分區滿 | 清理日誌、擴容、遷移數據目錄 |
| 1022 | 鍵值重複 | 主鍵/唯一鍵衝突 | 檢查業務邏輯、IGNORE/REPLACE |
| 1032 | 記錄不存在 | UPDATE/DELETE 無匹配行 | 檢查 WHERE 條件 |
| 1036 | 表只讀 | 備份鎖、只讀屬性、磁盤滿 | 解鎖、檢查磁盤、FLUSH TABLES |
| 1037 | 內存不足 | 排序緩衝、連接過多 | 重啟、調大 sort_buffer_size |
| 1038 | 排序內存不足 | 大結果集排序 | 調大 sort_buffer_size、優化 SQL |
| 1040 | 連接數滿 | 最大連接數耗盡 | 調大 max_connections、檢查泄漏 |
| 1042 | 無效主機名 | DNS 解析失敗、skip-name-resolve | 用 IP、配置 hosts、關閉反解 |
| 1044 | 無訪問權限 | 賬號無庫權限 | GRANT 授權 |
| 1045 | 用戶名/密碼錯誤 | 認證失敗 | 重置密碼、檢查主機匹配 |
| 1062 | 唯一鍵重複 | 數據衝突 | 業務去重、ON DUPLICATE KEY UPDATE |
| 1146 | 表不存在 | 拼寫、大小寫、庫未選 | 檢查 lower_case_table_names |
| 1153 | 包太大 | 單行/包超過 max_allowed_packet | 調大參數、分批處理 |
| 1205 | 鎖等待超時 | 死鎖、長事務 | 優化索引、縮短事務、檢查死鎖日誌 |
| 1213 | 死鎖 | 循環等待鎖 | 統一加鎖順序、重試邏輯 |
| 2006 | 服務器斷開 | 超時、包太大、服務崩潰 | 調大 wait_timeout/max_allowed_packet |
| 2013 | 查詢中斷 | 網絡、超時、KILL | 檢查網絡、長查詢優化 |
核心故障處理流程
1. 表損壞修復 (1016, 1036, 1062 相關)
# MyISAM
myisamchk -r /var/lib/mysql/db/tbl.MYI # -r 恢復,-f 強制
# InnoDB / 通用
mysqlcheck -r -o db_name -u root -p # -r 修復,-o 優化
# 或 SQL
REPAIR TABLE tbl_name;
OPTIMIZE TABLE tbl_name;
2. 磁盤空間不足 (1021)
df -h # 查看分區使用率
du -sh /var/lib/mysql/* # 定位大庫
# 清理:二進制日誌、錯誤日誌、臨時文件、舊備份
PURGE BINARY LOGS BEFORE '2023-01-01';
3. 連接數耗盡 (1040)
SHOW VARIABLES LIKE 'max_connections';
SHOW STATUS LIKE 'Threads_connected';
# 臨時調大
SET GLOBAL max_connections = 1000;
# 永久修改 my.cnf
[mysqld]
max_connections = 1000
4. 密碼錯誤/權限問題 (1044, 1045)
# 重置密碼參考 73103 文章
# 授權
GRANT ALL ON db.* TO 'user'@'%' IDENTIFIED BY 'pass';
FLUSH PRIVILEGES;
預防性維護清單
- 定期
ANALYZE TABLE 更新統計信息
- 監控
Innodb_buffer_pool_wait_free、Threads_connected、Slow_queries
- 設置
log_error、slow_query_log、long_query_time
- 配置
expire_logs_days 自動清理 Binlog
- 備份驗證:定期恢復演練