sudo service mysql stop
sudo mysqld --user=mysql --skip-grant-tables --skip-networking &
# 關鍵參數:
# --skip-grant-tables 不載入權限表,允許無密碼登入
# --skip-networking 禁止網絡連接,僅本地 socket,安全隔離
# & 後台運行,返回 PID(如 3591)
mysql -u root mysql
# 進入 mysql 系統庫
UPDATE user SET Password=PASSWORD('mynewpasswd') WHERE user='root';
FLUSH PRIVILEGES;
QUIT;
注意:MySQL 5.7+ 密碼列改為 authentication_string,語句需調整:
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
sudo kill 3591 # 替換為實際 PID
sudo service mysql start
mysql -u root -pmynewpasswd # 驗證新密碼
| 現象 | 原因 | 解決 |
|---|---|---|
Access denied 即使進入 mysql 庫 | MySQL 8.0+ 默認 caching_sha2_password 插件 | 臨時用 --skip-grant-tables 並改用 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpass'; |
mysqld: Can't create test file | 數據目錄權限錯誤 | chown -R mysql:mysql /var/lib/mysql |
啟動報 Address already in use | 舊進程未完全退出 | pkill -9 mysqld 後重試 |
mysql_secure_installation--skip-grant-tables 歷史記錄(history -c)VALIDATE_PASSWORD 插件