MySQL 5.7 ZIP 免安裝版適合多版本共存、綠色部署。本文記錄在 E:\DBFiles\mysql-5.7.15-winx64 實際部署過程中遇到的初始化、服務註冊、skip-grant-tables 密碼重置、ALTER USER vs UPDATE user 等坑點與解法。
my.inibasedir = "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"
port = 3306
character-set-server = utf8mb4
sql-mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# 其餘緩衝池、日誌、執行緒參數見正文完整配置
cd E:\DBFiles\mysql-5.7.15-winx64\mysql-5.7.15-winx64\bin
mysqld --initialize
# 生成 data 目錄、隨機 root 密碼寫入 .err 日誌

mysqld install MySQL --defaults-file="E:\DBFiles\mysql-5.7.15-winx64\mysql-5.7.15-winx64\my.ini"
net start MySQL
# 提示輸入密碼,但無密碼可輸入(隨機密碼未知)

# my.ini [mysqld] 加入
skip-grant-tables=1
net stop MySQL && net start MySQL

mysql -uroot
USE mysql;
UPDATE user SET authentication_string=PASSWORD('root') WHERE User='root';
FLUSH PRIVILEGES;


關鍵坑:skip-grant-tables模式下,ALTER USER 'root'@'localhost' IDENTIFIED BY 'root'會報The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement,**必須用 UPDATE user 表**。
# 註釋 skip-grant-tables=1
net stop MySQL && net start MySQL
mysql -uroot -proot
# 登入成功
USE mysql;
# ERROR 1820 (HY000): You must reset your password using ALTER USER statement
# 此時 ALTER USER 生效
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';


mysqld --initialize,無 data 目錄無法啟動skip-grant-tables 下**只能 UPDATE user 表**,ALTER USER 無效USE mysql 觸發密碼過期,**再執行一次 ALTER USER** 徹底解決validate_password 插件、強制複雜度、定期輪換免安裝版部署看似簡單,細節決定成敗,記錄下來下次不踩坑。