MySQL перезапускается каждые 30 минут в Ubuntu 11.04 - PullRequest
2 голосов
/ 30 октября 2011

У меня проблема с тем, что MySQL 5.1.54 перезапускается каждые 30 минут в Ubuntu 11.04.Когда это происходит, в журнале 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"

Кроме того, вот содержимое конфигурации выскочки MySQL в / etc / init /mysql.conf:

# 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 минут он имеет своиPID изменен после перезапуска MySQL).

Заранее спасибо.

Ответы [ 5 ]

1 голос
/ 18 февраля 2012

Вы используете шеф-повара или марионетку, которая может делать что-то, что вызывает перезагрузку?

0 голосов
/ 23 мая 2014

У меня была такая же проблема при обновлении до 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 не перезапускается с тех пор.

0 голосов
/ 28 августа 2013

Кажется, преобразование загрузочного скрипта /etc/init.d/mysql в стиль sysV, а не как выскриптовый скрипт, казалось, исправило проблему для меня.

0 голосов
/ 31 октября 2011

Вы должны попытаться запустить его без AppArmor: просто запустите /usr/bin/mysqld_safe или /usr/bin/mysqld без использования upstart и подождите 30 минут.Если mysql не перезапускается автоматически, отключите AppArmor в файле /etc/init/mysql.conf или настройте его по-другому.

Если проблема все еще существует, прочтите журнал mysql.Если журнал не включен по умолчанию, вы можете использовать опцию --log-error=/tmp/mysql.log --log-warnings при запуске mysqld.

0 голосов
/ 30 октября 2011

Можете ли вы проверить (и, возможно, опубликовать) определение вашей работы mysql в upstart?(/Etc/init/mysql.conf).ОК = попробуйте удалить "респаун".Это не работает, как описано в документации выскочки.Обычно он используется для перезапуска процесса, если он уничтожен другим процессом, но, похоже, он не работает должным образом.Вы можете видеть, почему apparmour всегда загружается - из-за предстартовой строфы в сценарии.Поскольку выскочка очень новая и все еще развивается, лучше использовать SysV.

...