После обновления (Security Advisory - RHSA-2008:0768-9) упал MySQL. Операционка - Cent OS 4-й (аналог Red Hat). В логах следующее:-----
080911 16:56:09 mysqld started
080911 16:56:10 [ERROR] Can't start server : Bind on unix socket: Permission denied
080911 16:56:10 [ERROR] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ?
080911 16:56:10 [ERROR] Aborting080911 16:56:10 [Note] /usr/libexec/mysqld: Shutdown complete
080911 16:56:10 mysqld ended
-----Никакого "другого" сервера не запущено, пользователь и группа mysql имеются, права на /var/lib/mysql имеют, но файла mysql.sock больше нет вообще, ни в указанной директории, ни в любой другой.
Кто сталкивался, подскажите как вернуть mysqld к жизни?
>[оверквотинг удален]
>080911 16:56:10 [ERROR] Aborting
>
>080911 16:56:10 [Note] /usr/libexec/mysqld: Shutdown complete
>
>080911 16:56:10 mysqld ended
>-----
>
>Никакого "другого" сервера не запущено, пользователь и группа mysql имеются, права на
>/var/lib/mysql имеют, но файла mysql.sock больше нет вообще, ни в указанной
>директории, ни в любой другой.SELinux юзается? Если да, то попробуйте его отключить и попробуйте без него.
Было похожее, после обновления правил SELinux.
>Кто сталкивался, подскажите как вернуть mysqld к жизни?
SE Linux на этом сервере отключен изначально. Перепроверил - сам он не включался.
Проверьте не стали ли запускаться мускул в чруте. На всякий случай покажите какие именно владелец и права на /var/lib/mysql
Насколько я понимаю сам по себе мускул в чруте не запустится, там относительно трудоемкий процесс. Но на всякий случай проверил: раньше он всегда стартовал автоматом, стандартным скриптом /etc/rc.d/init.d/mysqld, там никаких попыток выполнить chrootuid не появилось.Вот права/владелец на /var/lib/mysql:
drwxr-xr-x 6 mysql mysql 4096 Sep 11 18:16 mysqlВот внутри директории:
-rw-rw---- 1 mysql mysql 10485760 Sep 3 11:21 ibdata1
-rw-rw---- 1 mysql mysql 5242880 Sep 3 11:21 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 Oct 23 2007 ib_logfile1
drwx------ 2 mysql mysql 4096 May 16 15:51 loger
drwx------ 2 mysql mysql 4096 Oct 23 2007 mysql
drwx------ 2 mysql mysql 4096 Sep 2 10:09 syslog
drwx------ 2 mysql mysql 4096 Oct 23 2007 test
>Насколько я понимаю сам по себе мускул в чруте не запустится, там относительно трудоемкий процессДа. Вот только в некоторых дистрах(например в альте) стартовый скрипт помещает мускул в чрут, в других(например в дебиане) - нет. Соответственно я предполагал, что апдейт поменял способ запуска.
>Вот права/владелец на /var/lib/mysql:
Все верно. Надо изолировать проблему. Попробуйте сами создать в этом каталоге обыкновенный файл и юникс сокет используя пользователя mysql. Попробуйте запустить mysqld(или mysqld_safe) с указанием сокета в /tmp. Можно еще под strace запустить дабы увидеть какой именно вызов возвращает ошибку.
Попробовал:
-----
[root@logwatch mysql]# sudo -u mysql touch mysql.sock
sudo: unable to exec /bin/touch: Permission denied[root@logwatch mysql]# sudo -u mysql cat > mysql.sock
sudo: unable to exec /bin/cat: Permission denied
-----
Система не дает пользователю mysql выполнять команды. Я не могу придумать как в таких условиях создать файл от имени пользователя mysql.
Еще один момент: я не разбираюсь в сокетах,- файл сокета это обычный файл или он должен создаваться какими-либо специальными средствами? Может вся проблема в том что я не знаю как его правильно создать?Тем не менее второе предложение,- запустил с сокетом в /tmp, вот результат:
-----
[root@logwatch tmp]# mysql -S /tmp/mysql.sock
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)[root@logwatch tmp]# mysqld_safe -S /tmp/mysql.sock
Starting mysqld daemon with databases from /var/lib/mysql
STOPPING server from pid file /var/run/mysqld/mysqld.pid
080912 11:52:31 mysqld ended
-----Ну и наконец запустил под strace. Ругается на отсутствие файлов и директорий, к примеру так:
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/mysql/tls/i686/sse2/libncurses.so.5", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/mysql/tls/i686/sse2", 0xbfe7e780) = -1 ENOENT (No such file or directory)
И так далее, а ближе к концу:
connect(3, {sa_family=AF_FILE, path="/var/lib/mysql/mysql.sock"}, 110) = -1 ECONNREFUSED (Connection refused)