首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Windows 7 MySQL 服務啟動失敗 1067 錯誤徹底排查指南

     編輯:MySQL 綜合教學

Windows 7 MySQL 服務啟動失敗 1067 錯誤徹底排查指南

Win7/10/11 上 MySQL 服務啟動報 Error 1067: The process terminated unexpectedly,核心原因通常是 my.ini 配置錯誤、資料目錄殘留、InnoDB 日誌檔案不匹配、權限不足、臨時目錄不可寫。本文提供分級排查清單與一鍵修復腳本。

分級排查步驟

Level 1:配置檔語法與引擎衝突

# 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/

Level 2:清理殘留表空間檔案 (最常見根因)

# 停止服務
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 會按當前配置初始化全新表空間。

Level 3:臨時目錄權限/空間不足

# 錯誤日誌關鍵行
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

Level 4:錯誤日誌精準定位

# 錯誤日誌位置 (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_* 路徑配置 |

Level 5:服務帳號與依賴

  • 服務登入身分:Local System 或專用 MySQL Service Account (需「作為服務登入」權限)。
  • 依賴服務:RpcSs (Remote Procedure Call) 必須運行。
  • 防毒軟體排除:資料目錄、tmpdir、mysqld.exe 加入白名單。

一鍵修復 PowerShell 腳本 (管理員執行)

# 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* 與配置不匹配、臨時目錄不可寫、權限問題引起。建立標準化排查清單與一鍵修復腳本,能將故障恢復時間從小時級壓縮至分鐘級。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved