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

193

Моя проблема началась с того, что я не смог войти в систему как root в мою установку mysql. Я пытался запустить mysql без включения паролей... но всякий раз, когда я запускал команду:

    # mysqld_safe --skip-grant-tables &

Я бы никогда не получил подсказку назад... (я пытался следовать инструкциям здесь: http://www.cyberciti.biz/tips/recover-mysql-root-password.html) Экран выглядит примерно так:

 root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
 120816 11:40:53 mysqld_safe Logging to syslog.
 120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

и я не получаю приглашение на ввод команд sql на reset пароль.

Когда я убиваю его, выполняя CTRL + C, я получаю следующее сообщение:

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

Убедитесь, что mysqld запущен и что сокет: '/var/run/mysqld/mysqld.sock' существует!

Если я повторю команду и оставлю ее достаточно долго, я получаю следующую серию сообщений:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

Но тогда, если я попытаюсь войти в систему как root, сделав:

# mysql -u root

Появляется следующее сообщение об ошибке:

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

Я проверил и /var/run/mysqld/mysqld.sock файл не существует. Папка делает, но не файл.
Кроме того, я не знаю, помогает ли это, или нет, но я нашел find / -name mysqld, и он придумал:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

Я просто знаком с linux и mysql, поэтому я не знаю, нормально это или нет. Но я включаю эту информацию на случай, если это поможет...

** Наконец-то я решил удалить и переустановить mysql. **

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

После повторной установки всех пакетов в том же порядке, что и выше, во время установки phpmyadmin он дал мне ту же ошибку -

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

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

 /var/lib/mysql 
 /var/lib/mysql/mysql
 /var/log/mysql
 /usr/lib/perl5/DBD/mysql
 /usr/lib/perl5/auto/DBD/mysql
 /usr/lib/mysql
 /usr/bin/mysql
 /usr/share/mysql
 /usr/share/dbconfig-common/internal/mysql
 /etc/init.d/mysql
 /etc/apparmor.d/abstractions/mysql
 /etc/mysql

Затем я попытался снова установить mysql-server, mysql-client. Но я заметил, что это не подсказывает мне пароль. Разве он не должен запрашивать пароль администратора?

Показать ещё 2 комментария
Теги:

32 ответа

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

Чтобы найти все файлы сокетов в вашей системе:

sudo find / -type s

Моя серверная система Mysql открывала сокет в /var/lib/mysql/mysql.sock

Как только вы обнаружите, где сокет открывается, добавьте или отредактируйте строку в файле /etc/my.cnf с помощью пути к файлу сокета:

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

Иногда запуск системы script, запускающий исполняемый файл командной строки, указывает флаг --socket=path. Этот флаг может переопределить местоположение my.cnf, и это приведет к тому, что сокет не будет найден, где файл my.cnf указывает, что он должен быть. Затем, когда вы пытаетесь запустить клиент командной строки mysql, он будет читать my.cnf, чтобы найти сокет, но он не найдет его, поскольку он отклоняется от того, где его создал сервер. Итак, если вы не заботитесь о том, где находится сокет, нужно просто изменить my.cnf для соответствия.

Затем остановите процесс mysqld. Как вы это сделаете, зависит от системы.

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

  • service mysqld stop
  • /etc/init.d/mysqld stop
  • mysqladmin -u root -p shutdown
  • Некоторые системы не настроены так, чтобы иметь элегантный способ остановить mysql (или по какой-то причине mysql не отвечает), и вы можете принудительно завершить mysql:
    • Один шаг: pkill -9 mysqld
    • Два шага (наименее предпочтительные):
      • Найти идентификатор процесса mysql с помощью pgrep mysql или ps aux | grep mysql | grep -v grep
      • Предполагая, что идентификатор процесса 4969 завершен с помощью kill -9 4969

После этого вы можете искать pid файл в /var/run/mysqld/ и удалять его

Убедитесь, что разрешения на ваш сокет таковы, что любой пользовательский mysqld работает, как может читать/писать на него. Легкий тест заключается в том, чтобы открыть его до полного чтения/записи и посмотреть, все ли работает:

chmod 777 /var/run/mysqld/mysqld.sock

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

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

  • 14
    Пожалуйста, не рекомендуйте использовать kill -9 ; Есть несколько способов, которые следует попробовать, прежде чем он достигнет этого.
  • 0
    @ не запускайте это в корне файла 'find. -name mysqld.sock '. Я видел файл сокета в других местах, кроме / var / run. Как только вы найдете его, вам может понадобиться отредактировать файл my.cnf, указав, где он находится.
Показать ещё 12 комментариев
157

Попробуйте эту команду,

sudo service mysql start
  • 0
    +1 my.cnf указывал на нужные каталоги, по службе mysql умер
  • 1
    оно работает. большое спасибо
Показать ещё 9 комментариев
61

Эта ошибка возникает из-за множества установок mysql. Выполните команду:

ps -A|grep mysql

Убейте процесс, используя:

sudo pkill mysql

а затем выполните команду:

ps -A|grep mysqld

Также убейте этот процесс, выполнив:

sudo pkill mysqld

Теперь вы полностью настроены, просто запустите следующие команды:

service mysql restart
mysql -u root -p

У вас очень хорошо работает mysql снова

  • 0
    Привет, ребята, я бегал по сети, пытаясь это исправить. Моя проблема была в том, что я пытался настроить докер. Я хотел, чтобы он использовал каталог данных mysql, который ранее использовался mysql вне docker ... эта команда ps была лучшей!
  • 7
    Я столкнулся с той же проблемой. Это решение помогло мне. Спасибо человеку
Показать ещё 6 комментариев
30

Решение проще.

  • Сначала вам нужно найти (в терминале с "sudo find/-type s" ), где находится ваш файл mysql.sock. В моем случае это было в /opt/lampp/var/mysql/mysql.sock
  • Запуск терминала и выпуск sudo Nautilus
    Это запустит ваш менеджер файлов с привилегиями суперпользователя.
  • От Nautilus перейдите туда, где находится ваш mysql.sock файл
  • Щелкните правой кнопкой мыши файл и выберите "Сделать ссылку"
  • Переименуйте файл ссылки в mysqld.sock, затем щелкните правой кнопкой мыши на файле и вырежьте его
  • Перейдите в /var/run и создайте папку с именем mysqld и введите
  • Теперь щелкните правой кнопкой мыши и вставьте файл ссылки.
  • Voila! Теперь у вас будет mysqld.sock файл /var/run/mysqld/mysqld.sock:)
  • 2
    Как вы находите файл mysql.sock? Я попытался найти / -name 'mysql.sock', но ничего не возвращает.
  • 2
    @MatthewLock Прежде всего, убедитесь, что mysql запущен (с помощью «ps aux | grep mysql»), иначе mysql.sock не появится. Во-вторых, используйте «sudo find / -type s», который дает вам все сокеты в вашей системе для поиска mysql.sock
