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

MySQL 升級後報錯 "Table 'mysql.servers' doesn't exist" 修復指南

     編輯:MySQL 綜合教學

錯誤原因

MySQL 版本升級(如 5.5 → 5.6/5.7)時,系統表結構變更,若未運行 mysql_upgrade,舊版 mysql 系統庫缺少新版所需的表(如 servers, gtid_executed 等),導致創建用戶、授權等 DDL 操作報錯。

標準修復流程(推薦)

  1. 備份數據:mysqldump -u root -p --all-databases --routines --events > full_backup.sql
  2. 運行升級腳本:
    mysql_upgrade -u root -p --force

    --force 強制檢查所有表,即使版本號一致。此腳本會:

    • 檢查/修復所有表(CHECK TABLE ... FOR UPGRADE)。
    • 創建缺失的系統表(mysql.servers, innodb_index_stats 等)。
    • 更新權限表結構,刷新權限緩存。
  3. 重啟服務:systemctl restart mysqld 或 service mysql restart。
  4. 驗證:登錄 MySQL 執行 CREATE USER ... 或 SHOW TABLES FROM mysql LIKE 'servers'; 確認無錯誤。

手動創建缺失表(應急/特殊場景)

若 mysql_upgrade 失敗或不可用,可手動執行建表 SQL(以 MySQL 5.7 為例):

CREATE TABLE `mysql`.`servers` (
  `Server_name` CHAR(64) NOT NULL DEFAULT '',
  `Host` CHAR(64) NOT NULL DEFAULT '',
  `Db` CHAR(64) NOT NULL DEFAULT '',
  `Username` CHAR(64) NOT NULL DEFAULT '',
  `Password` CHAR(64) NOT NULL DEFAULT '',
  `Port` INT(4) NOT NULL DEFAULT '0',
  `Socket` CHAR(64) NOT NULL DEFAULT '',
  `Wrapper` CHAR(64) NOT NULL DEFAULT '',
  `Owner` CHAR(64) NOT NULL DEFAULT '',
  PRIMARY KEY (`Server_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';

注意:不同版本表結構不同,請從同版本全新安裝實例導出 SHOW CREATE TABLE mysql.servers 獲取精確 DDL。

根治建議

  • **升級必跑 mysql_upgrade**,納入運維 SOP。
  • 生產環境採用**藍綠部署/滾動升級**,先驗證從庫升級無誤再切主。
  • 關注 Release Notes 中的「系統表變更」章節。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved