MySQL在Ubuntu 11.04上每30分钟重启一次

时间:2011-10-30 12:29:11

标签: mysql ubuntu monit apparmor

我遇到的问题是MySQL 5.1.54在Ubuntu 11.04上每30分钟重启一次。发生这种情况时,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 upstart配置的内容:

# 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发生了变化。)

提前致谢。

5 个答案:

答案 0 :(得分:1)

你使用厨师或木偶,可能会做一些触发重启的事情吗?

答案 1 :(得分:0)

你可以在upstart中检查(并可能发布)你的mysql作业的定义吗? (/etc/init/mysql.conf)。 OK =尝试删除“respawn”。它不像新手文档中记录的那样有效。通常它用于重新生成进程,如果它被其他进程杀死,但似乎它没有按预期运行。你可以看到为什么apparmour总是加载 - 因为脚本中有一个pre-start节。  由于新贵是非常新的,并且仍在不断发展,更好的是使用SysV方式。

答案 2 :(得分:0)

你应该尝试在没有AppArmor的情况下运行它:只需运行/usr/bin/mysqld_safe/usr/bin/mysqld而不使用upstart并等待30分钟。如果mysql没有自动重启,则在/etc/init/mysql.conf文件中禁用AppArmor,或者以不同方式配置它。

如果问题仍然存在,请阅读mysql的日志。如果默认情况下未启用日志,则可以在启动mysqld时使用选项--log-error=/tmp/mysql.log --log-warnings

答案 3 :(得分:0)

似乎将/etc/init.d/mysql启动脚本转换为sysV样式而不是作为一个新手脚本似乎可以解决我的问题。

答案 4 :(得分:0)

我有同样的问题升级到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脚本并尝试在脚本中运行upgrade命令,希望对其进行调试(MySQL服务器当时需要运行):

/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf

然后我发现这没有任何抱怨,从那时起,一切都很简单。我不知道为什么它首先失败了,但这似乎解决了它。从那以后,MySQL还没有重新启动。