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


255

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

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

Есть ли решение для этой ошибки? Что может быть причиной этого?


Я ответил на это здесь, пожалуйста, проверьте ссылку ниже: stackoverflow.com/a/35577309/4773290
Pratik Patil

Ответы:


222

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


27
В этом случае вам, вероятно, следует проверить, действительно ли работает ваш сервер MYSQL.
Ян Тома

3
Вы также можете принудительно использовать сокет с параметром сокета (-S с / usr / bin / mysql) и принудительно использовать TCP / IP, указав порт (-P с / usr / bin / mysql.)
Kaoru

Использование полного сетевого имени, отличного от localhost, помогло мне. Просто убедитесь, что он объявлен в файле hosts на стороне клиента.
Фабьен Хаддади,

2
Примечание для пользователей cygwin: если клиент cygwin mysql пытается подключиться, например, к локальному серверу WAMP mysql, используйте -h <имя хоста, отличное от localhost>. Не пытайтесь создать файл mysql.sock и объявить его в любом файле my.cnf, он не будет работать.
Фабьен Хаддади,

Неправильное имя хоста дало мне точно такую ​​же ошибку. Глядя на /etc/hostsфайл в моем док-контейнере, я увидел имя хоста MySql mysql. Использование этого же имени хоста в моей конфигурации подключения решило проблему.
Стефан

188

Убедитесь, что ваш сервис MySQL работает

service mysqld start

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

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

mysql -u root

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

mysql -u root -p

5
о новых выпусках Debian: service mariadb startпотому что mariadb.org/debian-9-released-mariadb-mysql-variant
Захра

2
Дай этому парню медаль.
Сирадж Алам

Это был ответ для меня. Поскольку я использую mariadb, решением было запустить следующее: "sudo systemctl start mariadb". После этого все было хорошо.
Мохсен

Дайте @Zahra медаль
Ахмед C

28

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

socket=/var/lib/mysql/mysql.sock

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

mysqladmin -u root -p status

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

sudo chmod -R 777 /var/lib/mysql/

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


Это работает и для меня, но после того, как я обновился до последней версии, появилась эта проблема, могу ли я знать, почему это происходит?
Бен

sudo chmod -R 777 / var / lib / mysql / работал для меня с проблемой, с которой я столкнулся при запуске docker-контейнера mysql
user3152459

23

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


У меня была проблема, описанная выше, и это была проблема. Спасибо.
oshirowanen

3
Где это будет для Homebrew установить?
pal4life

19

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

Если вы найдете тот же файл в другом месте, используйте символическую ссылку:

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

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

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

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


переименование mysql.sock во что-то другое, затем перезапуск mysqld («перезапуск службы mysqld»), затем переименование чего-то другого обратно в mysql.sock работало для меня. Небольшой разброс в этом ответе, так что спасибо.
Нечеткий анализ

Этот ответ может помочь найти mysql.sockфайл
Нобита

15

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

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

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

mysql -u root -p

К вашему сведению, это работает и для CentOS 8.1. После установки mariadb-serverи mariadbне забудьте запустить, mysql_secure_installationчтобы очистить некоторые небезопасные настройки по умолчанию.
Дио Фунг

13

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

Даже после перезапуска службы mysqld, я все еще вижу сообщение об ошибке при попытке подключиться. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Проблема в том, как настроен клиент. Выполнение диагностики фактически покажет правильный путь к сокету. напримерps aux | grep mysqld

Работает:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

Не работает:

mysql -uroot -p
mysql -uroot -p -hlocalhost

Вы можете решить эту проблему, добавив ту же строку сокета в [client]разделе внутри конфигурации mysql.


13

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

[mysqld]

socket=/var/lib/mysql/mysql.sock 

[client]

socket=/var/lib/mysql/mysql.sock

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

mysql -u user -p база данных паролей -h host;


Единственно правильный ответ. Интересно, почему не хватает голосов.
CentAu

11

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

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

socket=/var/lib/mysql/mysql.sock  

Изменить на

socket=/opt/lampp/var/mysql/mysql.sock -u root

1
Привет Sekar, я ввел "find / -name my.cnf", и я получил два местоположения. 1) /opt/lampp/etc/my.cnf 2) /etc/mysql/my.cnf. Итак, какой из них использовать .. Я задал вопрос здесь .. stackoverflow.com/questions/32437796/…
Nana Partykar

7

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

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

$ sudo systemctl start mariadb

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

$ sudo systemctl start mysqld

Затем, чтобы начать MySQL,

$ mysql -u root -p

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

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


7

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

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

expire_logs_days = 10
max_binlog_size = 100M

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


Спасибо, я запускаю mysql на oracle virtualbox, и когда я сделал дамп своего bd, у меня не хватило места и я не смог запустить сервер mysql, когда я удалил файл дампа, я смог перезапустить сервер mysql.
JayCee

1
Это решило это для меня. Я установил для innodb_buffer_pool_size очень высокое значение для производственных сред, и это вызвало сбой mysql на моей виртуальной машине.
Бенджамин Бриззи

1
Я имел эту проблему при использовании phabricator и решение должно было измениться innodb_buffer_pool_sizeв my.cnf. Установка небольшого значения, как innodb_buffer_pool_size = 50Mэто хороший тест, чтобы отбросить эту гипотезу;)
Еркаламарино

Это была проблема, проверил все, кроме дискового пространства. Освободив пространство от / var, он вернулся!
Наджиб Мами,



4

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

mysql.server start

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

mysql -uroot

3

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

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

Постоянно получал

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

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

shutdown -r now

Надеюсь это поможет !!



3

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

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

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


2

Сначала введите «service mysqld start» и войдите


что ты хочешь сказать? Пожалуйста, прочитайте часто задаваемые вопросы, прежде чем задавать вопрос здесь
Freak

На этот вопрос успешно ответили три года назад. Этот точный ответ был дан более полно в прошлом году.
Кэрнарвон,

2

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

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

Прежде всего, добавьте источник сообщества mysql
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

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

Запустите это с systemctl: systemctl start mysqld


1

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

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

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

И никакого файла mysql.sock не было.

Это решение решило мою проблему, и MySQL снова заработал:

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

sudo su -

Бегать:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

Тестировать как root:

mysql -u root -p

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

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


1

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

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

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

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

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


1

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

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

[mysqld] socket = / var / lib / mysql / mysql.sock

[клиент] сокет = / var / lib / mysql / mysql.sock


1

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

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

Таким образом, вы должны указать хост так:

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $

1

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


Я использую хостинг-провайдера 1and1 и получил эту ошибку после ssh-на хосте. Исправление заключалось в том, чтобы просто указать имя хоста «mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520»
rob

1

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

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

На всякий случай, если кто-то считает, что это полезно


0

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

> mysql -u user -p --socket=/path/to/mysql5143.sock

0

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

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

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

 df 

если вы получаете что-то подобное:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

Тогда это проблема, и теперь у вас есть решение!

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

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

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

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

Это вызвано нехваткой места на диске.

Я надеюсь, что я помогу некоторым людям !!!! Спасибо!



0

Попробуйте первые 2, 3 решения. Ошибка все еще всплывающее окно & Если вы не можете найти/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

Проверьте доступное пространство в / var /

df

Если каталог заполнен, удалите некоторые ненужные файлы / каталоги

rm /var/cache/*

Вероятно, ваша проблема будет отсортирована сейчас.


0

Если вы находитесь в оболочке sf.net , попробуйте:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

Измените {LETTER} и {GROUP ID}, как показано в вашей базе данных MySQL профиля администратора проекта.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.