我有一个问题,在Ubuntu 11.04上每隔30分钟重新启动MySQL 5.1.54。 发生这种情况时,MySQL日志中将出现以下内容:
111030 12:01:52 [Note] /usr/sbin/mysqld: Normal shutdown 111030 12:01:52 [Note] Event Scheduler: Purging the queue. 0 events 111030 12:01:52 InnoDB: Starting shutdown... 111030 12:01:54 InnoDB: Shutdown completed; log sequence number 0 875122 111030 12:01:54 [Note] /usr/sbin/mysqld: Shutdown complete 111030 12:01:55 [Note] Plugin 'FEDERATED' is disabled. 111030 12:01:55 InnoDB: Initializing buffer pool, size = 256.0M 111030 12:01:55 InnoDB: Completed initialization of buffer pool 111030 12:01:55 InnoDB: Started; log sequence number 0 875122 111030 12:01:55 [Note] Event Scheduler: Loaded 0 events 111030 12:01:55 [Note] /usr/sbin/mysqld: ready for connections. Version: '5.1.54-1ubuntu4-log' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Ubuntu)
这就像每30分钟发条一样,所以显然有些服务正在重启。
我已经检查过系统中每个用户(包括系统用户)的crontab,并且没有一个用户有crontab设置,如下面的输出所示:
# awk -F: '{print $1}' /etc/passwd | xargs -n 1 -i crontab -u {} -l no crontab for root no crontab for daemon no crontab for bin no crontab for sys no crontab for sync no crontab for games no crontab for man no crontab for lp no crontab for mail no crontab for news no crontab for uucp no crontab for proxy no crontab for www-data no crontab for backup no crontab for list no crontab for irc no crontab for gnats no crontab for nobody no crontab for libuuid no crontab for syslog no crontab for sshd no crontab for landscape no crontab for ubuntu no crontab for statd no crontab for myproxy no crontab for condor no crontab for messagebus no crontab for avahi no crontab for joe no crontab for smmta no crontab for smmsp no crontab for postfix no crontab for deploy no crontab for mysql no crontab for redis
每次重新启动时,我的dmesg都包含以下内容。 我不是一个apparmor专家,但我相信这是每次MySQL服务启动时获得的正常消息:
[1165328.780405] type=1400 audit(1319976114.984:74): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=31985 comm="apparmor_parser"
另外,这里是/etc/init/mysql.conf中MySQL新贵configuration的内容:
# MySQL Service description "MySQL Server" author "Mario Limonciello <superm1@ubuntu.com>" start on (net-device-up and local-filesystems and runlevel [2345]) stop on runlevel [016] respawn env HOME=/etc/mysql umask 007 # The default of 5 seconds is too low for mysql which needs to flush buffers kill timeout 300 pre-start script #Sanity checks [ -r $HOME/my.cnf ] [ -d /var/run/mysqld ] || install -m 755 -o mysql -g root -d /var/run/mysqld /lib/init/apparmor-profile-load usr.sbin.mysqld LC_ALL=C BLOCKSIZE= df --portability /var/lib/mysql/. | tail -n 1 | awk '{ exit ($4<4096) }' end script exec /usr/sbin/mysqld post-start script for i in `seq 1 30` ; do /usr/bin/mysqladmin --defaults-file="${HOME}"/debian.cnf ping && { exec "${HOME}"/debian-start # should not reach this line exit 2 } sleep 1 done exit 1 end script
任何想法可能导致这个? 它不会引起任何问题,除了Monit警报,指出“PID改变了服务mysqld”(我有Monit监视mysqld – 但它报告mysqld进程没有错误,除了每30分钟它有它的事实自从MySQL重新启动后,PID发生了变化)。
提前致谢。
你使用厨师或木偶,这可能是做一些触发重启?
你可以检查(可能是张贴)你的mysql作业的定义在暴发户? (/etc/init/mysql.conf)。 OK =尝试删除“重生”。 它不像新贵文档中记载的那样工作。 一般来说,如果它被其他进程杀死,它就会被用来重新生成进程,但似乎并不像预期的那样工作。 你可以看到为什么apparmour总是加载 – 因为脚本中的预启动节。 由于新贵很新,而且还在不断发展,所以最好采用SysV的方式。
您应该尝试在没有AppArmor的情况下运行它:只需运行/usr/bin/mysqld_safe
或/usr/bin/mysqld
而不使用暴发户并等待30分钟。 如果mysql不自动重新启动,那么在/etc/init/mysql.conf文件中禁用AppArmor,或者以不同的方式进行配置。
如果问题仍然存在,请阅读mysql的日志。 如果日志未被默认启用,则可以在启动mysqld时使用选项--log-error=/tmp/mysql.log --log-warnings
。
似乎将/etc/init.d/mysql启动脚本转换为sysV风格,而不是作为一个暴发户脚本似乎纠正我的问题。
我有升级到Ubuntu 14.04相同的问题。 我发现这个问题,因为它提到了AppArmor日志消息,所以谢谢! 否则我可能没有意识到MySQL正在重启。
在调查/var/log/daemon.log
,我发现/etc/mysql/debian-start
的输出重复出现。 相关部分是这样的:
May 18 06:48:18 tom /etc/mysql/debian-start[15525]: Upgrading MySQL tables if necessary. May 18 06:48:18 tom /etc/mysql/debian-start[15528]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored May 18 06:48:18 tom /etc/mysql/debian-start[15528]: Looking for 'mysql' as: /usr/bin/mysql May 18 06:48:18 tom /etc/mysql/debian-start[15528]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck May 18 06:48:18 tom /etc/mysql/debian-start[15528]: Error: server version (5.5.35-1ubuntu1) does not match with the version of May 18 06:48:18 tom /etc/mysql/debian-start[15528]: the server (5.5.37) with which this program was built/distributed. You can May 18 06:48:18 tom /etc/mysql/debian-start[15528]: use --skip-version-check to skip this check. May 18 06:48:18 tom /etc/mysql/debian-start[15528]: FATAL ERROR: Upgrade failed
我通过/etc/mysql/debian-start
脚本读取,并尝试像在脚本中一样运行升级命令,希望能够对其进行调试(当时需要运行MySQL服务器):
/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf
然后,我发现这个工作没有任何抱怨,从那时起,所有的工作都是简单的。 我不知道为什么它首先失败,但似乎解决它。 MySQL自从那以后没有重新启动。