-- 登錄
mysql -u root -p
-- 修改 root 密碼 (MySQL 5.7+ / 8.0 推薦)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 修改任意用戶密碼
ALTER USER 'app_user'@'%' IDENTIFIED BY 'NewStrongPass123!';
-- 5.6 兼容寫法
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewStrongPass123!');
-- 或
UPDATE mysql.user SET authentication_string = PASSWORD('NewStrongPass123!') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
mysqladmin 命令行工具(無需進入交互模式)# 修改 root 密碼(舊密碼 -> 新密碼)
mysqladmin -u root -p'old_pass' password 'NewStrongPass123!'
# 修改其他用戶
mysqladmin -u app_user -p'old_pass' password 'NewStrongPass123!'
root@localhost)SET PASSWORD / ALTER USER

核心原理:跳過授權表啟動 → 免密登錄 → 修改密碼 → 正常重啟
systemctl stop mysqld
# 或 service mysql stop
mysqld_safe --skip-grant-tables --skip-networking &
# --skip-networking 關鍵:防止無密碼狀態下被外部連接
mysql -u root
| 版本 | 修改語句 |
|---|---|
| MySQL 8.0 | FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!'; |
| MySQL 5.7 | FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!'; (或 UPDATE authentication_string) |
| MySQL 5.6 及之前 | UPDATE mysql.user SET Password=PASSWORD('NewPass123!') WHERE User='root'; FLUSH PRIVILEGES; |
# 關閉跳過授權的進程
pkill -f "mysqld_safe --skip-grant-tables"
# 正常啟動
systemctl start mysqld
# 驗證
mysql -u root -p'NewPass123!'
8.0 在 --skip-grant-tables 下**允許直接執行 ALTER USER**,無需先 FLUSH PRIVILEGES(但建議執行)。
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
-- 可選
FLUSH PRIVILEGES;
init_file 自動化重置(容器/自動化運維首選)/tmp/reset_root.sql:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
FLUSH PRIVILEGES;
mysqld --init-file=/tmp/reset_root.sql --skip-networking &ERROR 1820 表示已執行,正常重啟即可| 現象 | 原因 | 解決 |
|---|---|---|
ERROR 1820: You must reset your password using ALTER USER | 密碼過期/首次登錄 | ALTER USER USER() IDENTIFIED BY 'new_pass'; |
修改後仍報 Access denied | Host 不匹配(如只有 root@127.0.0.1 無 root@localhost) | SELECT User,Host FROM mysql.user; 補全記錄 |
validate_password 報錯 | 密碼策略不滿足 | 長度≥8、大小寫、數字、特殊字符;或臨時降級策略 |
Windows 下找不到 mysqld_safe | Windows 用 mysqld.exe | mysqld.exe --skip-grant-tables --skip-networking |
| Docker 容器重置 | 容器內修改不持久化 | 掛載 /var/lib/mysql 卷,或重建容器時傳遞 MYSQL_ROOT_PASSWORD |
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1'); FLUSH PRIVILEGES;INSTALL COMPONENT 'file://component_validate_password'; 配置長度、字典、混合字符MySQL 修改密碼:知密碼用 ALTER USER/SET PASSWORD/phpMyAdmin;忘密碼用 --skip-grant-tables --skip-networking + ALTER USER。版本差異只在 PASSWORD() vs authentication_string 與 FLUSH PRIVILEGES 必要性上。將重置流程標準化、腳本化、納入應急預案,才是運維成熟度的體現。