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

MySQL Root 密碼重置全平台指南:Windows/Linux 通用方案

     編輯:MySQL 資料庫相關知識

核心原理:跳過權限表啟動

通過 --skip-grant-tables 參數啟動 mysqld,mysqld 不加載權限表,允許無密碼任意連接並修改 mysql.user 表。操作完成後必須移除參數並重啟恢復正常認證。

Windows 圖形化操作步驟

  1. 停止 MySQL 服務:net stop mysql 或服務管理器
  2. 管理員打開 CMD,切換至安裝目錄 bin 目錄
  3. 啟動跳過權限模式:
    mysqld --skip-grant-tables --console
  4. 新開 CMD 窗口,無密碼登錄:
    mysql -u root
  5. 修改密碼(MySQL 5.7+ 使用 authentication_string):
    USE mysql;
    -- 5.7/8.0
    UPDATE user SET authentication_string=PASSWORD('NewPass123!') WHERE User='root';
    -- 5.6 及以下
    UPDATE user SET Password=PASSWORD('NewPass123!') WHERE User='root';
    FLUSH PRIVILEGES;
    EXIT;
  6. 關閉 --skip-grant-tables 窗口 (Ctrl+C),正常啟動服務
  7. 驗證新密碼:mysql -u root -p

Linux 系統級操作步驟

方法一:修改配置文件(推薦生產環境)

# 1. 確保安全狀態:關閉對外端口、停止應用
# 2. 編輯配置
vim /etc/my.cnf
# [mysqld] 區段添加
skip-grant-tables

# 3. 重啟服務
systemctl restart mysqld

# 4. 無密碼登錄修改
mysql -u root
UPDATE mysql.user SET authentication_string=PASSWORD('NewPass123!') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;

# 5. 移除配置並重啟
sed -i '/skip-grant-tables/d' /etc/my.cnf
systemctl restart mysqld

方法二:命令行直啟(適用緊急搶修)

systemctl stop mysqld
mysqld_safe --skip-grant-tables &
mysql -u root
# 同樣執行 UPDATE ... FLUSH PRIVILEGES
# 結束後
pkill mysqld
systemctl start mysqld

MySQL 8.0 特殊注意事項

  • password 列已移除,統一使用 authentication_string
  • 默認認證插件 caching_sha2_password,若客戶端不支持需指定:
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPass123!';
  • FLUSH PRIVILEGES 在 8.0 中隱式提交事務,無需額外 COMMIT

安全加固建議

  1. 重置後立即執行 mysql_secure_installation:移除匿名用戶、禁止遠程 root、刪除 test 庫
  2. 生產環境根賬號改名:RENAME USER 'root'@'localhost' TO 'admin'@'localhost';
  3. 配置密碼策略:validate_password.policy=STRONG、validate_password.length=12
  4. 定期輪換密碼,使用密碼管理工具存儲

常見失敗排查

現象原因解決
UPDATE 影響 0 行Host 不匹配(如 'root'@'%' vs 'root'@'localhost')SELECT User, Host FROM mysql.user; 精確匹配
修改後仍無法登錄未執行 FLUSH PRIVILEGES 或未重啟服務必須執行 FLUSH PRIVILEGES 並移除 skip-grant-tables 重啟
Windows 彈窗閃退mysqld --console 未加,日志輸出無處查看加 --console 參數或查看錯誤日志 .err 文件
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved