整理開發運維中高頻出現的 MySQL 錯誤代碼、原因與標準處理流程,建議收藏備查。
現象:Windows 服務管理員啟動 MySQL 服務報「程序意外終止 (1067)」。
標準修復流程:
my.ini,最小必要配置:
[mysqld]
basedir=C:/tool/mysql5617win32
datadir=C:/tool/mysql5617win32/data
character_set_server=utf8
character_set_client=utf8
sc delete mysql
mysqld install MySQL --defaults-file="C:\tool\mysql5617win32\my.ini"
net start mysql
原因:MySQL 服務未啟動,或防火牆阻擋 3306 埠(遠端連線)。
處理:
原因:無密碼或密碼錯誤嘗試執行需權限操作。
重設 root 密碼標準步驟:
bin 目錄:cd C:\tool\mysql5617win32\binmysqld --skip-grant-tables(另開視窗)mysql -u root -p → 直接 EnterUSE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE User='root';
FLUSH PRIVILEGES;
原因:my.cnf 中 [mysqld] 區段包含資料節點不支援的參數。
修正:註釋或移除 log-bin=mysql-bin、server-id=1、skip-locking(新版用 skip-external-locking)。
原因:資料庫缺少 ecs_setup_keyword 表(外掛安裝未建表或遷移遺漏)。
處理:在本地全新安裝同版 ecshop,匯出該表 DDL,在線上資料庫執行建表;或聯繫外掛提供方補充安裝腳本。
| 代碼 | 常見原因 | 關鍵處理 |
|---|---|---|
| 1045 | 帳密錯誤/主機不允許 | 檢查 user.Host、密碼、FLUSH PRIVILEGES |
| 1049 | 資料庫不存在 | 建立資料庫或修正連線字串 |
| 1050 | 表已存在 | CREATE TABLE IF NOT EXISTS 或先 DROP |
| 1062 | 主鍵/唯一鍵重複 | 檢查自增值、INSERT IGNORE/ON DUPLICATE KEY UPDATE |
| 1064 | SQL 語法錯誤 | 檢查保留字需反引號、引號配對、版本相容語法 |
| 1146 | 表不存在 | 拼寫、大小寫敏感度、lower_case_table_names |
| 1205 | 鎖等待超時 | 優化長事務、索引、innodb_lock_wait_timeout |
| 1213 | 死鎖 | 固定加鎖順序、縮短事務、SHOW ENGINE INNODB STATUS 分析 |
| 2006 | MySQL server has gone away | 增大 max_allowed_packet、檢查 wait_timeout、長連線重連機制 |
| 2013 | Lost connection during query | 同 2006,網路不穩或查詢過大 |
.err 檔案獲取完整堆疊。my.cnf/ini 語法與參數相容性。建立團隊專屬錯誤知識庫,將每次踩坑轉化為可複用的 SOP,是提升運維效能的關鍵。