Win7/10/11 上 MySQL 服務啟動報 Error 1067: The process terminated unexpectedly,核心原因通常是 my.ini 配置錯誤、資料目錄殘留、InnoDB 日誌檔案不匹配、權限不足、臨時目錄不可寫。本文提供分級排查清單與一鍵修復腳本。
# 1. 找到 my.ini (典型路徑)
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
# 2. 檢查 default-storage-engine
# 若設為 INNODB 但資料目錄殘留 MyISAM 表空間,或相反,會衝突
# 建議註解掉或統一為 InnoDB
# default-storage-engine=INNODB
# 3. 檢查 innodb_* 路徑是否存在且可寫
innodb_data_home_dir = C:/ProgramData/MySQL/MySQL Server 8.0/Data/
innodb_log_group_home_dir = C:/ProgramData/MySQL/MySQL Server 8.0/Data/
# 停止服務
net stop mysql
# 進入資料目錄
cd /d "C:\ProgramData\MySQL\MySQL Server 8.0\Data"
# 刪除 InnoDB 系統表空間與日誌 (會重新建立)
del ibdata1
del ib_logfile0
del ib_logfile1
del ibtmp1
# 重啟服務
net start mysql
原理:舊 ibdata1 含有舊表定義,新配置 (如頁面大小、壓縮、加密) 不兼容導致啟動崩潰。刪除後 InnoDB 會按當前配置初始化全新表空間。
# 錯誤日誌關鍵行
InnoDB: Error: unable to create temporary file; errno: 2
# 修復:指定可寫、大空間臨時目錄
# my.ini [mysqld] 區段新增
tmpdir = D:\MySQLTemp
# 確保目錄存在且 NETWORK SERVICE / MYSQL 服務帳號有寫入權限
mkdir D:\MySQLTemp
icacls D:\MySQLTemp /grant "NETWORK SERVICE:(OI)(CI)F" /T
# 錯誤日誌位置 (my.ini 指定或預設)
C:\ProgramData\MySQL\MySQL Server 8.0\Data\.err
# 關鍵字搜尋
findstr /i "error abort fatal" *.err
# 常見致命錯誤對照
| 錯誤訊息 | 根因 | 解決 |
|---|---|---|
| Unknown/unsupported storage engine: INNODB | InnoDB 初始化失敗 | Level 2 清理 ibdata1/ib_logfile* |
| Can't create test file | 資料目錄權限/路徑錯誤 | 檢查 datadir、服務帳號權限 |
| InnoDB: Page checksum mismatch | 頁面校驗失敗 (磁碟壞軌/記憶體錯誤) | 從備份還原、檢查硬體 |
| Plugin 'InnoDB' registration as a STORAGE ENGINE failed | InnoDB 初始化失敗 | Level 2 + 檢查 innodb_* 路徑配置 |
RpcSs (Remote Procedure Call) 必須運行。tmpdir、mysqld.exe 加入白名單。# Fix-MySQL1067.ps1
$datadir = "C:\ProgramData\MySQL\MySQL Server 8.0\Data"
$tmpdir = "D:\MySQLTemp"
Write-Host "Stopping MySQL..." -ForegroundColor Yellow
net stop mysql 2>$null
Write-Host "Cleaning InnoDB system files..." -ForegroundColor Cyan
Remove-Item "$datadir\ibdata1", "$datadir\ib_logfile*", "$datadir\ibtmp1" -Force -ErrorAction SilentlyContinue
Write-Host "Creating tmpdir..." -ForegroundColor Cyan
New-Item -ItemType Directory -Force -Path $tmpdir | Out-Null
icacls $tmpdir /grant "NETWORK SERVICE:(OI)(CI)F" /T | Out-Null
Write-Host "Updating my.ini tmpdir..." -ForegroundColor Cyan
$myini = "C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"
$content = Get-Content $myini -Raw
if ($content -notmatch 'tmpdir\s*=') {
$content = $content -replace '\[mysqld\]', "[mysqld]\ntmpdir = $tmpdir"
Set-Content $myini $content -Encoding UTF8
}
Write-Host "Starting MySQL..." -ForegroundColor Green
net start mysql
Write-Host "Done. Check status: net start mysql" -ForegroundColor Green
結語:Error 1067 90% 由 ibdata1/ib_logfile* 與配置不匹配、臨時目錄不可寫、權限問題引起。建立標準化排查清單與一鍵修復腳本,能將故障恢復時間從小時級壓縮至分鐘級。