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

MySQL 5.6 Root 密碼遺忘重置:skip-grant-tables 與 explicit_defaults_for_timestamp 避坑實戰

     編輯:MySQL 綜合教學

MySQL 5.6 Root 密碼遺忘重置:skip-grant-tables 與 explicit_defaults_for_timestamp 避坑實戰

MySQL 5.6 引入 explicit_defaults_for_timestamp 預設關閉導致 mysqld --skip-grant-tables 啟動報警告甚至失敗。本文提供 Windows 平台完整重置流程,含配置檔修正、手動啟動參數化、密碼更新與權限刷新。

問題現象


mysqld --skip-grant-tables
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
Please use --explicit_defaults_for_timestamp server option.

警告雖不阻塞啟動,但規範運維需修正根因。

標準重置流程(Windows)

  1. 停止現有服務:
    
    net stop mysql  # 服務名可能為 MySQL56、MySQL57 等,用 `sc query` 確認
    
  2. 修改 my.ini 添加參數:
    
    # 找到 [mysqld] 區段
    [mysqld]
    explicit_defaults_for_timestamp = true
    
  3. 手動啟動 mysqld 指定配置檔與跳過授權:
    
    # 假設 my.ini 路徑
    mysqld --defaults-file="D:\MySQL\MySQL Server 5.6\my.ini" --skip-grant-tables
    

    保持此命令行窗口開啟(mysqld 前台運行)。

  4. 新開命令行無密碼登入並更新密碼:
    
    mysql -u root
    mysql> UPDATE mysql.user SET Password=PASSWORD('NewStrongPass123!') WHERE User='root' AND Host='localhost';
    mysql> FLUSH PRIVILEGES;
    
  5. 關閉手動 mysqld,重啟正常服務:
    
    Ctrl+C 關閉前台 mysqld
    net start mysql
    # 驗證新密碼
    mysql -u root -p'NewStrongPass123!'
    

MySQL 5.7+ 密碼欄位變更注意

5.7 起 mysql.user 表密碼欄位從 Password 改為 authentication_string,更新語法:


UPDATE mysql.user SET authentication_string=PASSWORD('NewPass') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

或使用 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass';(需正常授權模式下)。

生產環境安全建議

  • 重置後立即審計權限:SELECT User, Host, plugin FROM mysql.user;
  • 禁用遠程 root:DELETE FROM mysql.user WHERE User='root' AND Host!='localhost'; FLUSH PRIVILEGES;
  • 啟用 validate_password 插件強制密碼複雜度;
  • 定期輪換密碼並記錄審計日誌。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved