MySQL 版本升級(如 5.5 → 5.6/5.7)時,系統表結構變更,若未運行 mysql_upgrade,舊版 mysql 系統庫缺少新版所需的表(如 servers, gtid_executed 等),導致創建用戶、授權等 DDL 操作報錯。
mysqldump -u root -p --all-databases --routines --events > full_backup.sqlmysql_upgrade -u root -p --force
--force 強制檢查所有表,即使版本號一致。此腳本會:
CHECK TABLE ... FOR UPGRADE)。mysql.servers, innodb_index_stats 等)。systemctl restart mysqld 或 service mysql restart。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。