Error 2002 hy000 mysql linux

MySQL ERROR 2002 (HY000): Can’t connect to local MySQL server through socket

I noticed this issue when my WordPress server started throwing aa MySQL error. To try to debug WordPress, I attempted to connect manually. I get the following:

$ mysql -u root -p -h localhost -P 3306 Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/bitnami/mysql/tmp/mysql.sock' (2) 
$ ps -ef | grep mysql mysql 14743 1 0 15:20 ? 00:00:00 /usr/sbin/mysqld bitnami 14939 13882 0 15:28 pts/0 00:00:00 grep --color=auto 

mysql-server is installed, but /opt/bitnami/mysql/tmp/mysql.sock does not exist. It looks like MySQL is listening on the correct port.

$ telnet 127.0.0.1 3306 Trying 127.0.0.1. Connected to 127.0.0.1. Escape character is '^]'. [ 5.5.54-0ubuntu0.14.04.1,IIq5/)"m"[&J#mysql_native_password !#08S01Got packets out of orderConnection closed by foreign host. 
$ sudo /opt/bitnami/ctlscript.sh status php-fpm already running apache already running mysql not running $ sudo /opt/bitnami/ctlscript.sh start mysql 2017-02-14T16:53:25.064586Z mysqld_safe Logging to '/opt/bitnami/mysql/data/mysqld.log'. 2017-02-14T16:53:25.233250Z mysqld_safe Starting mysqld.bin daemon with databases from /opt/bitnami/mysql/data 2017-02-14T16:53:28.400598Z mysqld_safe mysqld from pid file /opt/bitnami/mysql/data/mysqld.pid ended /opt/bitnami/mysql/scripts/ctl.sh : mysql could not be started Monitored mysql 

Here are a few choice lines from /opt/bitnami/mysql/data/mysqld.log. It looks like theres a conflict.

2017-02-14T17:03:31.274720Z 0 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306 2017-02-14T17:03:31.274778Z 0 [Note] - '127.0.0.1' resolves to '127.0.0.1'; 2017-02-14T17:03:31.274835Z 0 [Note] Server socket created on IP: '127.0.0.1'. 2017-02-14T17:03:31.274888Z 0 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use 2017-02-14T17:03:31.274901Z 0 [ERROR] Do you already have another mysqld server running on port: 3306 ? 2017-02-14T17:03:31.274952Z 0 [ERROR] Aborting 

Источник

Ошибка «ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/run/mysqld/mysqld.sock’ (2 «No such file or directory»)» (РЕШЕНО)

При попытке подключения к серверу MySQL может возникнуть ошибка:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2 "No such file or directory")

Вариант на другом дистрибутиве (отличается путь до файла mysqld.sock):

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

Ошибка означает, что не получается подключиться к MySQL серверу через сокет /run/mysqld/mysqld.sock, поскольку данный файл просто не существует.

Читайте также:  Operating system linux presentation

Эта ошибка может возникнуть при использовании примерно следующей команды:

Причём она одинакова и для MySQL и для MariaDB.

Причина ошибки всегда одна — на хосте, к которому вы пытаетесь подключиться, не работает служба MySQL/MariaDB. Конкретных вариантов может быть множество: от банальных что вы забыли установить службу до более сложных, когда из-за ошибки в команде вы подключаетесь не к тому хосту.

Убедитесь, что MySQL/MariaDB сервер установлен

В первую очередь убедитесь, что СУБД MySQL или MariaDB вообще установлены.

Пакет может называться mysql-server или mysql. Если вы выбрали MariaDB вместо MySQL, то пакет называется mariadb-server или mariadb.

Пакеты mysql-client или mariadb-clients или какие-то ещё НЕ подходят! Это только клиенты для подключения, но не сам сервер.

На Ubuntu, Linux Mint и других дистрибутивах из этой семьи для установки выполните:

sudo apt install mysql-server

Убедитесь, что служба MySQL/MariaDB запущена

Файл /run/mysqld/mysqld.sock создаётся когда MySQL или MariaDB сервер установлен и запущен. Поэтому проверим статус сервера следующей командой (подходит и для MySQL, и для MariaDB):

systemctl status mysqld.service

Должен быть статус active (running) .

