URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6286
[ Назад ]

Исходное сообщение
"Проблемы запуска MySQL (Can't connect ... through socket)"

Отправлено groover , 09-Апр-09 11:11 
Здравствуйте.
Хронология примерно такая:
Неделю назад странным образом многократно был запущен по крону скрипт, который повесил MySQL (too many connections). Процессы были остановлены, но бд еще некоторое время выдавала ошибку большого числа подключений.

Через некоторое время, БД стала выдавать другую ошибку:
[]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

И теперь абсолютно непонятно, что с ней делать.
Перезапустить, запустить демон не получается, в статусе говорит, что он остановлен:
[]# service mysqld restart
Stopping MySQL:                                            [FAILED]
Timeout error occurred trying to start MySQL Daemon.
Starting MySQL:                                            [FAILED]
[]# service mysqld status
mysqld is stopped

Между тем, вроде как что-то запущено:
[]# ps ax| grep mysql
17911 pts/0    Dl     0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
17918 pts/0    S+     0:00 grep mysql
20554 pts/0    S     19:31 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql

Логи:
[]# tail /var/log/mysqld.log
090409  1:54:50 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
090409  1:54:50  InnoDB: Started; log sequence number 0 181835120
090409  1:54:50 [ERROR] /usr/libexec/mysqld: Error writing file '/var/run/mysqld/mysqld.pid' (Errcode: 28)
090409  1:54:50 [ERROR] Can't start server: can't create PID file: No space left on device
090409 01:54:50 mysqld_safe Number of processes running now: 0
090409 01:54:50 mysqld_safe mysqld restarted
/usr/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
090409  1:54:51 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
090409  1:54:51  InnoDB:090409 01:54:51 mysqld_safe Number of processes running now: 0
090409 01:54:51 mysqld_safe mysqld restarted

Весь инет облазил, ничего не помогает, руки опускаются. Может кто знает, что делать?
Зарание, спасибо.


Содержание

Сообщения в этом обсуждении
"Проблемы запуска MySQL (Can't connect ... through socket)"
Отправлено mikra , 09-Апр-09 11:41 
У тебя сейчас запущено два mysql сервера плюс глючит менеджер сервисов, считая что сервис mysql остановлен. Дальнейшие ошибки могут быть следствием конкуренции двух mysql, но возможно на /var закончилось свободное место.

Сперва надо остановить оба mysql сервера, потом запустить один. Следить за ошибками и действовать по обстоятельствам. Надо искать одмина...


"Проблемы запуска MySQL (Can't connect ... through socket)"
Отправлено angra , 10-Апр-09 01:33 
Это не два сервера, а сервер(mysqld) и стандартная обертка(mysqld_safe) к нему. Так что в этом отношении проблем нет. А вот состояние D(Uninterruptible sleep) для процесса mysqld это очень плохо, зачастую такие процессы не удается убить, что в данном случае и приводит к failed при попытке останова. В свою очередь уже запущенный процесс не дает возможности запустить новый, так как новый имеет те же параметры старта.
Пытайтесь убить mysqld при помощи kill -9 или экзотических сигналов. Если не получится, то в ребут. Можно конечно запустить еще одну копию указав ей другой port/socket/pid/lock, но лучше все-таки в ребут.

"Проблемы запуска MySQL (Can't connect ... through socket)"
Отправлено groover , 10-Апр-09 10:46 
>Это не два сервера, а сервер(mysqld) и стандартная обертка(mysqld_safe) к нему. Так
>что в этом отношении проблем нет. А вот состояние D(Uninterruptible sleep)
>для процесса mysqld это очень плохо, зачастую такие процессы не удается
>убить, что в данном случае и приводит к failed при попытке
>останова. В свою очередь уже запущенный процесс не дает возможности запустить
>новый, так как новый имеет те же параметры старта.
>Пытайтесь убить mysqld при помощи kill -9 или экзотических сигналов.
>Если не получится, то в ребут.

Не получилось, значит ребут.

Мдям-с. Ребутнул, теперь перестали грузиться страницы (видимо, сервер надо вручную запускать...), ну да ладно, без базы все равно толку никакого.
БД по прежнему не находит сокета:
[]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Смотрел процессы, там явно время от времени пытается стартануть mysqld.
[]# ps ax | grep mysql
3471 ?        R      0:35 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
31012 pts/0    S+     0:00 grep mysql
31013 ?        R      0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
[]# ps ax | grep mysql
3471 ?        S      0:38 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
31985 ?        Sl     0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
31992 pts/0    S+     0:00 grep mysql
[]# ps ax | grep mysql
3471 ?        S      0:40 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
32751 ?        Dl     0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
32758 pts/0    S+     0:00 grep mysql

[]# ps ax | grep mysql
1483 pts/0    S+     0:00 grep mysql
3471 ?        S      0:43 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
[]# ps ax | grep mysql
1627 ?        Rl     0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
1634 pts/0    S+     0:00 grep mysql
3471 ?        S      0:43 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
[]# ps ax | grep mysql
1830 pts/0    S+     0:00 grep mysql
3471 ?        R      0:44 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql


>Можно конечно запустить еще одну копию указав
>ей другой port/socket/pid/lock

А можно поподробнее? Т.е. просто отредактировать /etc/my.cnf?

set-variable=local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
#old_passwords=1
max_allowed_packet=500M

[mysql.server]
user=mysql
basedir=/var/lib/mysql

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[root@hostname31926 etc]# cat my.cnf
[mysqld]
set-variable=local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
#old_passwords=1
max_allowed_packet=500M

[mysql.server]
user=mysql
basedir=/var/lib/mysql

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

UPD. Http ожил, он действительно вручную запускается... А вот мускуль работать отказывается :-(


"Проблемы запуска MySQL (Can't connect ... through socket)"
Отправлено angra , 10-Апр-09 12:26 
Самое время заглянуть в /var/log/mysqld.log

"Проблемы запуска MySQL (Can't connect ... through socket)"
Отправлено groover , 10-Апр-09 14:00 
Яху, она вертится!
Как и предположил mikra (за это ему, конечно, спасибо) элементарно закончилось место на var. Там лежит сайт, поэтому, видимо, загрузка какой-нибудь картинки туда стала критическим моментом. Почему я не получил об этом ни 1 сообщения с хостинга - не понятно. Удалил хлам, сразу запустился mysqld. Сейчас все робит.

Да, логи я конечно еще до того, как на форум полезть смотрел, но ничего путного так и не понял... Правда мое внимание привлекала только первая ошибка:

Повторяющаяся запись в логе:
[]# tail /var/log/mysqld.log
/usr/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
090410  4:12:04 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

Апгрейд не запускается, говорит сокета нет.

090410  4:12:04  InnoDB: Started; log sequence number 0 181835120
090410  4:12:04 [ERROR] /usr/libexec/mysqld: Error writing file '/var/run/mysqld/mysqld.pid' (Errcode: 28)
090410  4:12:04 [ERROR] Can't start server: can't create PID file: No space left on device

А вот тут интересней, я только сейчас на эту ошибку обратил внимание. В итоге, оказалось, что места просто нет.

090410 04:12:04 mysqld_safe Number of processes running now: 0
090410 04:12:04 mysqld_safe mysqld restarted
...

Огромное вам спасибо, парни, выручили. Angra, тоже огромное спасибо, ключевым решением действительно было - еще раз лезть в логи.

P.S.
Соответственно, очередной раз убедился, что администрирование - это не мое (уж лучше баги вылавливать :-) Да, и за то, что лошка не загрызли сразу, тоже отдельное спасибо!