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

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

     編輯:MySQL 綜合教學

核心原理

通過 跳過權限表驗證 (--skip-grant-tables) 啟動 MySQL 實例,以無密碼 Root 身份登錄,修改 mysql.user 表或執行 SET PASSWORD,刷新權限後重啟實例生效。

Windows 環境操作步驟

  1. 以管理員身份打開「服務」(services.msc),停止 MySQL 服務。
  2. 管理員 CMD 進入安裝目錄 bin 目錄 (如 D:\MySQL\MySQL Server 5.7\bin)。
  3. 跳過授權啟動:
    mysqld --console --skip-grant-tables --shared-memory
    保持此窗口開啟 (關閉即停止實例)。
  4. 新開管理員 CMD,無密碼登錄:
    mysql -u root
  5. 修改密碼 (MySQL 5.7+ / 8.0):
    FLUSH PRIVILEGES;
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
    -- 或 5.6 版本
    UPDATE mysql.user SET authentication_string=PASSWORD('NewStrongPass123!') WHERE User='root' AND Host='localhost';
    FLUSH PRIVILEGES;
  6. 關閉第一個 CMD 窗口 (Ctrl+C 停止 --skip-grant-tables 實例)。
  7. 在服務管理器重啟 MySQL 服務,新密碼登錄驗證。

Linux (CentOS/Ubuntu) 環境操作步驟

方法一:systemd 服務修改法 (推薦,CentOS 7 / Ubuntu 16.04+)

systemctl stop mysqld
# 編輯服務文件
systemctl edit mysqld
# 在 [Service] 區段添加
ExecStartPre=
ExecStartPre=/usr/bin/mysqld_pre_systemd
ExecStart=
ExecStart=/usr/sbin/mysqld --skip-grant-tables --user=mysql $MYSQLD_OPTS
# 保存退出
systemctl daemon-reload
systemctl start mysqld
# 無密碼登錄修改密碼 (同 Windows 步驟 5)
# 修改完成後,撤銷上面的修改 (systemctl edit 刪除添加的內容),daemon-reload 並 restart

方法二:傳統 mysqld_safe 法 (通用)

# 1. 停止服務
systemctl stop mysqld  # 或 service mysql stop

# 2. 創建數據目錄權限臨時目錄 (防止 socket 找不到)
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld

# 3. 後台啟動跳過授權
mysqld_safe --skip-grant-tables --skip-networking &  # --skip-networking 僅本地登錄,更安全
# 等待幾秒確認啟動

# 4. 無密碼登錄
mysql -u root

# 5. 修改密碼 (同步刷新權限)
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 5.7 以下版本
UPDATE mysql.user SET authentication_string=PASSWORD('NewStrongPass123!') WHERE User='root';
FLUSH PRIVILEGES;

# 6. 關閉臨時實例
mysqladmin -u root -p'NewStrongPass123!' shutdown
# 或 kill `cat /var/run/mysqld/mysqld.pid`

# 7. 正常啟動
systemctl start mysqld

MySQL 8.0 特別注意事項

  • password 列已重命名為 authentication_string。
  • 默認認證插件為 caching_sha2_password,若客戶端不支援,需指定:
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewStrongPass123!';
    
  • FLUSH PRIVILEGES 在 --skip-grant-tables 模式下必須執行,否則修改不生效。

安全加固建議

  1. 密碼策略:長度 ≥ 12 位,含大小寫、數字、特殊符號。
  2. 禁用 Root 遠程登錄:DELETE FROM mysql.user WHERE User='root' AND Host!='localhost'; FLUSH PRIVILEGES;
  3. 創建業務專用賬號,最小權限原則。
  4. 定期輪換密碼,審計賬號權限。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved