Прошлой ночью мой сервер MySQL неожиданно отключился. При попытке перезапуска (с service mysql restart
- Я root) просто зависает. С mysql -u root -p
команда, я получаю ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
. Затем я попытался запустить демон вручную (mysqld
). Приглашение зависает примерно 2 секунды, а затем возвращается. При ближайшем рассмотрении журналов ошибок я получил:
2016-01-22T19:18:32.399584Z 0 [ERROR] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock.
2016-01-22T19:18:32.399622Z 0 [ERROR] Unable to setup unix socket lock file.
2016-01-22T19:18:32.399646Z 0 [ERROR] Aborting
Я тогда попробовал chown mysql /var/run/mysqld
, chmod -R 775 /var/run/mysqld
, touch /var/run/mysqld/mysqld.sock.lock
и apt-get install mysql-community-server --reinstall
. Не повезло.
Я осмотрелся и не нашел решения. Здесь есть помощь?
Примечание: я запускаю Debian 8 (Jessie) с сервером сообщества MySQL 5.7.10.
Примечание для будущих путешественников: это зависит от вашей конкретной конфигурации, но это очень скорее всего проблема с apparmor. Если вы не хотите отключать блокировку, взгляните на системный журнал и посмотрите, не появляется ли у вас apparmor denies в этом файле.
Вы увидите что-то вроде: apparmor="DENIED" operation="open" parent=29871 profile="/usr/sbin/mysqld" name="/run/mysqld/mysqld.sock.lock"
И можно исправить, добавив /run/mysqld/mysqld.sock.lock rw
к /etc/apparmor.d/usr.sbin.mysqld
рядом с другим /run/*
записи и перезагрузка apparmor.
Исправлена. Добавить skip-external-Lock к my.cnf
под [mysqld]
раздел, а затем перезагрузите всю систему. Это должно исправить это для всех, кто это обнаружит. Также, если вы сделали резервную копию своих данных, а затем попытались восстановить, и вам было предложено rm ib*
чтобы это работало, вам понадобится ibdata
файл.
У меня была такая же проблема с теми же точными сообщениями об ошибках, но в моем случае это было связано с обновлением репозитория приложений, которое закончилось не так, как должно было. Так что в моем случае это просто вопрос ручного запуска mysql_upgrade -u adminname -p
а затем перезапуск сервера помог.