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

MySQL 5.7 忘記 Root 密碼重置完整指南

     編輯:MySQL 資料庫相關知識

適用場景

  • CentOS/RHEL 7 系列
  • MySQL 5.7 / 8.0
  • 已有 root 系統權限

核心原理

通過 skip-grant-tables 跳過權限表驗證,免密登錄修改 mysql.user 表的 authentication_string 字段(5.7+ 棄用 password 字段)。

步驟詳解

1. 修改配置文件啟用免密模式

vim /etc/my.cnf

# 在 [mysqld] 區塊添加
skip-grant-tables

2. 重啟 MySQL 服務

systemctl restart mysqld
# 或
service mysqld restart

3. 免密登錄並修改密碼

mysql -u root -p
# 直接回車,無需密碼

USE mysql;

# 5.7+ 必須用 authentication_string
UPDATE user SET authentication_string=PASSWORD('NewPass123!') WHERE User='root';
FLUSH PRIVILEGES;

QUIT;

4. 關閉免密模式並重啟

vim /etc/my.cnf
# 刪除或註釋 skip-grant-tables

systemctl restart mysqld

5. 登錄並完成密碼策略合規化

mysql -u root -p
# 輸入新密碼

# 5.7 要求首次登錄必須重置密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';

密碼策略報錯處理

若報錯 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements:

-- 降低密碼策略至 LOW(僅檢查長度)
SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password_length=4;

-- 重新設置密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';

-- 恢復生產級策略(可選)
SET GLOBAL validate_password_policy=MEDIUM;
SET GLOBAL validate_password_length=8;

MySQL 8.0 差異說明

  • 密碼驗證插件預設為 caching_sha2_password
  • 修改密碼語法相同:ALTER USER 'root'@'localhost' IDENTIFIED BY 'pass';
  • 若客戶端不支持新插件,可改用 mysql_native_password:
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass';

避坑清單

  1. 務必清空 data 目錄後再初始化:殘留文件導致初始化失敗
  2. 5.7 用 authentication_string 而非 password:字段名變更是高頻錯誤源
  3. FLUSH PRIVILEGES 不可漏:否則修改不生效
  4. 生產環境嚴禁長期開啟 skip-grant-tables:極大安全風險
  5. 密碼策略調整後記得恢復:避免弱密碼風險

一鍵腳本(生產環境請手動執行)

#!/bin/bash
# reset_mysql_root.sh
systemctl stop mysqld
sed -i '/^\[mysqld\]/a skip-grant-tables' /etc/my.cnf
systemctl start mysqld
mysql -u root -e "USE mysql; UPDATE user SET authentication_string=PASSWORD('TempPass123!') WHERE User='root'; FLUSH PRIVILEGES;"
sed -i '/skip-grant-tables/d' /etc/my.cnf
systemctl restart mysqld
mysql -u root -p'TempPass123!' -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';"
echo "Root 密碼已重置為 NewStrongPass123!"
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved