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

238

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

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

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

  • 0
    Я ответил на это здесь, пожалуйста, проверьте ссылку ниже: stackoverflow.com/a/35577309/4773290
Теги:
sockets
connect

32 ответа

192
Лучший ответ

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

  • 0
    Я все еще получил ошибку сохранения, используя 127.0.0.1 вместо loclahost
  • 24
    В этом случае вам, вероятно, следует проверить, действительно ли работает ваш сервер MYSQL.
Показать ещё 5 комментариев
177

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

service mysqld start

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

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

mysql -u root

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

mysql -u root -p
24

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

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

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

mysqladmin -u root -p status

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

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

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

  • 0
    Это работает и для меня, но после того, как я обновился до последней версии, появилась эта проблема, могу ли я знать, почему это происходит?
  • 0
    sudo chmod -R 777 / var / lib / mysql / работал для меня с проблемой, с которой я столкнулся при запуске docker-контейнера mysql
20

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

  • 0
    У меня была проблема, описанная выше, и это была проблема. Благодарю.
  • 3
    Где это будет для Homebrew установить?
17

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

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

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

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

su mysql

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

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

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

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

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

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

mysql -u root -p
  • 0
    Dreamhost в настоящее время не поддерживает mariadb ...
11

В моем случае я переместил файл сокета в другое место внутри /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 config.

10

Проверьте, запущена ли ваша служба 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/…
8

Просто отредактируйте /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;

  • 0
    Единственно правильный ответ. Интересно, почему не хватает голосов.
  • 0
    Только это правильно !!
7

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

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

expire_logs_days = 10
max_binlog_size = 100M

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

  • 0
    Спасибо, я запускаю mysql на oracle virtualbox, и когда я сделал дамп своего bd, у меня не хватило места и я не смог запустить сервер mysql, когда я удалил файл дампа, я смог перезапустить сервер mysql.
  • 1
    Это решило это для меня. Я установил для innodb_buffer_pool_size очень высокое значение для производственных сред, и это вызвало сбой mysql на моей виртуальной машине.
Показать ещё 2 комментария
5

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

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

$ sudo systemctl start mariadb

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

$ sudo systemctl start mysqld

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

$ mysql -u root -p

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

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

5

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

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
4

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

mysql.server start

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

mysql -uroot
4

Проверьте, работает ли еще одна служба mysql.

3

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

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

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

3

попробовать

echo 0 > /selinux/enforce
  • 1
    Это решило мою проблему :)
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

2

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

  • 0
    что ты хочешь сказать? пожалуйста, прочитайте часто задаваемые вопросы, прежде чем задавать вопрос здесь
  • 0
    На этот вопрос успешно ответили три года назад. Этот точный ответ был дан более полно в прошлом году.
2

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

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

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

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

Пробовал все методы, окончательно перезапустив сервер, исправил проблемы →

shutdown -r now

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

  • 1
    перезапуск службы mysqld делает то же самое
  • 0
    До сих пор не работает!
1

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

  • 0
    Я использую хостинг-провайдера 1and1 и получил эту ошибку после ssh-на хосте. Исправление заключалось в том, чтобы просто указать имя хоста "mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520"
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

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

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

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

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

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

1

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

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

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

И не существует файла mysql.sock.

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

Войдите в систему как пользователь root:

sudo su -

Run:

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

Проверить как root:

mysql -u root -p

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

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

  • 1
    команда systemctl не найдена
0

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

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

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

0

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

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

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

0

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

find /var/ -name mysql.sock

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

df

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

rm /var/cache/*

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

0

Мне пришлось отключить explicit_defaults_for_timestamp из my.cnf.

0

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

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

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

 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

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

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

[туздЫ] socket =/var/lib/mysql/mysql.sock

[клиент] сокет =/вар/Library/MySQL/mysql.sock

0

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

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

Просто дождь в ту же проблему - и вот, как я обратился к ней.

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

Самый простой способ адресовать это состоит в добавлении следующей строки в файл .my.cnf вашего профиля пользователя (в linux, который обычно находится под /home/myusername ):

socket=<path to the mysql socket file>

Если у вас нет файла .my.cnf, создайте его, содержащее следующее:

[mysql]
socket=<path to the mysql socket file>

В моем случае, поскольку я переместил папку данных mysql default (/var/lib/mysql) в другое место (/data/mysql), я добавил в .my.cnf следующее:

[mysql]
socket=/data/mysql/mysql.sock

Надеюсь, что это поможет.

-2

поэтому он сообщает вам, что они не могут найти файл сокета в папке '/var/lib/mysql/mysql.sock'

что вы сделаете, вам нужно подключить к нему файл mysql.sock, скорее всего, он находится в /tmp/mysql.sock, если файл не существует, создайте его, используя

touch /tmp/mysql.sock

а затем выполните

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

Обратите внимание, что внутри /var/lib нет директории mysql

mkdir mysql

обновите приложение

  • 0
    какая-либо причина для понижения? :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню