问题描述
我最近从以前的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,以便它可以重新制作它们。在查看Google搜索结果2小时后,我现在暂时无法解决此问题。
最佳思路
检查日志后,我发现以下错误:
[ERROR] Unknown/unsupported storage engine: InnoDB
我删除了这些文件:
rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile1
在/var/lib/mysql
重新启动后,这解决了我的问题。
次佳思路
如果您确实需要skip-innodb
(用例:低内存占用),那么您当然不必注释掉。但是,如果InnoDB是默认的存储引擎,则服务器将无法启动,直到您告诉它要使用哪个存储引擎为止,例如适用于MyISAM的default-storage-engine=myisam
。
因此,请尝试以下操作:
$ sudo -u mysql mysqld --skip-innodb --default-storage-engine=myisam
第三种思路
如果您使用的是MySQL 5.6+,并且想禁用InnoDB,请不要忘记”–default-tmp-storage”,否则它将无法正常工作:
To disable InnoDB, use –innodb=OFF or –skip-innodb. In this case, because the default storage engine is InnoDB, the server will not start unless you also use –default-storage-engine and –default-tmp-storage-engine to set the default to some other engine for both permanent and TEMPORARY tables.
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
只是为了确保它能正常工作。
第四种思路
检查您的mysql错误日志。
tail -100 /var/log/mysql/error.log
如果您的日志说(像我的一样):
InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed; errno 12 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
您没有足够的内存来使用默认的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