Показать ещё 6 комментариев
14

Просто нужно запустить MySQL-сервис после установки:

Для Ubuntu:

sudo service mysql start;

Для CentOS или RHEL:

sudo service mysqld start;
  • 0
    Сначала проверьте этот sudo systemctl status mysql.service и sudo systemctl start mysql.service . Это работает для меня
11

Хорошо скопируйте и вставьте эти коды: это должно быть сделано в терминале, внутри сервера, когда ваша база данных mysql установлена ​​неправильно, и когда вы получаете эту ошибку: "Не удается подключиться к локальному серверу MySQL через socket '/var/run/mysqld/mysqld.sock' (2) '.

Остановить MySql

sudo /etc/init.d/mysqld stop

Перезапустить или запустить его

sudo /etc/init.d/mysqld restart or sudo /etc/init.d/mysqld start

Сделайте ссылку, подобную этой, и отдайте ее системе

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

Запустите безопасную установку, которая поможет вам выполнить весь процесс, необходимый для настройки mysql

/usr/bin/mysql_secure_installation
  • 0
    я получаю то же самое Can't connect ошибкой при попытке запустить вышеуказанную команду
9

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

Я думаю, из-за того, что библиотеки sql-библиотек/пакетов обновляют эту ошибку, поэтому попробуйте это, если вы выполняете некоторую модернизацию:)

  • 1
    Я сделал это после переустановки (или обновления), и теперь это работает. Нет больше сообщения сокета. Спасибо!
