Windows安裝MySQL後root默認無密碼或隨機密碼,Linux安裝多為空密碼。生產上線前必須修改。本文匯總四種場景覆蓋率100%的修改方法。
mysql -u root -p # 輸入當前密碼(首次可能為空或隨機密碼) -- 修改localhost SET PASSWORD FOR 'root'@'localhost' = 'NewStrongPass@123'; -- 修改遠程% (可選) SET PASSWORD FOR 'root'@'%' = 'NewStrongPass@123'; -- 8.0新語法(推薦) ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass@123'; ALTER USER 'root'@'%' IDENTIFIED BY 'NewStrongPass@123';
# 首次設置(無密碼) mysqladmin -u root password 'NewStrongPass@123' # 已有密碼修改 mysqladmin -u root -p'oldpass' password 'NewStrongPass@123' # 批量修改多實例 for port in 3306 3307 3308; do mysqladmin -u root -P$port -p'oldpass' password 'NewStrongPass@123' done
mysql -u root -p
USE mysql;
-- 5.7及之前
UPDATE user SET Password = PASSWORD('NewStrongPass@123') WHERE User = 'root';
FLUSH PRIVILEGES;
-- 8.0+ (authentication_string字段)
UPDATE user SET authentication_string = PASSWORD('NewStrongPass@123') WHERE User = 'root';
-- 或推薦
UPDATE user SET authentication_string = '' WHERE User = 'root'; -- 置空
FLUSH PRIVILEGES;
-- 隨後用ALTER USER重新設置
systemctl stop mysqld
mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root
USE mysql;
-- 5.7
UPDATE user SET authentication_string=PASSWORD('NewPass@123') WHERE User='root';
-- 8.0
UPDATE user SET authentication_string='' WHERE User='root';
FLUSH PRIVILEGES;
EXIT;
pkill mysqld
systemctl start mysqld
# 登錄後再用ALTER USER正式設置密碼
# 1. 管理員CMD停止服務 net stop MySQL80 # 2. 跳過權限表啟動(新窗口保持運行) mysqld --defaults-file="D:\mysql\my.ini" --skip-grant-tables --console # 3. 另開管理員CMD免密登錄修改 mysql -u root USE mysql; UPDATE user SET authentication_string='' WHERE User='root'; FLUSH PRIVILEGES; EXIT; # 4. 關閉--skip-grant-tables窗口,正常啟動服務 net start MySQL80 # 登錄後ALTER USER設置正式密碼
驗證:修改後立即mysql -u root -p'NewPass' -e "SELECT VERSION();"確認生效;檢查mysql.user表authentication_string非空。