全新安裝 MySQL(yum install mysql mysql-server)後,啟動服務 service mysqld start,預設 root 無密碼可登入。執行 mysqladmin password '123' 設定密碼後,反而無法登入(無論輸入密碼與否皆失敗),報錯如 Access denied for user 'root'@'localhost'。
/var/log/mysqld.log 或 ~/.mysql_secret),直接用 mysqladmin password 可能因認證插件、密碼策略、匿名用戶衝突導致失效。auth_socket 外掛,root 僅允許本地 Unix socket 免密登入,密碼認證被忽略。mysqladmin password 在某些版本不更新 mysql.user 表的 authentication_string 欄位,導致實際密碼未變更。systemctl stop mysqld # 或 service mysqld stop
mysqld_safe --skip-grant-tables --skip-networking &
--skip-networking 防止外部連入,安全第一。
mysql -u root
進入 MySQL 提示符後:
USE mysql;
-- 5.7.6+ 使用 authentication_string 欄位
UPDATE user SET authentication_string=PASSWORD('NewStrongPass123!') WHERE User='root' AND Host='localhost';
-- 8.0+ 推薦使用 ALTER USER(需先 flush privileges)
-- ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
FLUSH PRIVILEGES;
EXIT;
systemctl stop mysqld
systemctl start mysqld
# 或
service mysqld restart
mysql -u root -p'NewStrongPass123!'
8.0 支援 --init-file 初始化腳本,更安全:
/tmp/mysql-init.sql:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
systemctl stop mysqld
mysqld --init-file=/tmp/mysql-init.sql --user=mysql &
| 現象 | 可能原因 | 解決 |
|---|---|---|
| 密碼正確仍報 Access denied | Host 欄位不匹配('root'@'%' vs 'root'@'localhost') | 檢查 SELECT User, Host FROM mysql.user;,確保 Host 匹配連線方式 |
| ERROR 1820 (HY000): You must reset your password | 密碼過期標記 | ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; |
| ERROR 1819 (HY000): Password does not meet policy | 密碼策略過嚴 | 暫時降低 validate_password.policy 或用複雜密碼 |
| Authentication plugin 錯誤 | root 使用 caching_sha2_password,客戶端不支援 | 改用 mysql_native_password:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass'; |
| 啟動失敗 PID file 錯誤 | 目錄權限、殘留進程、磁碟滿 | 檢查 datadir 權限、ps -ef | grep mysql 清理、df -h |
mysql_secure_installation 互動式腳本,自動處理匿名用戶、遠程 root 登入、測試庫、密碼策略。auth_socket) 或 TLS 憑證認證。mysqldump mysql user db tables_priv columns_priv procs_priv proxies_priv > grants_backup.sql。MySQL root 密碼重置核心在於 跳過授權表啟動 → 直接操作 mysql.user 表 → 刷新權限 → 正常重啟。MySQL 8.0 推薦使用 --init-file 避免無授權模式風險。遇到登入問題先查 User、Host、plugin、authentication_string 四欄位,對症下藥即可快速恢復。