7

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

sudo service mysql restart
  • 0
    Это сработало для меня. Спасибо.. :)
6

В Ubuntu есть ошибка с MySQL 5.6 и 5.7, где var/run/mysqld/ исчезает всякий раз, когда служба MySQL останавливается или перезагружается. Это предотвращает запуск MySQL. Обнаружено это обходное решение, которое не является совершенным, но, по крайней мере, оно запускается после остановки/перезагрузки:

mkdir /var/run/mysqld/
chown mysqld /var/run/mysqld/
  • 0
    спасибо - исправил это для меня, мне пришлось переделывать каталог и менять владельца при каждом перезапуске службы mysql - не смог найти где-либо официально сообщенную ошибку, иначе я бы разместил ссылку здесь :)
  • 1
    Не пробовал, но, возможно, это поможет вам: создайте новый файл /etc/tmpfiles.d/mysql.conf: # systemd tmpfile settings for mysql # See tmpfiles.d(5) for details а затем, d /var/run/mysqld 0755 mysql mysql - После перезагрузки mysql должен запускаться нормально. Это из bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1435823 , комментарий 3. Если у вас возникла эта проблема с MySQL 5.7, прокомментируйте Launchpad. Чем больше пользователей решат проблему, тем больше внимания она получит.
Показать ещё 2 комментария
5

Ответ на шаг загрузки пользователя сработал у меня. Иногда нужно отредактировать файл в /etc/mysql/my.cnf добавить строку клиенту

[client]
password = your_mysql_root_password
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock
  • 0
    Это дает мне: mysql: unknown variable 'Host=127.0.0.1'
  • 0
    @Splaktar: есть опечатка. Host должен быть в нижнем регистре host , и он будет работать. Также это решение сработало для меня.
Показать ещё 1 комментарий
4

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

<сильные > решения

наконец, удалите и переустановите mysql. **

  • sudo apt-get удалить mysql-сервер
  • sudo apt-get удалить mysql-client
  • sudo apt-get удалить mysql-common
  • sudo apt-get удалить phpmyadmin

затем снова установите

  • sudo apt-get install mysql-server-5.6

После этой операции будет использовано 164 МБ дополнительного дискового пространства.

  • Вы хотите продолжить? [Y/n] Y нажмите YES для полной установки.

...... .......

  • Наконец, вы получите эти строки....

    Настройка libhtml-template-perl (2.95-1)...

    Настройка mysql-common-5.6 (5.6.16-1 ~ exp1)... Обработка триггеров для libc-bin (2.19-0ubuntu6) Триггеры обработки для ureadahead (0.100.0-16)...

  • И затем

    root @ubuntu1404: ~ # mysql -u root -p (для каждого пароля сначала u следует использовать)

  • Введите пароль:

  • Примечание. Введенный пароль должен быть таким же, как время установки пароль mysql (например,.root, system, admin, rahul и т.д.)

    Затем введите

  • ИСПОЛЬЗОВАТЬ rahul_db (имя базы данных);

Спасибо. **

  • 0
    пожалуйста, улучшите качество ответа
  • 0
    Это работало для меня из-за нескольких установленных версий MySQL. также удалите mysql-server-5.6/5.5, mysql-client-5.6/5.5 . Спасибо!
3

