MySQL 5.7+ 免安裝版(ZIP 包)部署看似簡單,實則暗藏「data 目錄缺失需初始化」、「臨時密碼獲取」、「skip-grant-tables 修改密碼失效」、「密碼策略導致修改失敗」等多個坑點。本文記錄一次完整的反復試錯過程,提煉出標準化部署 SOP。
[client] default-character-set = utf8mb4 [mysqld] port = 3306 basedir = "E:/DBFiles/mysql-5.7.15-winx64/mysql-5.7.15-winx64" datadir = "E:/DBFiles/mysql-5.7.15-winx64/mysql-5.7.15-winx64/data" tmpdir = "E:/DBFiles/mysql-5.7.15-winx64/mysql-5.7.15-winx64/data" socket = "E:/DBFiles/mysql-5.7.15-winx64/mysql-5.7.15-winx64/data/mysql.sock" log-error = "E:/DBFiles/mysql-5.7.15-winx64/mysql-5.7.15-winx64/data/mysql_error.log" # 開發機適度配置 max_connections = 200 innodb_buffer_pool_size = 512M innodb_log_file_size = 64M sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO" character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
mysqld install MySQL5715 --defaults-file="E:\DBFiles\mysql-5.7.15-winx64\mysql-5.7.15-winx64\my.ini"
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongP@ssw0rd!'; FLUSH PRIVILEGES;
嘗試在 `my.ini` 添加 `skip-grant-tables=1` 重啟後免密登錄修改密碼:
UPDATE mysql.user SET authentication_string = PASSWORD('root') WHERE User = 'root';
FLUSH PRIVILEGES;
原因:`authentication_string` 更新未觸發密碼過期標記重置。需執行標準 ALTER USER 完成重置:
mysql -u root -p'root' USE mysql; SHOW TABLES; -- 成功,無需再次修改密碼
HeidiSQL / Navicat / DataGrip / MySQL Workbench 均可通過 `127.0.0.1:3306`、用戶 `root`、新密碼正常連接。
Windows 免安裝版 MySQL 部署的核心坑點在於 **5.7 強制密碼策略與 skip-grant-tables 的衝突**。遵循「初始化捕獲臨時密碼 → 直接 ALTER USER 修改 → 禁用 skip-grant-tables」這條主線,拒絕「先 skip-grant-tables 再 UPDATE authorization_string 再 ALTER USER」的繞彎路,即可一次成功,獲得穩定可用的開發實例。