Не удается подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock' (2)

9

У меня есть почтовый сервер, настроенный с использованием dovecot + postfix + mysql, и он прекрасно работал на сервере (Ubuntu Server). Но на прошлой неделе он перестал работать правильно. Это не отправляет электронную почту. Когда я пытаюсь telnet localhost smtpподключиться, я успешно подключаюсь, но когда я mail from:<steve@example.com>нажимаю Enter, то ничего не происходит.

Изучив /var/log/mail.logфайл, я обнаружил, что, вероятно, (99%) проблема связана с постфиксом, когда он пытается подключиться к серверу MySQL. Если вы видите файл журнала, приведенный ниже, вы можете увидеть, что он говорит Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2).

Nov 14 21:54:36 ns1 dovecot: dovecot: Killed with signal 15 (by pid=7731 uid=0 code=kill)
Nov 14 21:54:36 ns1 dovecot: Dovecot v1.2.9 starting up (core dumps disabled)
Nov 14 21:54:36 ns1 dovecot: auth-worker(default): mysql: Connected to localhost (mailserver)
Nov 14 21:54:44 ns1 postfix/postfix-script[7753]: refreshing the Postfix mail system
Nov 14 21:54:44 ns1 postfix/master[1670]: reload -- version 2.7.0, configuration /etc/postfix
Nov 14 21:54:52 ns1 postfix/trivial-rewrite[7759]: warning: connect to mysql server localhost: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Nov 14 21:54:52 ns1 postfix/trivial-rewrite[7759]: fatal: mysql:/etc/postfix/mysql-virtual-alias-maps.cf(0,lock|fold_fix): table lookup problem
Nov 14 21:54:53 ns1 postfix/master[1670]: warning: process /usr/lib/postfix/trivial-rewrite pid 7759 exit status 1
Nov 14 21:54:53 ns1 postfix/cleanup[7397]: warning: problem talking to service rewrite: Connection reset by peer
Nov 14 21:54:53 ns1 postfix/master[1670]: warning: /usr/lib/postfix/trivial-rewrite: bad command startup -- throttling
Nov 14 21:54:53 ns1 postfix/smtpd[7071]: warning: problem talking to service rewrite: Success

Я пытался, netstat -ln | grep mysqlи это возвращает

unix 2 [ ACC ] STREAM LISTENING 5817 /var/run/mysqld/mysqld.sock,

Содержание /etc/postfix/mysql-virtual-alias-maps.cfфайла здесь:

user = stevejobs
password = apple
hosts = localhost
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source='%s'

Здесь я пытался изменить, hosts = 127.0.0.1но это говоритwarning: connect to mysql server 127.0.0.1: Can't connect to MySQL server on '127.0.0.1' (110)

Итак, я заблудился и не знаю, где еще можно изменить, чтобы решить проблему. Любая помощь будет высоко оценена.

Спасибо.

РЕДАКТИРОВАТЬ 1

Когда я делаю netstat -na, я вижу, что mysql не привязан ни к localhost, ни к 127.0.0.1. Может ли это быть проблемой?

bakhtiyor@ns1:~$ netstat -na | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN   
Бахтиер
источник

Ответы:

6

Это кажется очень глупым, но я решил проблему. Я не заметил, что системный администратор каким-то образом заблокировал порт 3306 для всех хостов в брандмауэре, и поэтому я не мог подключиться к mysql. После снятия этого ограничения я смог без проблем подключиться к mysql. Спасибо за ваши предложения и помощь.

Бахтиер
источник
1
Как снять ограничение?
Зеленый
Я хочу подключиться через TCP, а не через сокет. Как я могу это сделать? Спасибо.
Крисанальфа
Привет, @Green, есть ли у тебя решение о том, как снять ограничение или, скорее, как найти, есть ли ограничение на порт 3306?
Сушивам
3

У меня была аналогичная проблема. Изменение "hosts = localhost" на "hosts = 127.0.0.1" и установка bind-адреса на тот же адрес исправили его для меня (почему-то для bind-адреса было установлено значение 0.0.0.0)

Юсси Тимонен
источник
Я смог оставить bind-address как 0.0.0.0 (что было необходимо для кластеризации, которую я делал с galera), и просто изменил «host = 127.0.0.1: 3306», чтобы переключить его на использование TCP. Я решил сделать это вместо того, чтобы монтировать гнездо в chroot Postfix, как это сделали другие.
Шон Рейфшнайдер,
3

Вы пытались подключиться к серверу Mysql?

mysql -u username -p

Также вы можете попробовать изменить адрес прослушивания в /etc/mysql/my.cnf на 127.0.0.1 и перезапустить MySQL.

# /etc/mysql/my.cnf
bind-address = 127.0.0.1
Salem
источник
Я сделал все, что вы сказали, и
безрезультатно
я имею в виду, что могу подключиться к mysql, используя mysql -u username -p
Bakhtiyor
Должно быть "my.cnf"
jnunn
2

Я только что получил эту же ошибку на одном из компьютеров компании.

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Я также часто получал эту ошибку, когда пытался запускать программы X-windows через ssh:

GConf Error: Failed to contact configuration server; 
some possible causes are that you need to enable TCP/IP networking for ORBit,
or you have stale NFS locks due to a system crash

Оказывается, у меня была корневая файловая система, которая была полностью заполнена без свободного места на диске, поэтому моя система не могла записать много необходимых файлов. Я получал все виды ошибок, связанных со многими различными программами. (Не удалось войти через GDM, обои GDM стали черными, ошибки файла блокировки gconf и т. Д ...)

Все, что я сделал, это ввел эту простую команду, чтобы избавиться от файлов в корневом разделе более 400 МБ, которые больше не нужны.

sudo apt-get autoremove

Это дало моей корневой файловой системе необходимое пространство для дыхания. Теперь все работает отлично. Думаю, корневого каталога размером 10 ГБ недостаточно для обработки обновлений Ubuntu за два года.

Если кому-то все равно, система работает под управлением Ubuntu 10.04 с момента ее выхода. Система обновляется не реже одного раза в неделю. Сегодняшняя дата 9-6-2012, так что это почти 2,5 года обновлений.

Счастливый геккон
источник
когда ваша проблема в космосе, я также предлагаю askubuntu.com/questions/17432/…
ecoologic
+1 за указание на космическую проблему - это решило мою проблему.
Ювал
1

В конце концов мне помогло очистить (не удалить!) Все пакеты apt-get, связанные с mysql, за исключением того, libmysqlclient16что находился в состоянии деинсталляции (не уверен, что это такое).

Итак, просто сделайте:

dpkg --get-selections | grep mysql

а потом:

sudo apt-get purge <package_name>

Начните с общего, затем перейдите к клиенту, а затем к серверу.

Гилад Шахрабани
источник
Я не думаю, что этот ответ полезен. Проблема заключалась в заблокированном порте 3306, не сломанных пакетах MySQL.
Нефенте
ЭТА КОМАНДА УДАЛИТ ЛЮБОЙ ПАКЕТ ВlibmysqlclientXX
ЗАВИСИМОСТИ
как найти заблокированный порт 3306?
Сушивам