Если служба не запущена, то запустите её командой:

sudo systemctl start mysqld.service

После этого проверьте статус службы

Добавления службы в автозагрузку (чтобы не пришлось её запускать при каждом включении компьютера, выполните следующую команду):

sudo systemctl enable mysqld.service

Убедитесь, что служба MySQL/MariaDB настроена правильно

Если причина проблемы оказалась в том, что служба не запущена и после попытки запуска служба вновь оказалась неактивной, значит проблема может быть в неправильной настройке сервера MySQL/MariaDB.

Файлы конфигурации (настроек) MySQL и MariaDB могут размещаться в разных директориях, например:

При этом в файлах могут быть установлены различные значения одной и той же настройки, что приводит к проблеме. Устраните противоречие, либо удалите или переименуйте один из файлов и попробуйте вновь запустить службу.

На что стоит обратить внимание в конфигурационных файлах

Если вы хотите сохранить оба конфигурационных файла, то проверьте, чтобы значение socket было одинаковым. Также для bind-address должен быть установлен правильный IP адрес. Если к этому серверу подключаются только приложения, которые запущены на этом же сервере, то в качестве значения bind-address нужно прописать localhost или 127.0.0.1

Перезапустите службу mysqld

Попробуйте просто перезапустить службу командой:

sudo systemctl restart mysqld.service

Либо следующим образом, значала узнайте PID (идентификатор) процесса mysql:

Затем выполните следующую команду, в которой вместо [PID]​ укажите число, полученное из предыдущей команды:

Затем вновь запустите службу:

sudo systemctl start mysqld.service

Неправильные права на файл /run/mysqld/mysqld.sock

У MySQL/MariaDB должно быть достаточно прав для создания и записи в файл /run/mysqld/mysqld.sock (или /var/run/mysqld/mysqld.sock). Можно попробовать решить проблему следующим образом, если файл /run/mysqld/mysqld.sock (или /var/run/mysqld/mysqld.sock — указывайте файл в соответствии с вашими настройками в my.cnf) не существует, то создайте его:

touch /run/mysqld/mysqld.sock

Затем сделайте пользователя mysql владельцем этого файла:

chown mysql /run/mysqld/mysqld.sock

Установите правильные права на этот файл:

sudo chmod 755 /run/mysqld/mysqld.sock

Вновь попробуйте запустить сервис:

sudo systemctl start mysqld.service

Проблемы запуска службы из-за несовместимой настройки apparmor

Читайте также:  Linux can socket example

Если при запуске службы вы получаете ошибку и вы используете профили apparmor, проверьте, чтобы профиль apparmor позволял процессу mysqld иметь доступ в необходимую для него директорию.

Несовместимость может быть вызвана, к примеру, файл сокета для MySQL настроен на сохранение по пути /run/mysqld/mysqld.sock, но в профиле apparmor дано разрешение на /var/run/mysqld/mysqld.sock

Чтобы убедиться, что дело именно в apparmor, попробуйте отключить его:

