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

Обновлено: 06.07.2024

Я получаю следующую ошибку, когда пытаюсь подключиться к mysql:

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

есть ли решение этой ошибки? Какова может быть причина?

вы подключаетесь к "localhost" или "127.0.0.1"? Я заметил, что при подключении к "localhost" используется разъем сокета, но при подключении к "127.0.0.1" используется разъем TCP/IP. Вы можете попробовать использовать "127.0.0.1", если розетка не включена/работает.

убедитесь, что ваша служба mysql запущена

затем попробуйте одно из следующих действий:

(Если вы не установили пароль для MySQL)

Если вы уже установили пароль

Если ваш файл мои.cnf (обычно в папке etc) правильно настроен с

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

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

это решило его для меня

сервер MySQL не работает, или это не местоположение его файла сокета (проверьте мой.cnf).

скорее всего mysql.sock не существует /var/lib/mysql/ .

если вы найдете тот же файл в другом месте, то симлинк это:

например: у меня есть это в /data/mysql_datadir/mysql.sock

переключите пользователя на mysql и выполните, как указано ниже:

это решило мою проблему

в моем случае я переместил файл сокета в другое место внутри /etc/my.cnf от /var/lib/mysql/mysql.sock to /tmp/mysql.sock

проблема заключается в том, как настроен клиент. Запуск диагностики фактически покажет правильный путь сокета. например!--6-->

Если вы находитесь на недавнем RHEL, вам может потребоваться запустить mariadb (MySQL db с открытым исходным кодом) вместо mysql db:

затем вы должны иметь доступ к mysql обычным способом:

Проверьте, запущена ли ваша служба mysqld или нет, если не запущена, запустите службу.

если ваша проблема не решена, ищите /etc/my.cnf и изменить следующим образом, где вы видите линию, начиная с socket . Сделайте резервную копию этого файла перед выполнением этого обновления.

просто редактировать /etc/my.cnf Добавьте следующие строки my.cnf

перезапустите mysql и снова подключитесь

mysql-u user-p password database-H host;

убедитесь, что у вас достаточно места в /var . Если MySQL demon не может написать дополнительную информацию на диск, сервер mysql не запустится, и это приведет к ошибке Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

рассмотрите возможность использования

Это поможет вам сохранить на диске вниз.

вот что сработало для меня:

MariaDB, сообщество, разработанное fork MySQL, стало реализацией MySQL по умолчанию во многих дистрибутивах.

Итак, сначала вы должны начать,

если это не удается, попробуйте,

затем, чтобы запустить mysql,

на сегодняшний день, в Fedora пакет называется mariadb А в Ubuntu это называется mariadb-server .

поэтому вам, возможно, придется установить его, если он еще не установлен в вашей системе.

пожалуйста, проверьте, работает ли другая служба mysql.

убедитесь, что вы запустите сервер:

затем соединитесь с пользователем root:

Если вы меняете файлы в /var/lib / mysql [ как копировать или заменить это ], вы должны установить владельца файлов в mysql это так важно, если mariadb.перезапуск службы был faild

