database InnoDB:错误:空间标题页由数据文件 ./ibdata1 中的零字节组成

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26576745/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 07:49:40  来源:igfitidea点击:

InnoDB: Error: space header page consists of zero bytes in data file ./ibdata1

databasewordpresscentosmariadbcentos7

提问by Peter

I had a perfectly fine wordpress setup, but today the server suddenly stopped loading my site. I logged in and restarted my centos 7 VPS. After the reboot it did not started the MariaDB. Here is what I found in my log:

我有一个完美的 wordpress 设置,但今天服务器突然停止加载我的网站。我登录并重新启动了我的 centos 7 VPS。重新启动后,它没有启动 MariaDB。这是我在日志中发现的内容:

141026 18:13:50 [Note] /usr/libexec/mysqld: Shutdown complete

141026 18:13:50 mysqld_safe mysqld from pid file /var/run/mariadb/mariadb.pid ended
141026 18:14:58 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
141026 18:14:58 InnoDB: The InnoDB memory heap is disabled
141026 18:14:58 InnoDB: Mutexes and rw_locks use GCC atomic builtins
141026 18:14:58 InnoDB: Compressed tables use zlib 1.2.7
141026 18:14:58 InnoDB: Using Linux native AIO
141026 18:14:58 InnoDB: Initializing buffer pool, size = 128.0M
141026 18:14:58 InnoDB: Completed initialization of buffer pool
InnoDB: Error: space header page consists of zero bytes in data file ./ibdata1
141026 18:14:58 InnoDB: Could not open or create data files.
141026 18:14:58 InnoDB: If you tried to add new data files, and it failed here,
141026 18:14:58 InnoDB: you should now edit innodb_data_file_path in my.cnf back
141026 18:14:58 InnoDB: to what it was, and remove the new ibdata files InnoDB created
141026 18:14:58 InnoDB: in this failed attempt. InnoDB only wrote those files full of
141026 18:14:58 InnoDB: zeros, but did not yet use them in any way. But be careful: do not
141026 18:14:58 InnoDB: remove old data files which contain your precious data!
141026 18:14:58 [ERROR] Plugin 'InnoDB' init function returned error.
141026 18:14:58 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
141026 18:14:58 [Note] Plugin 'FEEDBACK' is disabled.
141026 18:14:58 [ERROR] Unknown/unsupported storage engine: InnoDB
141026 18:14:58 [ERROR] Aborting

Can someone help me investigate what could be the problem? Is there a possibility now to backup my database without being able to start MariaDB?

有人可以帮我调查可能是什么问题吗?现在是否有可能在无法启动 MariaDB 的情况下备份我的数据库?

回答by doublesharp

Edit: copied my-innodb-heavy-4G.cnfto /etc/my.cnf.dand the server started fine. Probably caused by changing the binlog size.

编辑:复制my-innodb-heavy-4G.cnf/etc/my.cnf.d服务器启动正常。可能是由于更改了 binlog 大小引起的。



It sounds like you changed the size of your InnoDB buffer, or it became corrupted. Possible that these changes were made some time ago and just took effect when you rebooted.

听起来您更改了 InnoDB 缓冲区的大小,或者它已损坏。可能这些更改是在一段时间前进行的,并且在您重新启动时才生效。

Definitely make a backup of your data in /var/lib/mysqlfirst - preferably the entire directory.

首先一定要备份您的数据/var/lib/mysql- 最好是整个目录。

cp -R /var/lib/mysql /var/lib/mysql-backup

cp -R /var/lib/mysql /var/lib/mysql-backup

With your data backed up, the best first step is to revert any changes that you made to the /etc/my.cnffile and restart.

备份数据后,最好的第一步是还原对/etc/my.cnf文件所做的任何更改并重新启动。

If that doesn't do it, or you don't know what the size of your buffer used to be, the next possible option is to delete the InnoDB binlog files and let MariaDB/MySQL recreate them. The files are named /var/lib/mysql/ib_logfile{N}where {N}is a number.

如果没有这样做,或者您不知道以前的缓冲区大小,则下一个可能的选择是删除 InnoDB 二进制日志文件并让 MariaDB/MySQL 重新创建它们。这些文件被命名为/var/lib/mysql/ib_logfile{N}where{N}是一个数字。

rm -rf /var/lib/mysql/ib_logfile*

rm -rf /var/lib/mysql/ib_logfile*

If that doesn't solve the problem try adding the following to your /etc/my.cnf(or whichever config file you use, backup first of course). It should go in the [innodb]section.

如果这不能解决问题,请尝试将以下内容添加到您的/etc/my.cnf(或您使用的任何配置文件,当然要先备份)。它应该放在该[innodb]部分。

innodb_buffer_pool_size        = 256M
innodb_log_file_size           = 256M
innodb_thread_concurrency      = 16
innodb_flush_log_at_trx_commit = 2
innodb_flush_method            = normal

The trick is knowing what MariaDB is expecting. If you don't have success with the above try just the last lineand set [innodb_flush_method].

诀窍是知道 MariaDB 期待什么。如果以上操作没有成功,请尝试最后一行并设置[innodb_flush_method].

回答by robinwen

If you encountered this problem when you installed MySQL initially, just remove ibdataand ib_logfile*files in your MySQL data directory, and then start MySQL again.

如果您在最初安装 MySQL 时遇到此问题,只需删除MySQL 数据目录中的ibdataib_logfile*文件,然后再次启动 MySQL。

Good Luck!

祝你好运!