首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL InnoDB问题- InnoDB注册失败

MySQL InnoDB问题- InnoDB注册失败
EN

Stack Overflow用户
提问于 2016-08-23 00:18:25
回答 2查看 10.5K关注 0票数 1

最近,我试图将MySQL 5.1服务器升级到5.7。当服务器无法启动时,我发现您必须先导出数据,否则需要进行大量的升级(二进制文件不再可用),所以我回滚到5.1进行导出。

问题是,回到5.1,InnoDB将不再注册。在错误日志中,我得到:

代码语言:javascript
复制
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
160822 17:05:12 [ERROR] Plugin 'InnoDB' init function returned error.
160822 17:05:12 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

作为一种解决办法,我在my.cnf中设置了my.cnf。再次重新启动,并:

代码语言:javascript
复制
InnoDB: No valid checkpoint found.
InnoDB: If this error appears when you are creating an InnoDB database,
InnoDB: the problem may be that during an earlier attempt you managed
InnoDB: to create the InnoDB data files, but log file creation failed.
InnoDB: If that is the case, please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/error-creating-innodb.html

阅读它所暗示的与delete all files created by InnoDB: all ibdata files and all ib_logfile files的链接。我有一个120 GB的ibdata文件,我肯定不打算删除它,所以这是不可能的。不过,我确实尝试过重命名日志文件,但是服务器仍然没有出现。

这里有什么指示吗?

编辑:我也尝试重命名iblog文件。这将导致mysql建议设置innodb_force_recovery=6的另一个错误。这样做会导致以下错误:

代码语言:javascript
复制
160823 12:17:32  InnoDB: Page checksum 271832187, prior-to-4.0.14-form checksum 315921779
InnoDB: stored checksum 401867329, prior-to-4.0.14-form stored checksum 401867329
InnoDB: Page lsn 96 3891045697, low 4 bytes of lsn at page end 3891045697
InnoDB: Page number (if stored to page already) 966706,
InnoDB: space id (if created with >= MySQL-4.1.1 and stored already) 0
InnoDB: Page may be a system page
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 966706.
InnoDB: You may have to recover from a backup.
InnoDB: It is also possible that your operating
InnoDB: system has corrupted its own file cache
InnoDB: and rebooting your computer removes the
InnoDB: error.
InnoDB: If the corrupt page is an index page
InnoDB: you can also try to fix the corruption
InnoDB: by dumping, dropping, and reimporting
InnoDB: the corrupt table. You can use CHECK
InnoDB: TABLE to scan your table for corruption.
InnoDB: See also http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 966707.
InnoDB: You may have to recover from a backup.
160823 12:17:32  InnoDB: Page dump in ascii and hex (16384 bytes):
EN

回答 2

Stack Overflow用户

发布于 2017-04-06 06:59:50

我刚才遇到了类似的问题。我在同一台服务器上运行MySQL 5.1和5.7。

使用MySQL 5.1时,默认的innodb_log_file_size是5m。

代码语言:javascript
复制
mysql> show variables like 'innodb_log_file_size';

    +----------------------+---------+
    | Variable_name        | Value   |
    +----------------------+---------+
    | innodb_log_file_size | 5242880 |
    +----------------------+---------+
    1 row in set (0.00 sec)

当MySQL 5.7时,默认的innodb_log_file_size是48m。

代码语言:javascript
复制
mysql> show variables like 'innodb_log_file_size';
+----------------------+----------+
| Variable_name        | Value    |
+----------------------+----------+
| innodb_log_file_size | 50331648 |
+----------------------+----------+
1 row in set (0.01 sec)

当将MySQL 5.1服务器升级到5.7,然后降级到5.1时,ib_logfile0/1文件就会发生神奇的变化。无法识别日志文件的检查点。因此,innodb无法使用日志文件执行正常恢复。我没有做深入的研究,所以我不能给出详细的解释。

溶液

备份数据文件并重新启动MySQL

代码语言:javascript
复制
mv ibdata1 ibdata1.bak
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
service mysqld restart

修改my.cnf文件,添加以下行

代码语言:javascript
复制
innodb_force_recovery=6

恢复数据文件并重新启动

代码语言:javascript
复制
mv ibdata1.bak ibdata1

service mysqld restart

现在,您将看到MySQL成功启动。Ibdata1可能不能正常工作。您可以使用mysqldump备份应用程序数据。然后删除my.cnf文件中的恢复行。同时删除ibdata和logfile。重新启动MySQL并导入备份。

有点复杂,但这些对我有帮助。

故障

当重做日志文件被重新创建时,不能重做一小块日志。

票数 4
EN

Stack Overflow用户

发布于 2016-08-23 02:50:30

不要删除ibdata*。所有的数据都在那里!

到现在为止,日志文件应该无关紧要。因此,有几种方法可以处理“错误”。

把旧的my.cnf拿回来。如果这是不实际的,至少要设定

代码语言:javascript
复制
innodb_log_file_size = 50331648 

(对日志文件的更改有点棘手。显然,5.7将其增加到48 to的新默认值,没有问题。但是,5.1没有动态更改文件大小的代码。)

另一种方法是删除(或移开) iblog*文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39090510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档