Может быть, кто-то столкнулся с этой проблемой. Я использую Mysql Workbench на Ubuntu 14 и получил эту ошибку.

mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) when trying to connect

Найдите файл сокета, запустив sudo find / -type s, в моем случае это было /run/mysqld/mysqld.sock

Итак, я только что создал ссылку на этот файл в каталоге tmp.

sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
  • 0
    он удаляется при перезагрузке ...
  • 0
    Как вы можете видеть, файл находится в папке /tmp поэтому он будет точно удален. Вы можете изменить .sock файла .sock . Смотрите @ user3002884 ответ.
Показать ещё 1 комментарий
2

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

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

[client]
socket=/var/lib/mysql/mysql.sock <= this path should be also same as is[mysqld]

И перезапустите службу с помощью: service mysql restart

это сработало для меня

2

У меня была эта проблема только на Ubuntu 14.10

Поверяет, что mysql-server больше не установлен (каким-то образом он был удален), но я не мог просто установить его, потому что были некоторые сломанные пакеты и проблемы/конфликты.

В конце концов мне пришлось переустановить mysql

sudo apt-get remove mysql-client
sudo apt-get install mysql-server
2

вы можете найти mysqld.sock в /var/run/mysqld, если вы уже установили mysql-server sudo apt-get install mysql-server

1

Это уже упоминалось пару раз, но это сразу же помогло мне:

служба mysql restart

  • 0
    Интересно, чем это отличается от использования простой команды «mysql»?
1

Я бы также проверить конфигурацию mysql. Я столкнулся с этой проблемой с моим собственным сервером, но я был слишком поспешным и неправильно сконфигурировал innodb_buffer_pool_size для моей машины.

innodb_buffer_pool_size = 4096M

Обычно он работает нормально до 2048, но, я думаю, у меня нет памяти, необходимой для поддержки 4 концертов.

Я предполагаю, что это также может произойти с другими настройками конфигурации mysql.

1

Для меня работала host до 127.0.0.1.

Отредактируйте файл в /etc/mysql/my.cnf и добавьте указанную ниже строку в раздел: client

[client]
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock

После этого вы закончите. Выполните следующую команду.

sudo service mysql start
  • 0
    Это мой друг, помог мне :)
1

Если в вашей системе имеется множество баз данных и таблиц, и если у вас есть innodb_file_per_table, установленный в my.cnf, то на вашем сервере mysql могут быть запущены открытые объекты/файлы (или, скорее, дескрипторы для этих объектов ) Задайте новое максимальное число с помощью

open-files-limit = 2048

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

1

В моем случае выполнялись два процесса mysqld. убил необязательные процессы, используя pkill -9 mysqld

  • 0
    Мне нужно было добавить «sudo», чтобы убить процесс.
0

Я удалил mysql в Ubuntu 16.04 https://askubuntu.com/questions/172514/how-do-i-uninstall-mysql

Я переустановил mysql https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-16-04

Казалось, это сработало.

0

Файл mysql.sock создается, когда MariaDB запускается и удаляется при завершении работы MariaDB. Он не будет существовать, если MariaDB не работает. возможно, вы не установили MariaDB. ВЫ МОЖЕТЕ ПОЛУЧИТЬ ИНСТРУКЦИЮ НИЖЕ: https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 ЛУЧШИЙ

0

У меня была аналогичная проблема на CentOS VPS. Если MySQL не запускается или продолжает сбой сразу после его запуска, выполните следующие действия:

1) Найдите файл my.cnf(мой был расположен в /etc/my.cnf) и добавьте строку:

innodb_force_recovery = X

заменив X числом от 1 до 6, начиная с 1, а затем увеличивая, если MySQL не запустится. Установка на 4, 5 или 6 может удалить ваши данные, поэтому будьте внимательны и прочитайте http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html раньше.

2) Перезапустите службу MySQL. Выполняется только SELECT, и это нормально в данный момент.

