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

Gar*_*ett 54 mysql ubuntu innodb

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

?$ sudo service mysql restart
stop: Unknown instance:
start: Job failed to start
Run Code Online (Sandbox Code Playgroud)

这显示在“/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
Run Code Online (Sandbox Code Playgroud)

我已经检查了所有 mysql 目录的权限以确保它拥有所有权,并且我还重命名了之前的 ib_logs 以便它可以重新制作它们。在查看了 2 个小时的谷歌结果后,我现在对这个问题一无所知。

小智 53

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

[ERROR] Unknown/unsupported storage engine: InnoDB
Run Code Online (Sandbox Code Playgroud)

我删除了这些文件:

rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile1 
Run Code Online (Sandbox Code Playgroud)

/var/lib/mysql

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

  • 据我所知,`rm` 命令用于删除文件而不是重命名它们...... (7认同)
  • 这些文件包含数据库的*实际数据*。您不想删除它们。 (4认同)
  • 不,`ibdata` 文件包含数据(除非你有 file-per-table)。ib_logfile 文件是重播日志,其中包含在/如果数据库崩溃时可能正在处理的数据库更改事务的数据。如果您能够成功关闭服务器,删除这些日志文件不会对您造成伤害。如果它崩溃了,那么你需要它们。但这是一个有效的答案。如果您的 my.cnf 文件更改了 innodb_log_file_size 选项并且它不再匹配这两个文件,您将收到 OP 指出的错误消息。删除/移动以便新的可以修复它。 (2认同)
  • 为什么只能在 5 分钟内进行编辑超出了我的能力......我应该说这是对上述错误的 * 潜在 * 修复。正如 OP 所说,这不是他需要的修复。 (2认同)
  • 这个解决方案也对我有用。没有数据损坏。 (2认同)
  • 您始终可以重命名它们,例如“mv ib_logfile0 ib_logfile0.bak && mv ib_logfile1 ib_logfile1.bak”。 (2认同)

小智 23

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

所以,试试这个:

$ sudo -u mysql mysqld --skip-innodb --default-storage-engine=myisam
Run Code Online (Sandbox Code Playgroud)

  • 如果您想要“skip_innodb”,请尝试在 _[mysqld]_ 部分的 /etc/mysql/my.cnf 中添加“default-storage-engine=myisam”。 (6认同)
  • 如果你想要 innodb 支持怎么办? (4认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

只是为了确保它会起作用。


小智 9

检查您的 mysql 错误日志。

tail -100 /var/log/mysql/error.log
Run Code Online (Sandbox Code Playgroud)

如果您的日志显示(就像我的那样):

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
Run Code Online (Sandbox Code Playgroud)

保存配置文件,启动mysql

sudo service mysql start
Run Code Online (Sandbox Code Playgroud)


joh*_*n64 -1

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

我还想知道你的包裹是否有问题。您可以尝试不同的次要版本吗?

另外,我假设你的mysql服务器也升级了?也许那个版本坏了?具体还没有最终确定。