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

MySQL 忘記 root 密碼三種重置方案(Linux/Windows 通用,含 5.7+ authentication_string 注意)

     編輯:MySQL 綜合教學

MySQL root 密碼重置三大方案(含版本差異)

適用 MySQL 5.6 / 5.7 / 8.0,Linux 與 Windows 通用。

方案一:查看安裝生成的隨機密碼(5.7+)

# Linux
cat /root/.mysql_secret
# 或
grep 'temporary password' /var/log/mysqld.log

# Windows
# 檢查安裝目錄下的 .mysql_secret 或錯誤日誌
mysql -u root -p'random_password'

方案二:skip-grant-tables 臨時跳過權限表(通用)

# 1. 停止服務
systemctl stop mysqld        # Linux systemd
service mysqld stop          # Linux sysvinit
net stop mysql               # Windows

# 2. 啟動跳過授權
mysqld_safe --skip-grant-tables --skip-networking &   # Linux
# Windows: 在 my.ini [mysqld] 加入 skip-grant-tables 後 net start mysql

# 3. 免密登入
mysql -u root

# 4. 重置密碼(注意欄位差異)
USE mysql;

-- MySQL 5.6
UPDATE user SET password=PASSWORD('NewPass123!') WHERE user='root';

-- MySQL 5.7 / 8.0
UPDATE user SET authentication_string=PASSWORD('NewPass123!') WHERE user='root';
-- 或 8.0.4+
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';

FLUSH PRIVILEGES;
QUIT;

# 5. 正常重啟
systemctl start mysqld
# Windows: 移除 my.ini skip-grant-tables 後 net start mysql

方案三:--init-file 初始化腳本重置(適合自動化)

# 1. 建立 SQL 腳本
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';" > /tmp/reset_root.sql

# 2. 啟動時載入
mysqld --init-file=/tmp/reset_root.sql --user=mysql &

# 3. 正常登入驗證
mysql -u root -p'NewPass123!'

首次登入可能遇到的 1820 錯誤

ERROR 1820 (HY000): You must SET PASSWORD before executing this statement

解決:

SET PASSWORD = PASSWORD('NewPass123!');
-- 或
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';

版本關鍵差異速查

版本密碼欄位PASSWORD() 函數推薦語法
5.6password支援UPDATE user SET password=PASSWORD(...)
5.7authentication_string支援UPDATE user SET authentication_string=PASSWORD(...)
8.0authentication_string8.0.11 移除ALTER USER ... IDENTIFIED BY ...

安全收尾

  • 移除 skip-grant-tables 並重啟
  • 執行 mysql_secure_installation
  • 禁止 root 遠端登入:DELETE FROM mysql.user WHERE user='root' AND host NOT IN ('localhost','127.0.0.1','::1'); FLUSH PRIVILEGES;
  • 使用強密碼策略
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved