记录一次MySQ无法启动的修复过程。
1. 错误表现
今天在用python操作数据库时可能有些错误(具体来说就是我尝试创建了一个已经存在的database),结果我发现MySQL中的那个database不存在了,我重启了一下电脑,结果mysql 的服务就无法启动了.
在windows服务中手动启动时弹出如下信息:
通过命令启动弹出如下信息:
总之就是无法启动,在界面上也找到信息。
2. 恢复的过程:
在文心一言的帮助下,首先找到了MySQ的安装路径,
C:\Program Files\MySQL\MySQLServer 8.0,理论上在该路径下应该包含my.ini文件,但是我的电脑里找不到这个文件。
于是又在C:\ProgramData\MySQL\MySQLServer 8.0目录下找到 my.ini文件,并且在C:\ProgramData\MySQL\MySQLServer 8.0\Data目录下看到一个刚刚被更新的文件DESKTOP-M312427.err,这个应该是启动的错误日志,赶紧将该文件中的一段内
2024-06-16T15:35:33.942703Z 0 [System] [MY-010910] [Server] C:\Program Files\MySQL\MySQLServer 8.0\bin\mysqld.exe: Shutdown complete (mysqld 8.0.34) MySQL Community Server - GPL.
2024-06-16T15:55:55.549050Z 0 [System] [MY-010116] [Server] C:\Program Files\MySQL\MySQLServer 8.0\bin\mysqld.exe (mysqld 8.0.34) starting as process 22936
2024-06-16T15:55:55.561650Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-06-16T15:55:55.655621Z 1 [ERROR] [MY-013881] [InnoDB] The redo log file .\#innodb_redo\#ib_redo13826 has start_lsn 45171937280 but expected 45276729344 (end_lsn of the previous redo log file).
2024-06-16T15:55:55.656230Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
2024-06-16T15:55:55.660490Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2024-06-16T15:55:55.661247Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2024-06-16T15:55:55.661584Z 0 [ERROR] [MY-010119] [Server] Aborting
2024-06-16T15:55:55.662117Z 0 [System] [MY-010910] [Server] C:\Program Files\MySQL\MySQLServer 8.0\bin\mysqld.exe: Shutdown complete (mysqld 8.0.34) MySQL Community Server - GPL.
拷贝到文心一言进行查询,查询显示由于 InnoDB 重做日志文件(redo log files)的 LSN(Log Sequence Number)不一致而失败了。这通常意味着数据库在之前的关闭过程中可能没有正常关闭,或者数据文件已经损坏。
之后按照文心一言给出的方法进行操作重新启动了MySQL。
3. 修复方法:
3.1. 备份现有的数据 C:\ProgramData\MySQL\MySQLServer 8.0,其中包含了错误日志和数据库的数据
3.2. 修改C:\ProgramData\MySQL\MySQLServer 8.0\my.ini文件,在 [mysqld]
部分下添加或修改以下行:
[mysqld]
innodb_force_recovery = 6
3.3. 用net start MySQL80重新启动数据库。
虽然数据库已经启动了,但是MySQL中的数据可能有些已经损坏错误了。在使用时需要特别注意。