執行 `mysql_upgrade -uadmin -p` 报 `FATAL ERROR: Upgrade failed`,無具體錯誤碼,需按步驟定位:
排查清單
- 查看錯誤日誌:`/var/log/mysql/error.log` 或數據目錄下 `*.err`,搜索 `ERROR`、`Upgrade` 關鍵字。
- 檢查權限:執行用戶需對數據目錄 (`/var/lib/mysql`) 有讀寫權,`admin` 用戶需有 `SUPER`、`RELOAD` 權限。
- 表損壞修復:升級前先跑 `mysqlcheck -uadmin -p --auto-repair --all-databases` 修復 MyISAM/InnoDB 表。
- 版本跳躍過大:如 5.5 → 8.0 直接升級不支持,需分級升級 (5.5→5.6→5.7→8.0) 或邏輯導出導入 (`mysqldump`)。
- 配置文件兼容:`my.cnf` 中舊參數 (如 `key_buffer`, `thread_concurrency`) 在新版被移除,註釋或替換後再升級。
- 手動執行升級腳本:`mysql -uadmin -p < /usr/share/mysql/mysql_upgrade.sql` (路徑視安裝而定) 觀察具體報錯 SQL。
常見具體錯誤
- `Table 'mysql.plugin' doesn't exist` → 缺少系統表,需 `--initialize` 或 `mysql_install_db` 重建。
- `Column count of mysql.user is wrong` → 權限表結構變更,需執行 `mysql_upgrade` 修復 (雞生蛋蛋生雞),可臨時 `skip-grant-tables` 進入修復。
核心原則:**升級前備份、檢查日誌、分級升級、修復表**。