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

MySQL 5.6 Root密碼重置標準流程(Linux/CentOS環境)

     編輯:MySQL 綜合教學

MySQL 5.6 Root密碼重置標準流程(Linux/CentOS環境)

生產環境多基於Linux部署MySQL 5.6,Root密碼遺忘時需通過 --skip-grant-tables 進入免驗證模式修改。本文記錄標準操作流程、關鍵參數說明及5.6版本特有的 SET PASSWORD 二次驗證機制。

環境確認

# 查看版本
mysql -V
# 或
rpm -qa | grep -i mysql

# 輸出示例
MySQL-server-5.6.15-1.el6.x86_64
MySQL-client-5.6.15-1.el6.x86_64
...

標準重置流程

1. 停止 MySQL 服務

service mysql stop
# 或 systemctl stop mysqld (CentOS 7+)
# 輸出: Shutting down MySQL.. SUCCESS!

2. 跳過授權表啟動

mysqld_safe --skip-grant-tables &
# 輸出示例:
# 140211 15:37:49 mysqld_safe Logging to '/var/lib/mysql/hostname.err'.
# 140211 15:37:49 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

# 關鍵: 必須加 & 後台運行,否則佔用終端無法操作

3. 免密登錄並修改密碼

mysql
# 進入交互模式,無需密碼

USE mysql;

# MySQL 5.6 密碼列名為 password (5.7+ 為 authentication_string)
UPDATE user SET password=PASSWORD('123456') WHERE user='root';
# Query OK, 4 rows affected (匹配 root@localhost, root@127.0.0.1, root@::1, root@hostname)

FLUSH PRIVILEGES;  -- 必須刷新,否則修改不生效
EXIT;

4. 重啟服務驗證

# 關閉 skip-grant-tables 進程
# 方式1: 前台運行時 Ctrl+C
# 方式2: 後台運行時
jobs
kill %1  # 或 kill 

# 正常啟動
service mysql start
# Starting MySQL SUCCESS!

5. 新密碼登錄與 5.6 強制修改密碼機制

mysql -uroot -p123456

# 5.6 特有: 首次登錄後若密碼被標記為過期,會強制要求修改
# ERROR 1820 (HY000): You must SET PASSWORD before executing this statement

SET PASSWORD = PASSWORD('123456');
# Query OK, 0 rows affected

SHOW DATABASES;
# 正常顯示數據庫列表

關鍵點深度解析

3.1 為什麼 UPDATE 影響 4 行?

mysql.user 表中 Root 默認存在 4 個 Host 組合:

  • root@localhost (Socket連接)
  • root@127.0.0.1 (TCP回環)
  • root@::1 (IPv6回環)
  • root@hostname (主機名連接)

建議: 統一修改所有 Root 賬號密碼,或按需保留特定 Host。

3.2 PASSWORD() 函數與 authentication_string

  • MySQL 5.6:密碼存儲在 password 列,PASSWORD('plain') 生成 41 位十六進制哈希
  • MySQL 5.7+:列名改為 authentication_string,哈希算法升級為 caching_sha2_password (8.0默認) 或 mysql_native_password
  • 跨版本遷移注意: 5.6 導出的密碼哈希在 5.7+ 可能需重置

3.3 FLUSH PRIVILEGES 必不可少

--skip-grant-tables 模式下,權限表不加載到內存,直接修改磁盤表數據。FLUSH PRIVILEGES 強制重新讀取授權表到內存,使修改即時生效。否則正常啟動後仍舊密碼。

3.4 ERROR 1820 強制修改密碼機制

MySQL 5.6.6+ 引入密碼過期策略。--skip-grant-tables 修改密碼時,password_expired 列可能被置為 Y。首次正常登錄會觸發強制修改流程,執行 SET PASSWORD 後重置過期標記。

常見問題排查

問題原因解決
mysqld_safe 啟動後無法連接Socket文件路徑不匹配指定 --socket=/var/lib/mysql/mysql.sock 或配置文件 [client] socket路徑
UPDATE 0 rows affectedWHERE條件不匹配 (Host大小寫、IPv6格式)SELECT user, host FROM user; 確認精確值再 UPDATE
服務啟動失敗: The server quit without updating PID filedata目錄權限錯誤 / 殘留進程 / 配置錯誤chown -R mysql:mysql /var/lib/mysql; 檢查錯誤日志; kill殘留進程
密碼修改後遠程無法連接無 root@% 賬號 / 防火牆 / bind-address=127.0.0.1CREATE USER 'root'@'%' IDENTIFIED BY 'pwd'; GRANT ALL...; 開放3306; my.cnf bind-address=0.0.0.0

安全加固建議

# 1. 刪除匿名用戶
DELETE FROM mysql.user WHERE User='';
# 2. 禁止Root遠程登錄 (僅保留localhost/127.0.0.1)
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');
# 3. 刪除test庫
DROP DATABASE test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%';
# 4. 刷新生效
FLUSH PRIVILEGES;

# 5. 啟用密碼驗證插件 (my.cnf)
[mysqld]
plugin-load=validate_password.so
validate_password_policy=MEDIUM
validate_password_length=12
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved