首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 修改 root 密碼四大標準姿勢:mysqladmin、SET PASSWORD、UPDATE user、skip-grant-tables 緊急重置

     編輯:MySQL 綜合教學

MySQL 修改 root 密碼四大標準姿勢:mysqladmin、SET PASSWORD、UPDATE user、skip-grant-tables 緊急重置

修改 MySQL root 密碼是運維高頻操作,但版本差異(5.6/5.7/8.0)、字段變更(password → authentication_string)、加密插件(caching_sha2_password)導致舊命令失效。本文梳理四種標準方法,附版本適用表與避坑指南。

方法一:mysqladmin 命令行工具(最通用、腳本友好)

# 首次設置密碼(默認空密碼)
mysqladmin -u root password 'NewPass123'

# 已有密碼時修改
mysqladmin -u root -p'OldPass' password 'NewPass123'
# 注意:-p 後直接跟舊密碼無空格,password 後跟新密碼有空格
  • ✅ 所有版本支援,底層調用 SET PASSWORD。
  • ✅ 適合自動化腳本、Docker entrypoint 初始化。

方法二:SET PASSWORD 语句(SQL 標準、會話內生效)

-- 5.6 及以前
UPDATE mysql.user SET Password = PASSWORD('NewPass123') WHERE User = 'root';
FLUSH PRIVILEGES;

-- 5.7 / 8.0 (password 字段已移除)
UPDATE mysql.user SET authentication_string = PASSWORD('NewPass123') WHERE User = 'root';
FLUSH PRIVILEGES;
  • ⚠️ 直接操作系統表,易誤刪/誤改,非必要不建議。
  • ⚠️ 5.7+ 必須用 authentication_string,否則報 Unknown column 'password'。

方法四:skip-grant-tables 緊急重置(忘記密碼終極大招)

  1. 停服務:systemctl stop mysqld
  2. 啟動跳過授權:mysqld_safe --skip-grant-tables & (systemd 環境請用 systemctl set-environment MYSQLD_OPTS="--skip-grant-tables")
  3. 無密登錄:mysql -u root
  4. 修改密碼:
    USE mysql;
    -- 5.7/8.0
    UPDATE user SET authentication_string = PASSWORD('NewPass123') WHERE User='root' AND Host='localhost';
    -- 或 8.0 推薦
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123';
    FLUSH PRIVILEGES;
  5. 正常重啟:殺掉 skip 進程 → systemctl start mysqld
  6. 驗證:mysql -u root -p'NewPass123'

版本適用對照表

方法MySQL 5.6MySQL 5.7MySQL 8.0
mysqladmin✅✅✅
SET PASSWORD / PASSWORD()✅✅❌ (棄用)
ALTER USER❌✅✅ (推薦)
UPDATE user.Password✅❌ (無此列)❌
UPDATE user.authentication_string❌ (無此列)✅✅
skip-grant-tables 重置✅✅✅ (需 FLUSH PRIVILEGES 後 ALTER USER)

常見報錯與修正

報錯原因修正
Unknown column 'password'5.7+ 移除 password 列改用 authentication_string
ERROR 1290 (HY000): --skip-grant-tables 下不能執行 ALTER USER8.0 限制先 FLUSH PRIVILEGES; 再 ALTER USER
Access denied for user 'root'@'localhost'密碼錯誤/插件不匹配指定 mysql_native_password 或重置

安全加固建議

  1. 密碼複雜度:≥12 位,含大小寫、數字、特殊字符。
  2. 禁用 root 遠程:DELETE FROM mysql.user WHERE User='root' AND Host!='localhost'; FLUSH PRIVILEGES;
  3. 啟用 validate_password 插件強制策略。
  4. 定期輪換(建議 90 天),配合密碼管理工具存儲。

選對方法、懂版本差異、重安全策略,root 密碼管理不再是負擔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved