首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 忘記 root 密碼四大重置方案:SET PASSWORD、mysqladmin、UPDATE user、skip-grant-tables

     編輯:MySQL 資料庫相關知識

場景分類速查

場景適用方案前提條件
知舊密碼,常規修改方案 1、2、3能正常登入
完全忘記、無法登入方案 4有系統 root/sudo 權限

方案一:SET PASSWORD (需登入)

mysql -u root -p
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
FLUSH PRIVILEGES;

方案二:mysqladmin 命令行 (需知舊密碼)

# 首次設密或知舊密
mysqladmin -u root password "newpass"

# 已有密碼修改
mysqladmin -u root -p'oldpass' password "newpass"

方案三:直接 UPDATE mysql.user 表 (需登入)

mysql -u root -p
USE mysql;
UPDATE user SET Password = PASSWORD('newpass') WHERE User = 'root';
FLUSH PRIVILEGES;

注意:MySQL 5.7+ 密碼列改為 authentication_string,語法需調整:

UPDATE user SET authentication_string = PASSWORD('newpass') WHERE User = 'root';

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

步驟

  1. 停止 MySQL 服務:systemctl stop mysqld / net stop mysql
  2. 以跳過授權模式啟動:mysqld_safe --skip-grant-tables &
  3. 無密碼登入:mysql -u root
  4. 修改密碼:
USE mysql;
UPDATE user SET Password = PASSWORD('newpass') WHERE User = 'root';
-- 5.7+ 用 authentication_string
FLUSH PRIVILEGES;
  1. 退出,正常重啟 MySQL:systemctl restart mysqld

Windows 批處理腳本

@echo off
net stop mysql
start "mysqld_safe" mysqld --skip-grant-tables
timeout /t 3
mysql -u root -e "USE mysql; UPDATE user SET Password=PASSWORD('newpass') WHERE User='root'; FLUSH PRIVILEGES;"
taskkill /f /im mysqld.exe
net start mysql
echo 密碼已重置為 newpass
pause

安全加固建議

  • 重置後立即執行 mysql_secure_installation
  • 禁止 root 遠程登入:DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');
  • 定期輪換密碼,使用密碼管理器
  • 生產環境啟用 validate_password 插件強制複雜度
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved