MySQL root 密碼管理是 DBA 基本功。本文覆蓋三大場景:**已知密碼修改**、**命令行非交互修改**、**完全忘記密碼的緊急重置**,均在 Linux 環境下實測有效。
mysql -uroot -p
# 輸入舊密碼
mysql> USE mysql;
mysql> UPDATE user SET authentication_string=PASSWORD('new_pass') WHERE user='root';
# MySQL 5.7+ 字段為 authentication_string,5.6 為 password
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
注意:MySQL 8.0 建議使用 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_pass';。
mysqladmin -u root -p'old_pass' password 'new_pass'
# 或
mysql -uroot -p'old_pass' -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_pass';"
pkill mysqld!直接殺進程會導致 mysqld dead but subsys locked,後續甚至無法在安全模式啟動。正確停止姿勢:
/etc/init.d/mysqld stop
# 或 systemctl stop mysqld
mysqld_safe --skip-grant-tables --skip-networking &
# --skip-networking 防止無授權時遠程連接,安全第一
# & 後台運行,另開終端操作
mysql
mysql> USE mysql;
# MySQL 5.7+
mysql> UPDATE user SET authentication_string=PASSWORD('new_pass') WHERE user='root';
# MySQL 8.0
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_pass';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
/etc/init.d/mysqld stop
/etc/init.d/mysqld start
# 驗證
mysql -uroot -p'new_pass' -e "SELECT VERSION();"
PASSWORD('...') 函數名大小寫不敏感,但 'new_pass' 字符串內容嚴格區分大小寫。user 表有 plugin 列,若為 auth_socket(Ubuntu 默認),需同步修改:UPDATE user SET plugin='mysql_native_password' WHERE user='root';。'root'@'%' 或創建專用運維賬號(推薦)。mysql_secure_installation 移除匿名用戶、禁止 root 遠程登錄、刪除 test 庫。max_connect_errors、skip-name-resolve、SSL 加密連接。掌握這三種場景,無論是例行輪換還是凌晨三點被叫醒重置密碼,都能從容應對。