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

MySQL root 密碼重置全流程(親測可用,含安全模式與權限刷新)

     編輯:MySQL 綜合教學

⚠️ 關鍵前提:安全狀態下操作

重置期間 MySQL **完全無密碼保護**,任何人可任意登錄修改。必須:

  • 關閉對外端口(防火牢/安全組封禁 3306)
  • 停止 Apache/應用進程
  • 最佳:物理機 Console 操作 + 拔網線

步驟 1:修改配置啟用跳過權限表

vi /etc/my.cnf
# 在 [mysqld] 區段添加
skip-grant-tables

示例:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-grant-tables

步驟 2:重啟 MySQL 服務

/etc/init.d/mysqld restart
# 或
service mysqld restart
# systemd 系統
systemctl restart mysqld

步驟 3:無密碼登錄並修改密碼

/usr/bin/mysql
# 進入 mysql> 提示符後
USE mysql;
UPDATE user SET Password = PASSWORD('new-password') WHERE User = 'root';
FLUSH PRIVILEGES;
QUIT;

注意: MySQL 5.7+ user 表無 Password 列,改為 authentication_string:

UPDATE user SET authentication_string = PASSWORD('new-password') WHERE User = 'root';
FLUSH PRIVILEGES;

MySQL 8.0+ 推薦:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password';
FLUSH PRIVILEGES;

步驟 4:恢復配置並重啟

vi /etc/my.cnf
# 刪除 skip-grant-tables 行
/etc/init.d/mysqld restart

步驟 5:驗證新密碼

mysql -u root -p'new-password' -e "SELECT VERSION();"

常見問題排查

現象原因解決
UPDATE 影響 0 行Host 不匹配(如 'root'@'127.0.0.1')WHERE User='root' AND Host='%' 或逐個 Host 更新
密碼生效但應用連不上應用配置未同步修改更新應用端連接字符串
skip-grant-tables 無效配置文件區段錯誤/未重啟確認在 [mysqld] 區段、已重啟服務

生產環境最佳實踐

  1. **提前演練**:在測試環境走一遍流程
  2. **雙人操作**:一個操作、一個監控日誌
  3. **記錄審計**:操作前後截圖留存
  4. **密碼策略**:新密碼符合複雜度要求,存入密碼管理器
  5. **事後清理**:檢查是否有殘留的無密碼賬戶、匿名用戶

替代方案(MySQL 8.0+)

若可短暫停機,可用 --init-file 方式:

# 1. 創建 init.sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password';
# 2. 啟動時加載
mysqld --init-file=/path/to/init.sql --user=mysql
# 3. 登錄驗證後移除 --init-file 參數正常啟動

此法無需 skip-grant-tables,安全性更高。

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