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

Linux MySQL 5.6 忘記 Root 密碼?跳過授權表重置密碼全流程

     編輯:MySQL 綜合教學

Linux MySQL 5.6 忘記 Root 密碼?跳過授權表重置密碼全流程

MySQL 5.6+ 為安全起見,不再預設空密碼,而是生成隨機密碼存放在 ~/.mysql_secret。若找不到該文件或安裝方式不同,導致 ERROR 1045 (28000): Access denied,本文提供標準重置方案。

現象確認

[root@DB-Server ~]# mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

提示 using password: NO 表示客戶端未傳遞密碼,或服務端拒絕空密碼登錄。

標準重置步驟

1. 停止 MySQL 服務

systemctl stop mysqld    # 或 /etc/init.d/mysql stop

2. 跳過授權表啟動

mysqld_safe --skip-grant-tables --skip-networking --user=mysql &
  • --skip-grant-tables:不載入權限表,繞過密碼驗證。
  • --skip-networking:僅本地套接字連接,防止外部入侵。
  • &:後台運行。終端會卡住輸出日志,Ctrl+C 返回 shell 不影響進程。

3. 免密登錄並修改密碼

mysql -u root mysql
# 進入 mysql 庫
UPDATE user SET authentication_string=PASSWORD('NewPass123#') 
WHERE User='root' AND Host IN ('localhost','127.0.0.1','::1');
FLUSH PRIVILEGES;
QUIT;

注意:MySQL 5.7+ 密碼列為 authentication_string,5.6 為 Password。請根據版本調整列名。

4. 正常重啟驗證

systemctl restart mysqld
mysql -u root -p'NewPass123#'  # 應成功登錄

常見坑點排查

現象原因解決
mysqld_safe 後台卡住前台輸出日志Ctrl+C 返回,或新開終端操作
修改密碼後仍報 1045未執行 FLUSH PRIVILEGES必須刷新權限或重啟服務
密碼列名報錯版本差異用 DESC mysql.user 確認列名
權限表損壞誤操作用 mysql_upgrade 修復或重建實例

MySQL 5.7/8.0 專用:--init-file 法

更優雅,無需 skip-grant-tables:

# 1. 建立 SQL 文件
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123#';" > /tmp/reset.sql
# 2. 啟動時載入
mysqld --init-file=/tmp/reset.sql --user=mysql &
# 3. 登錄驗證後移除 init-file 參數正常重啟

安全加固建議

  1. 執行 mysql_secure_installation:移除匿名用戶、禁止 root 遠程登錄、刪除 test 庫。
  2. 生產環境 root 僅允許 localhost/Unix Socket 登錄。
  3. 應用使用專用賬號,最小權限原則。
  4. 定期輪換密碼,配置 validate_password 插件強制複雜度。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved