mysql -u root -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 或
mysql> SET PASSWORD FOR 'root'@'localhost' = 'NewStrongPass123!';
mysql -u root -p
mysql> USE mysql;
mysql> UPDATE user SET authentication_string=PASSWORD('NewPass') WHERE User='root' AND Host='localhost';
mysql> FLUSH PRIVILEGES;
MySQL 8.0 PASSWORD() 已移除,改用 authentication_string 直接存雜湊或用 ALTER USER。
mysqladmin -u root -p'oldpass' password 'newpass'
# 或指定主機
mysqladmin -u root -h localhost -p'oldpass' password 'newpass'
systemctl stop mysqldmysqld_safe --skip-grant-tables --skip-networking &mysql -u rootUSE mysql;
-- MySQL 5.7 / 8.0
UPDATE user SET authentication_string=null WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
-- 退出 mysql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
systemctl restart mysqld/tmp/reset_root.sql:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
systemctl stop mysqldmysqld_safe --init-file=/tmp/reset_root.sql &rm /tmp/reset_root.sqlsystemctl restart mysqldsystemctl stop mysqld
systemctl set-environment MYSQLD_OPTS="--init-file=/tmp/reset_root.sql"
systemctl start mysqld
# 登入驗證後
systemctl unset-environment MYSQLD_OPTS
rm /tmp/reset_root.sql
systemctl restart mysqld
-- 檢查帳號狀態
SELECT User, Host, plugin, authentication_string, account_locked, password_expired FROM mysql.user WHERE User='root';
-- 解鎖
ALTER USER 'root'@'localhost' ACCOUNT UNLOCK;
-- 變更認證插件(8.0 預設 caching_sha2_password,舊客戶端可能不支援)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPass';
mysql -u root -p'NewStrongPass123!' -e "SELECT VERSION();"
DELETE FROM mysql.user WHERE User='root' AND Host!='localhost'; FLUSH PRIVILEGES;知密碼用 ALTER USER;忘密碼用 --init-file 單次重啟最乾淨。MySQL 8.0 認證體系變更大(caching_sha2_password、authentication_string),操作時留意版本差異。養成「備份先行、驗證後行」習慣,避免誤操作鎖死自己。