| MySQL 版本 | user 表密碼列 | 推薦修改方式 |
| 5.6 及之前 | password | UPDATE user SET Password=PASSWORD('new') |
| 5.7 | authentication_string | ALTER USER / SET PASSWORD |
| 8.0+ | authentication_string | ALTER USER / SET PASSWORD(默認 caching_sha2_password) |
通用標準語法(5.7+ 推薦)
方法一:ALTER USER(最標準、支持插件指定)
-- 登錄
mysql -u root -p
-- 修改密碼(默認插件)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 指定插件(兼容老客戶端)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewStrongPass123!';
-- 刷新權限
FLUSH PRIVILEGES;
方法二:SET PASSWORD(簡潔)
SET PASSWORD FOR 'root'@'localhost' = 'NewStrongPass123!';
-- 等價於
SET PASSWORD = 'NewStrongPass123!'; -- 當前用戶
方法三:UPDATE user 表(5.6 兼容、不推薦新版用)
USE mysql;
UPDATE user SET authentication_string = PASSWORD('NewStrongPass123!') WHERE User = 'root';
FLUSH PRIVILEGES;
忘記 root 密碼緊急重置(跳過授權表啟動)
# 1. 停止服務
systemctl stop mysqld
# 2. 跳過授權表啟動
mysqld_safe --skip-grant-tables --skip-networking &
# 3. 無密碼登錄修改
mysql -u root
FLUSH PRIVILEGES; -- 5.7+ 必須先執行
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
# 4. 正常重啟
mysqladmin shutdown
systemctl start mysqld
Windows:命令行 mysqld --skip-grant-tables --skip-networking,另開窗口執行修改。
密碼策略與驗證
-- 查看密碼策略
SHOW VARIABLES LIKE 'validate_password%';
-- 臨時降低策略(便於測試)
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 4;
-- 生產環境建議
validate_password.policy = STRONG
validate_password.length = 16
validate_password.mixed_case_count = 1
validate_password.number_count = 1
validate_password.special_char_count = 1
多宿主 root 賬號批量修改
-- 查看所有 root 賬號
SELECT User, Host, plugin FROM mysql.user WHERE User = 'root';
-- 逐個修改(建議統一插件)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Pass123!';
ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'Pass123!';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Pass123!';
FLUSH PRIVILEGES;
客戶端連接驗證
# 命令行驗證
mysql -u root -p'NewPass123!' -e "SELECT VERSION();"
# JDBC 驗證
jdbc:mysql://host:3306/db?user=root&password=NewPass123!&useSSL=false
# 應用配置同步修改(Spring Boot 示例)
spring:
datasource:
username: root
password: NewPass123! # 必須同步更新,否則啟動失敗
避坑清單
- FLUSH PRIVILEGES:UPDATE user 表後必須執行;ALTER USER/SET PASSWORD 內部已隱式刷新
- 插件兼容:8.0 默認
caching_sha2_password,舊版 PHP/JDBC 需指定 mysql_native_password
- 特殊字符轉義:Shell 中單引號包裹密碼,避免
! $ 等被解析
- 主從環境:主庫修改後,從庫
CHANGE MASTER TO MASTER_PASSWORD='new' 並 STOP/START SLAVE
- 應用重啟:密碼修改後,所有連接池需重建,建議滾動重啟應用
掌握版本差異、標準語法、緊急重置、密碼策略、批量修改、驗證與避坑,即可從容應對所有 MySQL root 密碼管理場景。
- 上一篇文章: 解決 MySQL 啟動錯誤:Table 'mysql.host' doesn't exist 及服務無法啟動問題
- 下一篇文章: MySQL 核心數據安全防護七大實戰策略
Copyright ©
程式碼之家 All Rights Reserved