# 方法 1:mysqladmin (推腳本自動化)
/usr/local/mysql/bin/mysqladmin -u root -p'old_pass' password 'NewStrongPass2024!'
# 方法 2:SQL 登入後修改 (支援多 host)
mysql -u root -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass2024!';
mysql> ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'NewStrongPass2024!';
mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'NewStrongPass2024!'; -- 謹慎開放遠程
mysql> FLUSH PRIVILEGES;
systemctl stop mysqld 或 killall mysqld# 臨時配置文件法 (推薦,不污染主配置)
cat > /tmp/mysqld_safe.cnf <<'EOF'
[mysqld]
skip-grant-tables
skip-networking -- 僅本地 Socket,防外部趁虛而入
EOF
/usr/local/mysql/bin/mysqld_safe --defaults-file=/tmp/mysqld_safe.cnf &
mysql -u root
mysql> FLUSH PRIVILEGES; -- 5.7+ 必須先執行
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass2024!';
mysql> FLUSH PRIVILEGES;
killall mysqld
systemctl start mysqld
mysql -u root -p'NewStrongPass2024!'
| 版本 | 修改語法 | 注意事項 |
|---|---|---|
| 5.6 / 5.7 早期 | SET PASSWORD FOR 'root'@'localhost' = PASSWORD('...') | PASSWORD() 5.7.6 移除 |
| 5.7.6+ / 8.0 | ALTER USER 'root'@'localhost' IDENTIFIED BY '...' | 需 FLUSH PRIVILEGES 生效 |
| 8.0+ (caching_sha2_password) | 同上 | 舊客戶端需 --default-auth=mysql_native_password |
mysql> DELETE FROM mysql.user WHERE User=''; -- 刪除匿名用戶
mysql> DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');
mysql> DROP DATABASE IF EXISTS test;
mysql> DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
mysql> FLUSH PRIVILEGES;
「知舊改舊、忘舊跳過授權、改畢強權限」三步走。生產環境建議配合 mysql_secure_installation 腳本一鍵完成上述加固,並定期輪換密碼、審計遠程賬號。