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

CentOS 7 重置 MySQL Root 密碼完整圖文教程

     編輯:MySQL 資料庫相關知識

場景:忘記 Root 密碼、初始隨機密碼未記錄、需緊急重置

前提:擁有**操作系統 Root 權限**(非 MySQL Root)。無系統 Root 權限請先解決 OS 級授權。

一、 系統級授予 Root 權限(三種方式)

方式 1:wheel 組 + sudo

# 1. 編輯 /etc/sudoers,取消註釋
%wheel ALL=(ALL) ALL
# 2. 將用戶加入 wheel 組
usermod -aG wheel tommy
# 3. 重新登錄,使用 sudo su - 獲取 Root

方式 2:直接配置 sudoers

# /etc/sudoers 添加
tommy ALL=(ALL) ALL

方式 3:修改 UID 為 0(極度不推薦,安全風險極高)

# /etc/passwd 修改用戶 UID 為 0
tommy:x:0:500:tommy:/home/tommy:/bin/bash

二、 正確停止 MySQL(避免 subsys locked)

# 正確姿勢
systemctl stop mysqld
# 或
/etc/init.d/mysqld stop

# ❌ 禁用 pkill mysql
# 會導致:mysqld dead but subsys locked
# 若已誤用,需 systemctl start mysqld 再 stop

三、 跳過權限表啟動 MySQL(核心步驟)

1. 獲取 mysqld_safe 路徑

systemctl start mysqld
ps -ef | grep mysql
# 關鍵輸出:/usr/bin/mysqld_safe --datadir=/var/lib/mysql ...
# 記住路徑:/usr/bin/

2. 停止服務並以安全模式啟動

systemctl stop mysqld
/usr/bin/mysqld_safe --skip-grant-tables >/dev/null 2>&1 &

等待 5 秒確保啟動完成。

四、 無密碼登錄並修改密碼

/usr/bin/mysql -u root mysql
# 進入 mysql> 提示符後執行:
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;

版本差異提示:

  • MySQL 5.7+:密碼列為 authentication_string
  • MySQL 5.6/早期:密碼列為 password
  • MariaDB:同 MySQL 5.7+

五、 正規化密碼設置(解決 1820 錯誤)

修改後直接 SHOW DATABASES 會報錯:ERROR 1820 (HY000): You must SET PASSWORD before executing this statement

mysql -u root -p
# 輸入新密碼登錄
SET PASSWORD = PASSWORD('new_password');
FLUSH PRIVILEGES;
SHOW DATABASES;  -- 驗證成功

六、 替代工具:mysqladmin 修改密碼

# 需知舊密碼
mysqladmin -u root -p password 'new_password'
# 輸入舊密碼即可

七、 常見坑點總結

問題原因解決
mysqld_safe 找不到安裝路徑非標準find / -name mysqld_safe 或 rpm -ql mysql-server | grep mysqld_safe
--skip-grant-tables 無效未完全停止原進程pkill -9 mysqld; pkill -9 mysqld_safe 徹底清理
密碼修改不生效列名錯誤(password vs authentication_string)DESC mysql.user 確認列名
FLUSH PRIVILEGES 後仍報 1820需執行 SET PASSWORD 正式生效按本文第 5 節操作
啟動報錯:Can't create test filedatadir 權限或路徑錯誤檢查 --datadir 參數與目錄擁有者

八、 生產環境建議

  1. 使用密碼管理器存儲 Root 密碼,杜絕「忘記」。
  2. 創建專用運維帳號(如 dba@'%'),授予所需權限,**禁用 Root 遠程登錄**。
  3. 定期輪換密碼,配合 validate_password 插件強制複雜度。
  4. 記錄每次密碼變更操作日誌,包含時間、操作人、原因。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved