Skip to content

MySQL 无法启动排查

MySQL 服务无法启动,查看错误日志发现 InnoDB 初始化失败。

2026-03-16T01:36:58.528294Z 0 [System] [MY-010116] [Server] C:\Codes\Tools\MySQL\MySQL Server 8.0\bin\mysqld.exe (mysqld 8.0.43) starting as process 3864
2026-03-16T01:36:58.538277Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2026-03-16T01:37:00.346151Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2026-03-16T01:37:00.689430Z 1 [ERROR] [MY-013183] [InnoDB] Assertion failure: fut0lst.ic:82:addr.page == FIL_NULL || addr.boffset >= FIL_PAGE_DATA thread 4468
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com .
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html about forcing recovery.
2026-03-16T01:37:00Z UTC - mysqld got exception 0x16 ;
Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware.

InnoDB 表空间文件损坏,导致数据库无法正常初始化。

在操作前,先备份整个 MySQL 数据目录:

Terminal window
# Windows
xcopy "C:\ProgramData\MySQL\MySQL Server 8.0\Data" "C:\ProgramData\MySQL\MySQL Server 8.0\Data_backup" /E /I /H /Y
# Linux/Mac
cp -r /var/lib/mysql /var/lib/mysql_backup

打开 MySQL 配置文件,找到数据目录配置:

Windows

my.ini
[mysqld]
datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data

Linux/Mac

# my.cnf
[mysqld]
datadir=/var/lib/mysql

如果数据重要,先尝试强制恢复模式:

my.ini 中添加:

[mysqld]
innodb_force_recovery = 1

启动 MySQL 后,立即导出数据,然后移除该配置。

如果强制恢复失败,重新初始化数据目录:

Windows

Terminal window
# 停止 MySQL 服务
net stop MySQL80
# 备份数据目录(已备份则跳过)
ren "C:\ProgramData\MySQL\MySQL Server 8.0\Data" Data_old
# 重新初始化
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
mysqld --initialize-insecure --console

Linux/Mac

Terminal window
# 停止 MySQL 服务
sudo systemctl stop mysql
# 备份数据目录(已备份则跳过)
sudo mv /var/lib/mysql /var/lib/mysql_old
# 重新初始化
sudo mysqld --initialize-insecure --user=mysql
Terminal window
# Windows
net start MySQL80
# Linux/Mac
sudo systemctl start mysql

初始化成功后,从备份中恢复数据:

方式 1:通过 mysqldump 备份恢复

Terminal window
# 从旧数据目录中导出数据(如果能启动)
mysqldump -u root -p --all-databases > backup.sql
# 导入到新数据库
mysql -u root -p < backup.sql

方式 2:从表空间备份恢复

  • 如果有表结构备份,先创建表
  • 再导入数据
Terminal window
# 定时备份脚本
@echo off
set DATE=%date:~0,4%%date:~5,2%%date:~8,2%
mysqldump -u root -p --all-databases > "D:\backup\mysql_backup_%DATE%.sql"
[mysqld]
log-error=C:/ProgramData/MySQL/MySQL Server 8.0/Data/error.log

确保数据目录所在磁盘有足够空间。

异常关机是导致 InnoDB 损坏的常见原因。

  • 重新初始化会清空所有数据,请确保有备份
  • 如果数据非常重要,建议先咨询专业 DBA
  • 生产环境建议配置主从复制,提高可用性