3) Дамп всех ваших баз данных/схем с помощью mysqldump один за другим, не сжимайте дампы, потому что в любом случае вам придется распаковать их позже.

4) Переместите (или удалите!) только каталоги bd внутри /var/lib/mysql, сохранив отдельные файлы в корне.

5) Остановите MySQL, а затем раскомментируйте строку, добавленную в 1). Запустите MySQL.

6) Восстановите все bd, сброшенные в 3).

Удачи!

0

В моем случае проблема заключалась в адресах привязки в /etc/mysql/my.cnf, а затем:

nano/etc/mysql/my.cnf

найдите адреса привязки и удалите их с помощью хоста ip (а не 127.0.0.1)

0

Я попробовал почти все перечисленные решения, никто не работал у меня, пока я не перезапустил машину, а затем перезапустил сервер mysql, когда я выпустил команду "service mysql restart".

0

У меня была такая проблема, когда я изменял размер капли на digitalocean. Я обновил версию mysql и работал у меня. Вот учебник, который я применил - https://serverpilot.io/community/articles/how-to-upgrade-mysql-5.5-to-5.6-on-ubuntu-14.04.html

0

на archlinux Я столкнулся с этой ошибкой, и проблема заключалась в том, что служба mysqld не выполнялась.

Однако я не смог включить mysql-сервис с systemctl start mysqld, как указано в документации Archlinux. Я думаю, что ошибка была что-то вроде

mysqld.service не найден

Сначала мне нужно было перезапустить систему.

Затем я снова ввел команду (и ввел systemctl enable mysqld), и теперь mysql смог найти созданный mysql.sock.

0

Я запускаю свой MySQL на виртуальной машине в Ubuntu. Так что случилось, когда я перезапустил мой хост и VM, IP изменился. Я настроил mysql для запуска на IP 192.168.0.5 и теперь из-за динамического распределения IP, мой новый IP был 192.168.0.8

Если у вас есть такая же проблема, просто проверьте свой ip с помощью команды ifconfig.

Проверьте привязку MySQL с помощью команды cat /etc/mysql/my.cnf | grep bind-address

Если оба IP являются одинаковыми, переустановите сервер mysql

Если нет, то измените свой IP-адрес на /etc/network/interfaces с помощью nano, vi, vim или чего-либо из ваших предпочтений.

Я предпочитаю sudo nano /etc/network/interfaces

и введите следующие

auto eth0
iface eth0 inet static
address 192.168.0.5
netmask 255.255.255.0

Сохраните файл интерфейсов, перезагрузите интерфейс sudo ifdown eth0 && & sudo ifup eth0 замените "eth0" на сетевой интерфейс

Перезагрузите MySQL sudo service mysql stop, а затем sudo service mysql start

Если у вас есть такая же проблема, как у меня, вам хорошо идти!

-2

В лампочке, как я узнаю, он не идентифицирует команды mysql. попробуйте

sudo /opt/lampp/bin/mysql

он откроет терминал mysql, где вы сможете общаться с базами данных.

-2

Это решение может помочь другим, иногда исправление очень просто.

В вашей рабочей среде перезапустите сервер mysql и apache

sudo service mysql restart
sudo apache services restart

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

-2

Ошибка: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Иногда это происходит из-за того, что сервер mysql опускается, на реальном сервере, я думаю, вам нужно перезапустить сервер, а также в localhost вам нужно перезапустить сервер mysql.

-2

найти файл my.cnf с помощью mysql config my был в /etc/mysql/my.cnf(измените место, где он говорит сокет соответственно)

port            = 3306
socket          = /tmp/mysql.sock

Вот записи для некоторых конкретных программ Следующие значения предполагают, что у вас есть как минимум 32M ram

Это было официально известно как [safe_mysqld]. Обе версии в настоящее время разобраны.

[mysqld_safe]
socket          = /tmp/mysql.sock
nice            = 0
Сообщество Overcoder
Наверх
Меню