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

MySQL 修改密碼與 Root 忘記密碼重置全攻略 (Linux/Windows)

     編輯:MySQL 綜合教學

一、正常修改密碼 (已知舊密碼)

方法 1:SQL 語句 (通用)

-- 1. 登入
mysql -uroot -p

-- 2. 修改 (MySQL 5.7+)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 或 8.0+ 指定插件
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewStrongPass123!';

-- 3. 刷新權限
FLUSH PRIVILEGES;

方法 2:mysqladmin 命令列

mysqladmin -uroot -p'old_pass' password 'NewStrongPass123!'

方法 3:UPDATE mysql.user (舊版/兼容)

USE mysql;
UPDATE user SET authentication_string = PASSWORD('NewStrongPass123!') WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

注意:5.7+ password 欄位改為 authentication_string,且 PASSWORD() 函數 8.0 已移除,建議用 ALTER USER。

二、Root 忘記密碼重置 (跳過權限表啟動)

Linux 環境

  1. 停止服務:systemctl stop mysqld
  2. 啟動跳過權限模式:
    mysqld_safe --skip-grant-tables --skip-networking &
    (--skip-networking 防止外部連入,安全第一)
  3. 免密登入:mysql -uroot
  4. 修改密碼:
    FLUSH PRIVILEGES; -- 必須先執行,因 skip-grant-tables 下 grant 表不可寫
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
  5. 退出並正常重啟:
    mysqladmin -uroot -p'NewStrongPass123!' shutdown
    systemctl start mysqld

Windows 環境

  1. 打開服務管理器 (services.msc) 停止 MySQL 服務。
  2. 管理員 CMD 進入安裝目錄 bin:
    cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
  3. 啟動跳過權限:
    mysqld --console --skip-grant-tables --skip-networking
    (視窗保持開啟)
  4. 新開 CMD 免密登入:
    mysql -uroot
  5. 執行同樣的 FLUSH PRIVILEGES; ALTER USER ...。
  6. Ctrl+C 關閉第一個視窗,服務管理器重新啟動 MySQL 服務。

通用配置檔法 (不推薦,易忘記移除)

# my.cnf / my.ini [mysqld] 區段新增
skip-grant-tables
# 重啟服務 → 免密登入改密 → 刪除該行 → 再次重啟

三、重置後驗證與安全加固

  1. 測試新密碼:mysql -uroot -p'NewStrongPass123!' -e "SELECT 1;"
  2. 清理匿名用戶:DROP USER ''@'localhost'; DROP USER ''@'%';
  3. 禁止 Root 遠程:DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1'); FLUSH PRIVILEGES;
  4. 執行安全腳本:mysql_secure_installation (設定密碼策略、移除 test 庫等)。

四、常見坑

  • skip-grant-tables 未加 --skip-networking → 裸奔風險。
  • 未執行 FLUSH PRIVILEGES → 修改不生效 (skip-grant-tables 下 grant 表需手動刷新)。
  • 8.0 使用 PASSWORD() 函數報錯 → 必須用 ALTER USER。
  • Windows mysqld --console 視窗關閉導致進程結束 → 必須保持視窗開啟操作。

掌握標準修改流程與緊急重置藥方,配合安全加固清單,讓 MySQL 賬號管理既靈活又安全。

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