chown-R mysql: mysql / var/lib/mysql/*

chmod-R 700 / var/lib/mysql/*

Если ваш mysql ранее работал и внезапно остановился, просто "перезагрузите" сервер.

столкнулся с этой проблемой на моем CentOS VPS.->

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

пробовал все методы, наконец, перезапуск сервера исправил проблемы ->

надеюсь, что это помогает !!

сначала введите "service mysqld start" и войдите

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

Если вы используете CentOS 7, вот правильный способ установить его:

тогда вы можете установить его yum install mysql-community-server

запустите его с помощью systemctl: systemctl start mysqld

моя проблема заключалась в том, что я успешно установил mysql, и он работал нормально.

но однажды произошла та же ошибка.

не удается подключиться к локальному серверу MySQL через socket '/var/lib/mysql / mysql.и Sock' (2)

и нет mysql.файл носков существовал.

это решение решило мою проблему, и mysql снова запустился:

войти в систему в качестве root:

MySQL теперь должен быть запущен и работает.

Я надеюсь, что это может помочь кому-то еще.

обратите внимание, что в то время как mysql читает информацию о местоположении файла socketfile из my.cnf файл, программа mysql_secure_installation, кажется, не делает это правильно время от времени.

поэтому, если вы похожи на меня и перетасовываете вещи во время установки, вы можете попасть в ситуацию, когда вы можете подключиться к базе данных с mysql просто отлично, но вещь не может быть защищена (не используя этот скрипт в любом случае).

(Я использую /tmp/ в качестве местоположения по умолчанию для сокетов)

один из способов воспроизвести эту ошибку: если вы хотели подключиться к внешнему серверу, но вместо этого подключились к несуществующему локальному:

поэтому вы должны указать хост такой:

Это может быть глупое предложение, но убедитесь, что 100% ваша БД по-прежнему размещена на localhost. Например, если администратор сети выбрал (или изменил) хостинг Amazon DB, вам понадобится это имя хоста!

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

Это сработало для меня со следующими изменениями

любой путь для сокета упоминается в [mysqld] и то же самое в [клиенте] в моем.cnf и перезапустить mysql

[mysqld] гнездо=в/var/библиотека/MySQL в/в MySQL.носок!--1-->

[клиент] гнездо=в/var/библиотека/MySQL в/в MySQL.носок!--1-->

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

пожалуйста, прочитайте больше, чтобы иметь объяснение:

Если вы используете MySQL в LINUX, проверьте свободное пространство HDD с помощью команды disk free:

Если вы получаете что-то вроде этого :

затем эта проблема и теперь у вас есть решение!

начиная с mysql.носок хочет быть создан в mysql папка, которая почти всегда находится под корневой папкой, не смогла ее достичь из-за нехватки места.

Если вы периодически даете команду ls в каталоге mysql (в openSUSE 11.1 находится в /var/ lib / mysql), вы получите что-то вроде :

mysql.носок файл появляется и исчезает часто (вы должны попробовать выделить с ls, чтобы поразить экземпляр с mysql.носок файл на папку).

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • /var/lib/mysql/my.cnf

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

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

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

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

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

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

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

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

Неправильные права на файл /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) не существует, то создайте его:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

Этот мануал является частью серии статей по устранению неполадок и диагностике MySQL. Здесь мы рассмотрим некоторые общие проблемы, с которыми сталкиваются многие пользователи MySQL, и предоставим рекомендации по устранению конкретных ошибок. Также здесь вы найдете ссылки на другие мануалы и официальную документацию по MySQL, которые могут быть полезны в некоторых случаях.

MySQL управляет соединениями с сервером БД через сокет-файл, это специальный файл, который облегчает связь между различными процессами. Сокет-файл сервера MySQL называется mysqld.sock, в системах Ubuntu он обычно хранится в каталоге /var/run/mysqld/. Этот файл создается сервисом MySQL автоматически.

Иногда изменения в системе или в конфигурации MySQL приводят к тому, что MySQL не может прочитать сокет-файл. Из-за этого у вас могут быть проблемы с доступом к вашим базам данных. Наиболее распространенная ошибка сокета выглядит следующим образом:

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

Она может возникнуть по нескольким причинам. Существует несколько путей ее устранения.

Одна из основных причин этой ошибки заключается в том, что сервис MySQL остановлен или не запустился с самого начала. А это означает, что сервис просто не смог создать сокет-файл. Чтобы выяснить, является ли это причиной возникновения ошибки в вашем случае, попробуйте запустить сервис через systemctl:

sudo systemctl start mysql

Затем попробуйте снова получить доступ к командной строке MySQL. Если вы все еще получаете ошибку сокета, проверьте расположение, где ваша установка MySQL ищет сокет-файл. Эта информация есть в файле mysqld.cnf:

sudo nano /etc/mysql/mysql.conf.d/mysql.cnf

Найдите параметр socket в разделе [mysqld]:

. . .
[mysqld] user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/ mysqld.sock
port = 3306
. . .

Закройте файл. Затем убедитесь, что файл mysqld.sock существует, запустив команду ls в каталоге, где MySQL ищет этот файл:

ls -a /var/run/mysqld/

Если файл существует в этом каталоге, вы увидите его в выводе команды:

. .. mysqld.pid mysqld.sock mysqld.sock.lock

Если же файл не существует, возможно, причина в том, что MySQL пытается его создать, но не имеет для этого соответствующих прав. Вы можете передать все права на файл пользователю и группе mysql:

sudo chown mysql:mysql /var/run/mysqld/

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

sudo chmod -R 755 /var/run/mysqld/

Перезапустите MySQL, чтобы снова попытаться создать сокет-файл.

sudo systemctl restart mysql

Затем попробуйте получить доступ к командной строке MySQL еще раз. Если вы все еще сталкиваетесь с ошибкой сокета, вероятно, в вашем экземпляре MySQL существует более глубокая проблема. В этом случае вы должны просмотреть лог ошибок и поискать там какие-либо подсказки.

Этот мануал является частью серии статей по устранению неполадок и диагностике MySQL. Здесь мы рассмотрим некоторые общие проблемы, с которыми сталкиваются многие пользователи MySQL, и предоставим рекомендации по устранению конкретных ошибок. Также здесь вы найдете ссылки на другие мануалы и официальную документацию по MySQL, которые могут быть полезны в некоторых случаях.

MySQL управляет соединениями с сервером БД через сокет-файл, это специальный файл, который облегчает связь между различными процессами. Сокет-файл сервера MySQL называется mysqld.sock, в системах Ubuntu он обычно хранится в каталоге /var/run/mysqld/. Этот файл создается сервисом MySQL автоматически.

Иногда изменения в системе или в конфигурации MySQL приводят к тому, что MySQL не может прочитать сокет-файл. Из-за этого у вас могут быть проблемы с доступом к вашим базам данных. Наиболее распространенная ошибка сокета выглядит следующим образом:

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

Она может возникнуть по нескольким причинам. Существует несколько путей ее устранения.

Одна из основных причин этой ошибки заключается в том, что сервис MySQL остановлен или не запустился с самого начала. А это означает, что сервис просто не смог создать сокет-файл. Чтобы выяснить, является ли это причиной возникновения ошибки в вашем случае, попробуйте запустить сервис через systemctl:

sudo systemctl start mysql

Затем попробуйте снова получить доступ к командной строке MySQL. Если вы все еще получаете ошибку сокета, проверьте расположение, где ваша установка MySQL ищет сокет-файл. Эта информация есть в файле mysqld.cnf:

sudo nano /etc/mysql/mysql.conf.d/mysql.cnf

Найдите параметр socket в разделе [mysqld]:

. . .
[mysqld] user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
. . .

Закройте файл. Затем убедитесь, что файл mysqld.sock существует, запустив команду ls в каталоге, где MySQL ищет этот файл:

ls -a /var/run/mysqld/

Если файл существует в этом каталоге, вы увидите его в выводе команды:

. .. mysqld.pid mysqld.sock mysqld.sock.lock

Если же файл не существует, возможно, причина в том, что MySQL пытается его создать, но не имеет для этого соответствующих прав. Вы можете передать все права на файл пользователю и группе mysql:

sudo chown mysql:mysql /var/run/mysqld/

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

sudo chmod -R 755 /var/run/mysqld/

Перезапустите MySQL, чтобы снова попытаться создать сокет-файл.

sudo systemctl restart mysql

Затем попробуйте получить доступ к командной строке MySQL еще раз. Если вы все еще сталкиваетесь с ошибкой сокета, вероятно, в вашем экземпляре MySQL существует более глубокая проблема. В этом случае вы должны просмотреть лог ошибок и поискать там какие-либо подсказки.

В данном посте я заведу речь о, как в последствии оказалось, весьма наболевшей проблеме связанной с MySQL сервером установленным на машину под управлением операционной системы на базе ядра Linux. Для её решения мне пришлось убить не мало времени, но я всё же таки разобрался в чём же было дело и с радостью поделюсь секретом с Вами.

При этом файлы логов СУБД либо пусты, либо ничего дельного не сообщают по сути проблемы. Напомню на всякий случай, что лежат они в следующих местах:

  • /var/log/mysql.log
  • /var/log/mysql.err
  • /var/log/mysql/error.log

но это нам не понадобится.

Значит сейчас можно попробовать посмотреть объяснение системной ошибки через утилиту perror набрав в консоли следующее: perror 2

Кстати так же можно почитать информацию и про другие ошибки, которые могут встретиться на пути. В общем давайте идти дальше. Что же делать? Очевидно, что проблема с сокетом, который располагается по следующему адресу: /var/run/mysqld/mysqld.sock
Т.е. MySQL демон не может подключиться к Unix-сокету. А такое может произойти по 3-ём причинам:

  1. Его просто физически нет (не создан);
  2. Кто-то его уже занял;
  3. MySQL пользователь не может получить доступ к сокету по правам доступа.

Для проверки 2-ого варианта можно попробовать узнать, а не занимает ли кто-то этот файл?

В результате можем получить нечто подобное:

сразу видно, кто занял сокет. Или же получаем следующее:

    Создаём директорию, в которой должен лежать файл сокета:

После чего пытаемся запустить/рестартануть MySQL сервер.

В моём случае на этом всё не закончилось. Я для гарантии и большей проверки решил ещё и ребутнуть весь физический сервер. После чего увидел, что при попытке старта СУБД MySQL файл сокета почему то не создаётся. Сделал вывод, что у пользователя от которого работает сервер MySQL нет прав, другого быть не может. Пошёл в эту директорию и ещё раз сам вручную создал нужный сокет, заново дал необходимые права на папку. После этого последовала 13-ая ошибка, которая говорит, что у MySQL недостаточно прав на сокет, что бы его использовать в своих целях. Решил явно дать общие свободные права для всех так:

Теперь ошибка сменилась на 111-ую, что говорит о запрете доступа. В общем тут меня вообще накрыло, уже не знал, что и делать. Казалось бы всё перепробовал. Поиски по интернету перешли уже далеко за русскоязычный раздел, но толку было мало. Всё, тупик.

Итак давайте подведём итог. Куда смотреть в первую очередь и на, что обращать внимание.

Читайте также: