2

我遇到了 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 已更改)。

提前致谢。

4

5 回答 5

1

您使用的是厨师还是木偶,这可能会触发重启?

于 2012-02-18T06:05:09.273 回答
0

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

于 2011-10-30T12:35:42.167 回答
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脚本并尝试在脚本中运行升级命令,希望能够对其进行调试(当时需要运行 MySQL 服务器):

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

然后我发现这没有任何抱怨,从那时起一切都正常。我不知道为什么它一开始就失败了,但这似乎解决了它。MySQL 从那以后就没有重新启动过。

于 2014-05-23T07:31:49.043 回答
0

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

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

于 2011-10-31T02:45:01.510 回答
0

似乎将 /etc/init.d/mysql 启动脚本转换为 sysV 样式而不是作为暴发户脚本似乎为我解决了这个问题。

于 2013-08-28T00:56:41.963 回答