| 操作 | 命令 (MySQL 5.7/8.0) | 說明 |
|---|---|---|
| 安裝服務 | mysqld --install MySQL80 --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" | 指定服務名與配置文件路徑 |
| 移除服務 | mysqld --remove MySQL80 | 服務名需與安裝時一致 |
| 啟動服務 | net start MySQL80 或 sc start MySQL80 | sc 支援遠程管理 |
| 停止服務 | net stop MySQL80 或 sc stop MySQL80 | 正常關閉,觸發 InnoDB 清理 |
| 查看狀態 | sc query MySQL80 | 顯示 RUNNING/STOPPED/PENDING |
關鍵點:MySQL 8.0 預設服務名為 `MySQL80`,5.7 為 `MySQL57`,可自定義但需全流程一致。
黃金法則:**僅保留一個生效的 my.ini**,刪除/重命名其他位置的同名文件,避免配置衝突導致 1067/1056 錯誤。
[mysqld]
# === 基礎路徑 (必須與實際安裝目錄一致) ===
basedir=C:/Program Files/MySQL/MySQL Server 8.0
datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
# === 核心參數 ===
port=3306
default_authentication_plugin=caching_sha2_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=151
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
# === InnoDB 基線 ===
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=1
innodb_file_per_table=ON
# === 日誌 ===
log-error="C:/ProgramData/MySQL/MySQL Server 8.0/Logs/error.log"
slow_query_log=1
slow_query_log_file="C:/ProgramData/MySQL/MySQL Server 8.0/Logs/slow.log"
long_query_time=2
# === Windows 服務專用 ===
[mysqld_safe]
pid-file="C:/ProgramData/MySQL/MySQL Server 8.0/Data/mysqld.pid"
[client]
port=3306
default-character-set=utf8mb4
路徑規範:Windows 下**統一使用正斜線 `/`** 或雙反斜線 `\\`,單反斜線會被解析為轉義字元導致路徑錯誤。
1067 錯誤
│
├─ 配置文件問題 (80%)
│ ├─ my.ini 位置錯誤/多份衝突 → 清理只留一份
│ ├─ basedir/datadir 路徑錯誤 → 修正為實際絕對路徑
│ ├─ 字元集參數錯誤 (如 utf8 vs utf8mb4) → 統一 utf8mb4
│ ├─ 端口衝突 (port=3306 被佔用) → netstat -ano | findstr 3306
│ └─ 權限不足 (datadir 無 SYSTEM 訪問權) → icacls 授權
│
├─ 數據目錄問題 (15%)
│ ├─ 遷移後 data 目錄不完整 → 完整複製整個 Data 目錄
│ ├─ ibdata1/ib_logfile 損壞 → 刪除重建 (有備份則恢復)
│ ├─ 升級未執行 mysql_upgrade → 以 --skip-grant-tables 啟動執行
│ └─ 殘留 .pid/.sock/.lock 文件 → 刪除後重試
│
├─ 依賴缺失 (5%)
│ ├─ Visual C++ Redistributable 缺失 → 安裝 VC++ 2015-2022 Redist
│ └─ 系統 DLL 地址衝突 → 重啟系統/排查注入軟體
│
└─ 硬體/資源 (極少)
├─ 磁盤空間耗盡 → 清理空間
└─ 記憶體不足 (buffer_pool 過大) → 調小 innodb_buffer_pool_size
C:\> net stop MySQL80
MySQL80 服務正在停止.
系統出錯。
系統發生 1067 錯誤。
進程意外終止。
MySQL80 服務已成功停止.
# 現象:服務實際已停,但報錯碼非 0
# 根因:InnoDB 關閉階段超過服務控制管理器 (SCM) 等待超時 (預設 30s/120s)
# 解決:使用 mysqladmin 正常關閉 (無超時限制)
mysqladmin -uroot -p shutdown
# 或調整註冊表
# HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WaitToKillServiceTimeout = 120000 (毫秒)
# 確保 SYSTEM 和 Administrators 擁有完全控制權
icacls "C:\ProgramData\MySQL\MySQL Server 8.0\Data" /grant "SYSTEM:(OI)(CI)F" /grant "Administrators:(OI)(CI)F" /T
# 移除繼承權限 (若遷移導致權限混亂)
icacls "C:\ProgramData\MySQL\MySQL Server 8.0\Data" /inheritance:r
icacls "C:\ProgramData\MySQL\MySQL Server 8.0\Data" /grant "SYSTEM:(OI)(CI)F" /grant "Administrators:(OI)(CI)F" /T
遵循以上鐵律,Windows 下 MySQL 服務可實現「安裝即用、升級無憂、故障可查、遷移順暢」的生產級穩定性,徹底擺脫「神秘 1067 錯誤」的困擾。