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

CentOS 7/8 MySQL 8.0/5.7 忘記 root 密碼重置標準流程 (--skip-grant-tables)

     編輯:MySQL 資料庫相關知識

CentOS/RHEL 系列 Linux 下 MySQL 密碼重置標準化操作流程,經 CentOS 7/8 + MySQL 5.7/8.0 實測驗證。採用 --skip-grant-tables 跳過授權表啟動,空密碼登錄,更新密碼,刷新權限,正常重啟五步法。

環境信息

  • OS:CentOS 7.9 / 8.5 / Rocky Linux 8 / AlmaLinux 8
  • MySQL:5.7 / 8.0 (官方 RPM / Yum 安裝)
  • 數據目錄:/var/lib/mysql,配置文件:/etc/my.cnf

重置流程 (3 分鐘)

1. 停止 MySQL 服務

systemctl stop mysqld
# 或舊版
service mysqld stop

2. 以 --skip-grant-tables 啟動 (後台、無網絡更安全)

# 方式一:mysqld_safe (推薦,自動監護重啟)
mysqld_safe --skip-grant-tables --skip-networking &

# 方式二:mysqld 直接啟動 (前台調試用)
mysqld --skip-grant-tables --skip-networking --user=mysql &

⚠️ 必加 --skip-networking:防止跳過授權期間外部連接入侵,僅允許本地 Socket 連接。

3. 空密碼登錄 MySQL

mysql -u root -p
# Enter password: 直接回車 (空密碼)

4. 更新 root 密碼 (版本差異 SQL)

MySQL 5.7:

UPDATE mysql.user SET authentication_string = PASSWORD('NewStrongPass123') WHERE User = 'root';
FLUSH PRIVILEGES;

MySQL 8.0: (推薦 ALTER USER,自動處理 caching_sha2_password)

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123';
FLUSH PRIVILEGES;

⚠️ 8.0 若用 UPDATE 需同步更新 plugin 列為 caching_sha2_password,易出錯,**強烈建議用 ALTER USER**。

5. 退出並正常重啟服務

EXIT;
# 停止臨時實例
pkill -f "mysqld.*skip-grant-tables"
# 或
mysqladmin -u root -p'NewStrongPass123' shutdown

# 啟動正常服務
systemctl start mysqld

# 驗證
mysql -u root -p'NewStrongPass123' -e "SELECT 1;"

常見坑點速查

現象原因解決
ERROR 1045 即使用 skip-grant-tables未加 --skip-networking,連上了正常運行的實例確認舊實例已停、新實例加 --skip-networking
Unknown column 'password'5.7/8.0 密碼列為 authentication_string用版本對應 SQL,見上文
重置後無法啟動正常服務臨時實例未完全停止、端口/鎖文件佔用pkill -9 mysqld、檢查 /var/run/mysqld/mysqld.pid、/var/lib/mysql/*.sock
SELinux 阻擋啟動CentOS 7/8 默認 Enforcingsetenforce 0 臨時放行、或配置 mysqld_t 上下文

systemd 服務化一鍵重置 (生產標準,單次重啟)

# 1. 創建 SQL 文件
cat > /root/reset_root.sql <<'EOF'
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123';
FLUSH PRIVILEGES;
EOF
chmod 600 /root/reset_root.sql

# 2. 臨時 override 啟動參數
systemctl edit mysqld
# 添加:
[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --init-file=/root/reset_root.sql $@

# 3. 重啟生效
systemctl daemon-reload
systemctl restart mysqld

# 4. 驗證後移除 override
systemctl edit mysqld
# 刪除內容,保存
systemctl daemon-reload
systemctl restart mysqld

# 5. 清理 SQL 文件
shred -u /root/reset_root.sql

總結

CentOS MySQL 密碼重置鐵律:停服務、skip-grant-tables+skip-networking、空密碼登、ALTER USER 改密、FLUSH PRIVILEGES、殺臨時啟正常、驗證新密碼。生產環境優先用 systemd --init-file 單次重啟方案,安全、可審計、可自動化。

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