为同一表空间 ID 找到多个文件

为同一表空间 ID 找到多个文件

由于管理疏忽,mysql 服务器的硬盘利用率达到 100%。惊慌之下,我关闭了大部分服务 - 包括 mysqld,我猜是它导致了这个问题。随后,我删除了文件以腾出空间。当可用空间超过 1GB 时,我尝试启动 mysqld,但它就是无法启动。日志中显示的错误如下:

[ERROR] [MY-012209] [InnoDB] Multiple files found for the same tablespace ID:
[ERROR] [MY-012202] [InnoDB] Tablespace ID: 23 = ['archive/transaction_archive_1.ibd', 'log/transaction_15.ibd']
[ERROR] [MY-012202] [InnoDB] Tablespace ID: 123 =
['archive/order_archive_1.ibd', 'log/cart_15.ibd']
[ERROR] [MY-012202] [InnoDB] Tablespace ID: 406 = ['archive/pay_archive_8.ibd', 'log/cart_20.ibd']
[ERROR] [MY-012202] [InnoDB] Tablespace ID: 419 = ['archive/pay_archive_9.ibd', 'log/cart_64.ibd']
[ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Failed, retry may succeed.
[ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
[ERROR] [MY-010119] [Server] Aborting
[System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.13)  MySQL Community Server - GPL.

“archive”和“log”是两个独立的数据库。将“innodb_force_recovery”从 1 设置为 6 没有帮助。关于如何恢复此问题,有什么建议吗?服务器在 Linux 上运行,MySQL 是 v8.0.13。谢谢。

答案1

我最终设法启动了 mysql 服务器,但我不能确定这是最好的方法。

首先,我认为“日志”数据库表比“存档”表更重要。我将四个受影响的文件(archive/transaction_archive_1.ibd、archive/order_archive_1.ibd、archive/pay_archive_8.ibd、archive/pay_archive_9.ibd)移动到一个临时位置。当我启动 mysqld 时,需要等待很长时间(我认为它正在执行撤消和其他操作),并且有人抱怨缺少 ibd 文件 - 这是意料之中的。但服务器还是启动了。

然后,我备份了“日志”数据库的四个受影响的表。受影响的“存档”表在那里,但无法从中查询任何数据(“表空间丢失”错误)。接下来,我关闭了 mysql 并交换了 ibd 文件 - 将“存档”ibd 文件移回并删除了“日志”ibd 文件。mysqld 再次启动并抱怨缺少 ibd 文件。这次,我转到 mysql 控制台并删除了四个受影响的“日志”表。然后我从刚才的备份中恢复了这四个表。

无法 100% 确定没有数据丢失。

相关内容