未知/不受支持的存储引擎:InnoDB | MySQL Ubuntu


45

我最近从以前的LTS Ubuntu升级到了Precise,现在mysql拒绝启动。当我尝试启动它时,它抱怨以下内容:

╰$ sudo service mysql restart
stop: Unknown instance:
start: Job failed to start

这显示在“ /var/log/mysql/error.log”中:

120415 23:01:09 [Note] Plugin 'InnoDB' is disabled.
120415 23:01:09 [Note] Plugin 'FEDERATED' is disabled.
120415 23:01:09 [ERROR] Unknown/unsupported storage engine: InnoDB
120415 23:01:09 [ERROR] Aborting

120415 23:01:09 [Note] /usr/sbin/mysqld: Shutdown complete

我已经检查了所有mysql目录的权限,以确保它具有所有权,并且还重命名了上一个ib_logs,以便它可以重新制作它们。在查看了2个小时的Google搜索结果后,我现在对此问题一无所获。


顺便说一句,我确实通过注释my.cnf中的“ skip_innodb”条目来使mysql运行。但是我相当确定我不应该这样解决。
加勒特2012年

请显示my.cnf中所有属于innodb设置的变量
RolandoMySQLDBA 2012年

Answers:


34

检查日志后,我发现以下错误:

[ERROR] Unknown/unsupported storage engine: InnoDB

我删除了这些文件:

rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile1 

/var/lib/mysql

重新启动后,这解决了我的问题。


7
rm据我所知,该命令用于删除文件,而不是重命名...
Itai Ganot 2014年

2
这些文件包含数据库的实际数据。您不想删除它们。
Stefan Lasiewski 2014年

不,ibdata文件包含数据(除非您有每个表的文件)。ib_logfile文件是重播日志,其中包含当数据库崩溃时/数据库崩溃时可能正在处理的数据库更改事务的数据。如果您能够成功关闭服务器,则删除这些日志文件不会对您造成伤害。如果它崩溃了,那么您需要它们。但这是一个有效的答案。如果my.cnf文件更改了innodb_log_file_size选项,并且不再与这两个文件匹配,则将收到OP指出的错误消息。删除/移动以便可以进行新的修复。
萨法多2014年

2
为什么只能进行5分钟的编辑,这超出了我的范围...我应该说这可能是解决上述错误的方法。如《任择议定书》所述,这不是他需要的解决方案。
萨法多2014年

1
您可以随时重命名它们,例如mv ib_logfile0 ib_logfile0.bak && mv ib_logfile1 ib_logfile1.bak
kenorb '16

23

如果您确实需要skip-innodb(用例:低内存占用),那么您当然不必注释掉。但是,如果InnoDB是默认的存储引擎,则服务器将无法启动,直到您告诉它使用哪个存储引擎代替,例如default-storage-engine=myisamMyISAM。

因此,请尝试以下操作:

$ sudo -u mysql mysqld --skip-innodb --default-storage-engine=myisam

6
如果要具有“ skip_innodb”,请尝试在[mysqld]部分的“ /etc/mysql/my.cnf”中添加“ default-storage-engine = myisam ”。
2012年

做工精美。干杯!
Boann 2012年

4
如果您需要innodb支持怎么办?
Nilzor 2013年

1
Centos 7 default-storage-engine=myisam上的Mariadb添加到文件/etc/my.cnf下[mysqld]。做到了。Thx
Damodar Bashyal

12

如果您使用的是MySQL 5.6+,并且想禁用InnoDB,请不要忘记“ --default-tmp-storage ”,否则它将无法正常工作:

要禁用InnoDB,请使用--innodb = OFF或--skip-innodb。在这种情况下,因为默认存储引擎是InnoDB,否则服务器将无法启动,除非您还使用--default-storage-engine和--default-tmp-storage-engine将永久性和永久性默认设置为其他某个引擎临时表。

http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#option_mysqld_ignore-builtin-innodb

您可以将其添加到my.cnf中:

[mysqld] 
innodb=OFF 
ignore-builtin-innodb 
skip-innodb
default-storage-engine=myisam 
default-tmp-storage-engine=myisam

只是为了确保它会工作。


+1,切勿注意正式文件。它应该设置 default-storage-enginedefault-tmp-storage-engine,谢谢。
Giberno

7

检查您的mysql错误日志。

tail -100 /var/log/mysql/error.log

如果您的日志说(像我的一样):

InnoDB:初始化缓冲池,大小= 128.0M
InnoDB:mmap(137363456字节)失败;埃尔诺12
[错误] InnoDB:无法为缓冲池分配内存

您没有足够的内存来使用默认的缓冲区大小128M

编辑配置文件/etc/mysql/my.cnf,添加一行以指定较小的innodb_buffer_pool_size。

# make the buffer pool smaller than 128M since we only have 1 GB of total RAM
innodb_buffer_pool_size = 16M

保存配置文件,并启动mysql

sudo service mysql start

在这里现货。但是也可能是Web服务器的挂起进程或吞噬RAM的东西,也请检查一下。
sjas

0

再尝试2件。1.降低innodb缓冲池的大小。2.编辑mysql初始脚本并添加--innodb选项。

我也想知道您的包裹是否有故障。您可以尝试其他次要版本吗?

另外,我假设您的mysql服务器也已升级?也许那个版本坏了?精确度还不是最终的。


已经这样做了,没有任何效果。
加勒特

抱歉,对其进行了编辑,并做了一些尝试,更像是一个不好的软件包。尝试使用通常更稳定的mysql.com版本或percona。
johnshen64'4

另外,在安装新软件包时,请确保旧软件包已完全清除。
johnshen64 '04

清除软件包会完全导致数据库信息丢失吗?
加勒特

不应,但是为了安全起见,应始终备份DBS。
johnshen64 '04 -4-16

0

删除用于的位置时出现此错误tmpdir。如果您最近更改了tmpdir,则可能要检查它是否是有效的可写位置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.