全新安裝的 MySQL 預設 root 帳號密碼為空,這是極大的安全隱患。本文系統梳理密碼修改的標準流程、常見陷阱及生產環境加固建議。
# 1. 免密登入(僅限首次或 skip-grant-tables 模式)
mysql -u root
# 2. 修改密碼並刷新權限
USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongP@ssw0rd!';
FLUSH PRIVILEGES;
關鍵點: MySQL 5.7+ 建議使用 ALTER USER 替代舊版 UPDATE user SET authentication_string=PASSWORD(...),前者會自動處理密碼過期策略與插件兼容性。
| 場景 | 核心步驟 |
|---|---|
| 忘記 Root 密碼 | 啟動 mysqld --skip-grant-tables → 免密登入 → 修改密碼 → 正常重啟 |
| Linux 系統服務管理 | systemctl stop mysqld → 編輯 /etc/my.cnf 加 skip-grant-tables → 重啟修改 → 移除參數重啟 |
| Windows 服務模式 | 服務管理器停止 → 命令行 mysqld --console --skip-grant-tables --shared-memory → 新終端修改 |
| Docker 容器環境 | docker exec -it mysql mysql -uroot -p → 容器內修改 → 若無舊密碼需重建容器並掛載初始化 SQL |
'root'@'10.0.0.%' 或具體應用服務器 IP,禁止 'root'@'%'。SELECT/INSERT/UPDATE/DELETE,避免使用 root 直連應用。log_bin 與 audit_log,記錄所有 DDL/DML 及登入嘗試。FLUSH PRIVILEGES; 或重啟服務使權限生效。ERROR 1819 (HY000): Your password does not satisfy the current policy requirements,需調整 validate_password.policy 或提高密碼強度。掌握 Root 密碼管理是 DBA 入門必修課,建議將上述流程封裝為 Ansible Playbook 或 Shell 腳本,實現標準化、可審計的自動化運維。