问题描述
今天我重新安装了ubuntu 12.04并开始设置我的本地开发环境。我安装了mysql并编辑了/etc/mysql/my.cnf
来优化InnoDB但是当我尝试重新启动mysql时,它失败并出现错误:
[20:53][tom@Pochama:/var/www/website] (master) $ sudo service mysql restart
start: Job failed to start
syslog显示init脚本存在问题:
> tail -f /var/log/syslog
Apr 28 21:17:46 Pochama kernel: [11840.884524] type=1400 audit(1335644266.033:184): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=760 comm="apparmor_parser"
Apr 28 21:17:47 Pochama kernel: [11842.603773] init: mysql main process (764) terminated with status 7
Apr 28 21:17:47 Pochama kernel: [11842.603841] init: mysql main process ended, respawning
Apr 28 21:17:48 Pochama kernel: [11842.932462] init: mysql post-start process (765) terminated with status 1
Apr 28 21:17:48 Pochama kernel: [11842.950393] type=1400 audit(1335644268.101:185): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=811 comm="apparmor_parser"
Apr 28 21:17:49 Pochama kernel: [11844.656598] init: mysql main process (815) terminated with status 7
Apr 28 21:17:49 Pochama kernel: [11844.656665] init: mysql main process ended, respawning
Apr 28 21:17:50 Pochama kernel: [11845.004435] init: mysql post-start process (816) terminated with status 1
Apr 28 21:17:50 Pochama kernel: [11845.021777] type=1400 audit(1335644270.173:186): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=865 comm="apparmor_parser"
Apr 28 21:17:51 Pochama kernel: [11846.721982] init: mysql main process (871) terminated with status 7
Apr 28 21:17:51 Pochama kernel: [11846.722001] init: mysql respawning too fast, stopped
有任何想法吗?
我尝试过的事情:
我用Google搜索并发现apparmor(https://bugs.launchpad.net/ubuntu/+source/mysql-5.5/+bug/970366)的Ubuntu错误,我将apparmor从强制模式更改为抱怨模式:
sudo apt-get install apparmor-utils
sudo aa-complain /usr/sbin/mysqld
sudo /etc/init.d/apparmor reload
但它没有帮助。我还是无法启动mysql。
我还认为问题可能是因为InnoDB日志文件的大小与mysql所期望的大小不同。我在重新启动之前删除了innodb日志文件:sudo mv /var/lib/mysql/ib_logfile* /tmp
。虽然没有运气。
解决方法:我是re-installed 12.04,请确保不要以任何方式触碰/etc/mysql/my.cnf
。 Mysql正在工作,所以我可以继续我需要做的事情。但是我需要在某个时候编辑它 – 希望我已经找到了解决方案,或者这个问题已经得到了回答……
最佳解决思路
我终于找到了问题。基本上,某些参数的定义已从先前版本的mysql中删除,并已被替换为不同的名称。要修复,请在/etc/mysql/my.cnf中替换:
# Tom Added to ensure the server character set is set to utf8
default-character-set = utf8
default-collation = utf8_general_ci
有:
# Tom Added to ensure the server character set is set to utf8
character_set_server = utf8
collation_server = utf8_general_ci
这是关联的启动板错误报告:https://bugs.launchpad.net/ubuntu/+source/mysql-5.5/+bug/958120。
或轻松运行:
# Miraz added dpkg-reconfigure
dpkg-reconfigure mysql-server-5.5
但请确保没有安装旧的mysql版本安装,如果有,请删除:
# Miraz quick mysql package check
dpkg -l *mysql*
次佳解决思路
Innodb有一个默认设置(innodb_buffer_pool_size)设置为128M – 这可能对您的服务器来说太大了(特别是如果您使用的是小型Amazon EC2 AMI – 我是这样的)对我有用的修复是添加以下内容线路到/etc/mysql/my.cnf
innodb_buffer_pool_size = 16M
我在这里写了关于这个修复的文章http://www.mlynn.org/2012/07/mysql-5-5-on-ubuntu-12-04-job-failed-to-start
第三种解决思路
我遇到了类似的问题。这令人沮丧,因为我看不到任何错误日志,表明问题是什么。
就我而言,我为innodb_buffer_pool_size设置的值对于服务器的内存来说太大了。
我通过直接运行mysqld作为mysql用户发现了这一点。
# su mysql
# mysqld
这样您实际上可以看到错误输出。
第四种思路
我也有类似的问题。下面的项目说它们已从mysql服务器5.5中删除。如果您在my.cnf
中有它们,它将无法启动。用#
评论它们。 (信息来自:http://dev.mysql.com/doc/refman/5.5/en/replication-options-slave.html)
受影响的选项显示在此列表中:
--master-host
--master-user
--master-password
--master-port
--master-connect-retry
--master-ssl
--master-ssl-ca
--master-ssl-capath
--master-ssl-cert
--master-ssl-cipher
--master-ssl-key
第五种思路
它似乎归结为位于/etc/mysql/my.cnf
中的MySQL配置和/etc/mysql/conf.d/
中的文件中的错误。
在我的情况下,这是一个错误的bind-address
值,因为我的机器的IP地址已经改变,MySQL无法再绑定。欢迎在this blog article中了解更多信息。
第六种思路
调试post-start进程(/etc/init/mysql.conf
)中的故障的一种好方法是检查upstart日志:
sudo tail -f /var/log/upstart/mysql.log
这给了我一个套接字错误:
error: ‘Can’t connect to local MySQL server through socket
在我的情况下,它是由my.cnf
中[mysqld]
组下缺少user
设置引起的