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

MySQL在Ubuntu 11.04上每30分钟重启一次,mysql,ubuntu,monit,apparmor,Mysql,Ubuntu,Monit,Apparmor,我遇到了一个问题,MySQL 5.1.54在Ubuntu11.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

我遇到了一个问题,MySQL 5.1.54在Ubuntu11.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
#MySQL服务
说明“MySQL服务器”
作者“Mario Limonciello”
启动(网络设备启动)
和本地文件系统
和运行级别[2345])
在运行级别停止[016]
重生
env HOME=/etc/mysql
乌马斯克007
#默认值5秒对于需要刷新缓冲区的mysql来说太低了
终止超时300
预启动脚本
#健康检查
[-r$HOME/my.cnf]
[-d/var/run/mysqld]| |安装-m 755-o mysql-g root-d/var/run/mysqld
/lib/init/apparmor配置文件加载usr.sbin.mysqld
LC_ALL=C BLOCKSIZE=df——可移植性/var/lib/mysql/tail-n1 | awk'{exit($4您能在upstart中检查(可能会发布)您的mysql作业的定义吗?(/etc/init/mysql.conf).OK=尝试删除“respawn”。它不能像upstart文档中所记录的那样工作。通常,如果进程被其他进程终止,它会被用来重新启动进程,但它似乎不能按预期工作。您可以看到为什么apparmour总是在加载-因为脚本中有预启动节。

由于upstart非常新,并且还在发展中,最好使用SysV方式。

您应该尝试在不使用AppArmor的情况下运行它:只需运行
/usr/bin/mysqld\u safe
/usr/bin/mysqld
而不使用upstart,然后等待30分钟。如果mysql没有自动重启,那么在/etc/init/mysql.conf文件中禁用AppArmor,或者配置它不一样


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

您使用的是chef还是puppet,这可能会触发重新启动?

似乎正在将/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服务器):


然后我发现这一点毫无怨言,从那一点开始一切都很顺利。我不知道它为什么会失败,但这似乎解决了它。MySQL从那以后就没有重新启动过。

你能检查一下(可能会发布)upstart中MySQL作业的定义吗?(/etc/init/MySQL.conf)刚刚尝试删除它并重新启动了MySQL。我同意使用SysV方式。但是,这是一个现成的upstart脚本,与Ubuntu 11.04上的标准MySQL服务器包一起打包,因此人们希望它能工作。不过,我会在接下来的30分钟左右知道问题是否仍然存在。谢谢你的建议不是,在我从upstart脚本中删除“respawn”并手动重新启动它之后,它几乎正好重新启动了30分钟(同时禁用apparmour配置文件。我也依赖于此“开箱即用”的upstart脚本,但它们的行为并不总是如预期的那样。如果您想继续使用upstart脚本,请尝试以下操作-复制当前upstart作业定义,并将其剥离到最低限度(运行脚本+启动服务命令时运行级别)-然后使用该脚本。看到结果后,开始添加其他内容(启动后和启动前)。如果这没有帮助,则问题是由其他服务而不是MYSQL本身引起的。
/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf