執行 GRANT ALL ON *.* TO 'user'@'%'; 時報錯:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
但 root 密碼正確,且 SHOW GRANTS 顯示擁有全部權限(含 SUPER、GRANT OPTION)。
mysql> SELECT user, host, password FROM mysql.user; +--------+-----------+----------+ | user | host | password | +--------+-----------+----------+ | root | localhost | *XXX1 | | root | 127.0.0.1 | *XXX2 | | zabbix | localhost | *XXX3 | +--------+-----------+----------+
用戶存在,密碼 hash 正常。
mysql> SELECT VERSION(); +-----------+ | VERSION() | +-----------+ | 5.5.xx | +-----------+
查看 /var/log/yum.log 發現曾因安裝其他軟件觸發 yum update 導致 MySQL 從 5.1 升級至 5.5,但未執行 mysql_upgrade。
MySQL 升級後,系統表(mysql.user、mysql.db、mysql.columns_priv 等)結構與新版本不兼容,導致權限檢查邏輯異常,雖然用戶記錄存在,但授權操作失敗。
[root@server ~]# mysql_upgrade -u root -p Enter password: Looking for 'mysql' as: mysql Looking for 'mysqlcheck' as: mysqlcheck Running 'mysqlcheck' with default connection arguments mysql.columns_priv OK mysql.db OK mysql.event OK mysql.func OK ...(其餘系統表檢查並修復) Upgrade process completed successfully.
執行完成後,再次執行 GRANT 命令:
mysql> GRANT ALL ON *.* TO 'user'@'%'; Query OK, 0 rows affected (0.00 sec)
mysql_upgrade 完成 MySQL 版本升級後的系統表結構遷移與兼容性修復。mysql_upgrade 會:檢查/修復所有表、升級系統表結構、刷新權限緩存、啟用新版本功能與權限體系。