我尝试在 MariaDB 10.11.5 中恢复旧的数据库原始备份(整个 datadir),但它没有启动。之后我在日志中发现以下几行:
[ERROR] InnoDB: File ./ib_logfile0 was not found
[ERROR] InnoDB: Plugin initialization aborted with error Generic error
[Note] InnoDB: Starting shutdown...
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[Note] Plugin 'FEEDBACK' is disabled.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting
十多年来,我一直在删除 MySQL 和 MariaDB 服务器上的日志文件以进行调整innodb-log-file-size
或进行原始备份并节省空间。下次服务器重新启动时,它们会自动重新创建。但突然间,这次不是了。ib_logfile0
这一切都是因为从 MariaDB 10.8.1 版本开始,由于多次更改 ( MDEV-27199 ) 和 ( MDEV-14425 ),a 的存在变得强制。它不再是自动创建的,而是严格要求的。
我尝试创建一个空日志文件,但这显然不起作用并导致错误:
[ERROR] InnoDB: ib_logfile0 is empty, and LSN is unknown.
[ERROR] InnoDB: Plugin initialization aborted with error Data structure corruption
在研究了 jira 上的任务之后,我强烈的感觉到没有办法像以前那样“重新生成”日志文件。所以,我的主要问题是:除了在旧的 MariaDB 版本上恢复备份并为新版本正确备份它们之外,还有其他方法吗?
那么在新版本上创建此类“原始”备份又如何呢?我读到,您现在必须减小日志的大小以节省磁盘空间,而不是删除日志。或许,现在这是唯一的办法了吧?
PS 值得注意的是,从版本 10.8.1 开始,当您在配置中更改日志文件大小时,日志文件大小会自动更改。从版本 10.9.0 开始 - 即使在运行时 ( MDEV-27812 )。
太长了;您可能因删除而丢失了数据
ib_logofile*
。如果它们没有出现在所使用版本的官方文档中,请不要删除它们,并严格遵循。文件存在的原因
ib_logfile*
并不是因为 MariaDB 想要浪费您的空间,而是因为它们需要保存您的数据。这就是为什么从 开始ib_logfile0
是强制性的,以捕获执行危险行为的用户。如果没有此重做日志,写入但未刷新的数据将丢失,并且您的备份可能因此丢失最近更改的数据。刷新
mariadb-backup --prepare
(也是必需的)是为了确保数据可以恢复(不确定这是否可以用于原始副本,但这需要您删除的文件)。您现在可能在没有数据的情况下启动的选项是:
podman run -v /place/of/datadir:/var/lib/mysql:Z mariadb:10.7
)。根据您的备份来自哪个 MariaDB 版本,可以使用此数据启动的早期 MariaDB 版本存在限制。请参阅知识库页面中有关降级的注释。