sudo aa-complain /etc/apparmor.d/*

Если проблема исчезла и служба mysqld запустилась, значит нужно поверить разрешения для mysqld и добавить необходимые пути.

К примеру для показанного примера решением проблемы является добавление в /etc/apparmor.d/usr.sbin.mysqld строк:

/run/mysqld/mysqld.pid rw, /run/mysqld/mysqld.sock rw,

Служба mysqld не может запуститься из-за отсутствия места на диске

Если ваш диск переполнен, то это может быть причиной невозможности запуска службы, даже если она правильно настроена и ранее нормально работала.

Освободите пространство на диске и перезапустите службу.

Служба mysqld не может запуститься так как порт 3306 используется другой программой

По умолчанию служба mysqld использует порт 3306 если этот порт использует другой процесс, то это является препятствием для запуска MySQL и в конечном счёте появляется рассматриваемая ошибка.

Для решения проблемы выясните, какая служба прослушивает порт 3306. Например, это можно сделать командой:

А затем остановите эту служу и удалите её из автозагрузки.

Либо можно использовать альтернативный вариант — настроить службу mysqld прослушивать другой, отличный от дефолтного порта. Но это может повлечь необходимость явно указывать порт в любых приложениях, которые подключаются к СУБД MySQL.

Вместо localhost попробуйте использовать 127.0.0.1

Вместо localhost в примерно такой команде:

mysql -u myuser -pmypassword -h localhost mydatabase

Используйте 127.0.0.1:

mysql -u myuser -pmypassword -h 127.0.0.1 mydatabase

(также обратите внимание на отсутствие пробела между -p и mypassword)

Служба mysqld не запускается из-за недоступности файлов баз данных

Ещё одной причиной может стать то, что вы переместили файлы с базами данных, но не изменили пути в соответствующих файлах настройки MySQL. Выполните правильно настройку и перезапустите MySQL или MariaDB.

Неверно указан хост для подключения

Для указания удалённого хоста используется опция -h. Из-за привычки указывать хост после имени пользователя через знак @ (как это делается, например, для SSH), либо указывать удалённый хост без опции -h, команда может оказаться неверной в том плане, что вместо подключения к удалённому хосту, вы пытаетесь подключиться, например, к своей собственной системе, на которой служба MySQL не установлена.

Читайте также:  Linux посмотреть количество ram

Следовательно, отредактируйте команду, используйте опцию -h или более длинный вариант —host=имя_хоста для указания хоста, к которому вы хотите подключиться.

Кстати, для указания имени пользователя используется опция -u. Если пароль отличается от стандартного, то используется опция -P (заглавная буква). Опция -p (прописная буква) используется для указания базы данных, которая выбирается для использования.

mysql -h 127.0.0.1 -P 3306 -u root -p

Служба mysqld по умолчанию не добавляется в автозагрузку на некоторых дистрибутивах

Помните, что на некоторых дистрибутивах (например, производных Arch Linux, на Kali Linux) даже после установки MySQL или MariaDB они не добавляются в автозагрузку и не запускаются по умолчанию.

Для запуска службы и её авто старта при последующих включениях компьютера выполните команды:

sudo systemctl start mysqld.service sudo systemctl enable mysqld.service

Заключение

Итак, основной причиной ошибки «ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/run/mysqld/mysqld.sock’ (2 «No such file or directory»)» является незапущенная служба mysqld. Причин того, что указанная служба не запущена может быть множество: от банального факта что служба вообще не установлена, до более серьёзных проблем связанных с переполненностью диска и неправильной настройкой конфигурационных файлов и прав доступа к файлам.

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

Связанные статьи:

Рекомендуемые статьи:

3 Комментарии

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)
root@ыукмук:~/dumps# ps ax | grep mysql
2105 ? Sl 14:45 mysqld —user=mysql —init-file=/var/lib/mysql-files/tmp.lIFZNYTGWf —socket=/tmp/tmp.U0qWDGOsFZ/mysqld.sock —pid-file=/tmp/tmp.U0qWDGOsFZ/mysqld.pid

В выводе можно увидеть параметры, с которыми запущена команда — они странные, но в принципе с подобными опциями (указав существующие директории) вполне можно запустить:

sudo mysqld --user=mysql --socket=/tmp/mysqld.sock --pid-file=/tmp/mysqld.pid
mysql -h localhost -u root # вызывает ошибку, которой посвящена статья mysql -h 127.0.0.1 -u root # НЕ вызывает ошибку

Казалось бы мистика, localhost ≠ 127.0.0.1, но всё очень элементарно. Во многих случаях localhost — это намёк на использование сокета UNIX для подключения к процессу сервера MySQL, а 127.0.0.1 устанавливает TCP-соединение. Иногда сокет UNIX находится в неожиданном месте или просто недоступен, что приводит к ошибке «No such file or directory». Ну, то есть, процесс MySQL может работать, сокет может существовать, но система не может его найти, а попытка соединения делается именно через сокет — поэтому такое сочетание, служба работает, но недоступна для подключения, вполне себе возможно. Варианты: 1. Используйте TCP-соединение для подключения:

sudo mysqld --user=mysql --socket=/run/mysqld/mysqld.sock --pid-file=/tmp/mysqld.pid

3. Не делайте то, что приводит к таким странным параметрам при запуске команды. На системах с systemctl достаточно следующей команды для запуска MySQL/MariaDB:

sudo systemctl start mysql

Источник

Оцените статью
Adblock
detector