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

305

У меня возникла большая проблема с подключением к mysql. Когда я запускаю:

/usr/local/mysql/bin/mysql start

У меня есть следующая ошибка:

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

У меня есть mysql.sock в каталоге /var/mysql.

В /etc/my.cnf у меня есть:

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

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

и /etc/php.ini у меня есть:

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /var/mysql/mysql.sock

Я перезапустил apache с помощью sudo /opt/local/apache2/bin/apachectl restart

Но у меня все еще есть ошибка.

В противном случае, я не знаю, соответствует ли это, но когда я делаю mysql_config --sockets, я получаю

--socket         [/tmp/mysql.sock]
  • 48
    MySQL работает?
  • 0
    Я бы добавил @David, вы должны посмотреть журнал MySQL, чтобы увидеть, работает ли сервер на самом деле или он сломался / не готов принимать соединения.
Показать ещё 10 комментариев
Теги:

35 ответов

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

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

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

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

mysqladmin -u root -p status

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

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

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

  • 10
    Это помогло мне после того, как я выполнил шаги выше и перезапустил службу mysqld .
  • 11
    Было бы лучше, если бы вы установили разрешения на 755, чтобы только владелец каталога мог писать в него.
Показать ещё 9 комментариев
76

Вы уверены, что вы установили mysql, а также сервер mysql.

Например, чтобы установить сервер mySql, я буду использовать yum или apt для установки инструмента командной строки mysql и сервера:

yum -y install mysql mysql-server (or apt-get install mysql mysql-server)

Включить службу MySQL:

/sbin/chkconfig mysqld on

Запустите сервер MySQL:

/sbin/service mysqld start

после этого установите пароль администратора MySQL:

mysqladmin -u root password 'new-password' (with the quotes)

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

  • 0
    Я использовал homebrew, и он работал как шарм: brew install mysql
  • 2
    Я уже установил клиент, мне нужна была команда sudo apt-get install mysql-server тогда жизнь была хорошей
Показать ещё 1 комментарий
61

Быстрое обходное решение, которое сработало для меня: попробуйте использовать локальный IP-адрес (127.0.0.1) вместо "localhost" в mysql_connect(). Это "заставляет" php подключаться через TCP/IP вместо Unix-сокета.

  • 0
    Это сработало ... но почему? Разве MySQL не разрешает localhost и не получает 127.0.0.1 прежде чем даже попытаться подключиться?
  • 3
    нет ... при использовании localhost вы не используете интернет-сокет. Вы используете сокет IPC. en.wikipedia.org/wiki/Unix_domain_socket . 127.0.0.1 - это локальный шлейф, который означает, что запрос не будет покидать вашу машину, но он будет использовать TCP / IP, поэтому он медленнее ...
Показать ещё 6 комментариев
46

Я получил следующую ошибку:

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

Пробовал несколько способов и, наконец, решил это следующим образом.

sudo gksu gedit /etc/mysql/my.cnf

изменен

#bind-address       = 127.0.0.1

to

bind-address        = localhost

и перезапущен

sudo /etc/init.d/mysql restart

он работал

19

Убедитесь, что вы используете mysqld: /etc/init.d/mysqld start

  • 2
    Или sudo service mysql start|restart для Ubuntu.
18

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

shutdown -h now

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

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

mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

service mysqld start

Перезапуск службы создает новую запись с именем mqsql.sock

8

Другим обходным решением является редактирование /etc/my.cnf и включение узла в раздел [клиент]

 [client]
 #password       = your_password
 host            = 127.0.0.1
 port            = 3306
 socket          = /var/run/mysql/mysql.sock

И затем перезапустите службу mysql.

Этот обходной путь был протестирован в: Версия сервера: 5.5.25a-log Распределение источников

  • 0
    рекомендуется добавить раздел [client], если его еще нет в my.cnf
7

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

Например, на Ubuntu вы должны проверить /var/log/syslog. Поскольку в этот файл также может входить множество других вещей, вы, вероятно, захотите использовать grep для просмотра сообщений mysql и tail для просмотра только последних. Все это может выглядеть так:

grep mysql /var/log/syslog | tail -50

Не слепо вносить изменения в свою конфигурацию, потому что кто-то сказал: "Это работало для моей системы". Выясните, что на самом деле не так с вашей системой, и вы получите лучший результат намного быстрее.

  • 4
    +1 Для того, чтобы сделать шаг назад и указать на то, что многие другие ответы даже не учли - что на самом деле увидеть, что приложение может сообщить о проблеме, гораздо лучше, чем слепо торопиться и вносить изменения, которые не могут даже быть применимым ...!
  • 0
    Ах, значит, он использует неправильный .cnf . Что объясняет его. Теперь я могу перестать пробовать случайные вещи и заняться реальной проблемой. Благодарю.
6

Если все работает отлично, и вы только начали видеть эту ошибку, прежде чем делать что-либо еще, убедитесь, что вы не находитесь на диске:

df -h

Если объем, в котором создается mysql.sock, используется на 100%, MySql не сможет его создать, и это станет причиной этой ошибки. Все, что вам нужно сделать, это удалить то, что вам не нужно, например старые файлы журналов.

6

У меня была такая же проблема, и это было вызвано обновлением драйверов mysql при запуске сервера mysql. Я исправил его, просто перезапустив mysql и apache2:

sudo service mysql stop

sudo service mysql start

sudo service apache2 stop

sudo service apache2 start

  • 0
    В моем случае mysql не работал. Я запустил sudo service mysql start после запуска sudo service mysql status чтобы убедиться, что он не запущен.
5
sudo service mysql start

Это должно служить вам просто прекрасно. Возможно, вы изменили некоторые команды, которые повлияли на конфигурации mysql.

  • 0
    или systemctl start mariadb.service в Fedora 22 или RedHat 7. После этого можно установить пароль root.
5

В моем случае я использовал Centos 5.5. Я обнаружил, что проблема в том, что служба mysql была остановлена ​​как-то. Поэтому я начал службу mysql с помощью команды:

 /etc/init.d/mysqld start

Итак, глупая ошибка.

4

Я получил эту ошибку, когда задал задание cron для своего файла. Я изменил разрешения файла на 777, но он по-прежнему не работал у меня. Наконец, я получил решение. Может быть, это будет полезно для других.

Попробуйте выполнить эту команду:

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

Помните, что -h означает хост и -p означает порт.

  • 0
    Принудительное соединение через TCP / IP вместо использования сокета неэффективно (и требует, чтобы вы включили поддержку localhost TCP / IP на сервере, как было в предыдущем ответе ). Лучше ответ от 2011 года: настройте сервер так, чтобы вы могли правильно использовать сокет.
  • 8
    -p не означает порт , это означает пароль , вы перепутали его с -P
Показать ещё 2 комментария
4

попробуйте с -h (host) и -P (порт):

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

4

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

  • 0
    Как добавить символическую ссылку, если приложение считало, что оно должно быть там, где оно было на самом деле?
3

Есть много решений этой проблемы, но для моей ситуации мне просто нужно исправить DATE на машине/сервере (сервер Ubuntu 16.04).

i) Проверьте дату своего сервера и исправьте его.

ii) Запустите sudo /etc/init.d/mysql restart

Это должно начаться.

3

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


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

Официальное имя хоста, которое вы должны использовать для подключения к вашей учетной записи Экземпляр базы данных MySQL изменился с mysql.server на yourusername.mysql.pythonanywhere-services.com. Это обходит часть нашей инфраструктуры, которая начала показывать проблемы в последнее время недель, и он должен быть намного более эффективным и надежным, чем старый путь.

Следовательно, вам нужно будет обновить ваше имя хоста до значения, выделенного выше.

3

Для тех, чье решение не работает, попробуйте:

cd /etc/mysql

проверить, присутствует ли my.cnf

nano my.cnf

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

bind-address = 127.0.0.1

Если нет, это может быть проблемой, просто выйдите из nano и сохраните файл.

и service mysql start

обратите внимание, что если у вас нет nano (его текстовый редактор), просто установите его с помощью apt-get install nano и один раз нажмите Ctrl + X для выхода, не забудьте сказать Y, чтобы сохранить и использовать тот же файл)

  • 0
    К сожалению, это не сработало. Это просто говорит о том, что только локальный компьютер может получить доступ к mysql. Нет удаленных подключений.
3

Если вы используете версию AVS (Amazon Web Services) Micro, то это проблема с памятью. Когда я бежал

mysql

с терминала он скажет

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

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

service mysqld restart

После долгих поисков я обнаружил, что вам нужно создать файл подкачки для MySQL, чтобы иметь достаточно памяти. Инструкции перечислены: http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html.

Затем я смог перезапустить mysqld.

  • 0
    У меня была такая же проблема на экземпляре «микро» сервера AWS, и я могу подтвердить, что создание файла подкачки DID исправило «ОШИБКА 2002 (HY000): невозможно подключиться к локальному серверу MySQL через сокет / var / run / mysqld / mysqld .sock '(111) "проблема. Спасибо @ jth_92!
3

Я также обнаружил, что это проблема с разрешениями. Я сравнивал файлы MySQL с рабочей установкой (как с Debian 6), так и с изменениями прав собственности (где mydatabase - любая имеющаяся у вас база данных).

Собственность mysql:mysql:

chown mysql:mysql /var/lib/mysql
chown mysql:mysql /var/lib/mysql/ib*
chown mysql:mysql /var/lib/mysql/mydatabase
chown mysql:mysql /var/lib/mysql/mydatabase/*
chown mysql:mysql /var/lib/mysql/mysql/* 

Собственность mysql:root:

chown mysql:root /var/lib/mysql/mysql
chown mysql:root /var/run/mysqld 

Собственность mysql:adm:

chown mysql:adm /var/log/mysql
chown mysql:adm /var/log/mysql.err
chown mysql:adm /var/log/mysql.log* 
3

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

mysql --socket=/var/mysql/mysql.sock 

Это будет работать, даже если расположение файла сокета указано в другом месте в файле my.cnf.

2

CentOS 7, 64 бит. Свежая установка.
В моем случае ошибка состояла в том, что у меня не было подходящего MySQL-сервера и MySQL-клиента.
Используя yum, я удалил mariadb и mysql-community edition. Я загрузил rpm для клиента и сервера из официального сайта MySQL и установил сервер и клиент.

При установке сервера мне было показано сообщение о том, что пароль для учетной записи root для MySQL хранился в файле, который я мог просматривать с помощью sudo cat /root/.mysql_secret.

Итак, после установки клиента и сервера, я проверил, работает ли MySQL (я думаю, что я перезагрузился до этого) с помощью команды sudo service mysql status, и я получил результат.

Работа MySQL (2601) [OK]

Я вошел в MySQL, используя пароль из файла .mysql_secret:
mysql -uroot -pdxM01Xfg3DXEPabpf. Обратите внимание, что dxM01Xfg3DXEPabpf - это пароль, указанный в файле .mysql_secret.

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

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');

С тех пор все отлично работало.

  • 1
    тот же случай на RHEL6U6 с версией сервера: 5.6.23-enterprise-commercial-advanced.
2

Сегодня я столкнулся с этой проблемой. Ни один из этих ответов не дал исправления. Мне нужно было выполнить следующие команды (здесь https://stackoverflow.com/questions/4757589/how-to-enable-innodb-in-mysql) для запуска моей службы mysql:

sudo /etc/init.d/mysql stop
cd /var/lib/mysql/
ls ib_logfile*
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
... etc ...
/etc/init.d/mysql restart

Отчасти это было отмечено следующими ошибками в /var/log/mysql/error.log:

140319 11:58:21 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
140319 11:58:21 [ERROR] Plugin 'InnoDB' init function returned error.
140319 11:58:21 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140319 11:58:21 [ERROR] Unknown/unsupported storage engine: InnoDB
140319 11:58:21 [ERROR] Aborting

Я также видел полную ошибку на диске, но только при запуске команд без sudo. Если проверка разрешений не удалась, она сообщает полный диск (даже если ваш раздел даже не близок к полной).

2

Это было достаточно для меня

sudo /etc/init.d/mysql restart
2

Добавление

--protocol=tcp 

в список поддерживаемых вами графиков в вашем соединении.

1

Для меня - это был просто случай, когда MySQL долгое время загружался. У меня более 100 000 таблиц в одной из моих баз данных, и это в конечном итоге началось, но, очевидно, в этом случае требуется много времени.

1

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

/usr/sbin/mysqld --verbose --help 1>/dev/null

У меня появилась одна ошибка:

160816 19:24:33 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1-log) starting as process 9461 ...
160816 19:24:33 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160816 19:24:33 [Note] Plugin 'FEDERATED' is disabled.
160816 19:24:33 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb-online-alter-log-max-size=4294967296'
160816 19:24:33 [ERROR] Aborting

Простой grep -HR "innodb-online-alter-log-max-size" /etc/mysql/ показал мне, какой именно файл содержит оскорбительную строку, поэтому я удалил эту строку из файла.

Затем, проверяя мой файл /var/log/mysql/error.log, который у меня был:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 671088640 bytes!
160816 22:46:46 [ERROR] Plugin 'InnoDB' init function returned error.
160816 22:46:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160816 22:46:46 [ERROR] Unknown/unsupported storage engine: InnoDB
160816 22:46:46 [ERROR] Aborting

На основе этого вопроса принятое решение не сработает, потому что я даже не мог запустить сервер, поэтому я следил за тем, что некоторые из комментариев сказали и удалили мои файлы /var/lib/mysql/ib_logfile0 и /var/lib/mysql/ib_logfile1.

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

160816 22:52:15  InnoDB: Error: page 1415 log sequence number 82039318708
InnoDB: is in the future! Current system log sequence number 81640793100.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.

Исходя из предложения здесь, чтобы исправить это, я выполнил mysqldump и восстановил все базы данных (см. ссылку для нескольких других решений).

$ mysqldump -u root -p --allow-keywords --add-drop-database --comments --hex-blob --opt --quote-names --databases db_1 db_2 db_3 db_etc > backup-all-databases.sql
$ mysql -u root -p < backup-all-databases.sql

Теперь все работает как ожидается.

  • 0
    Проверка /var/log/mysql/error.log помогла в моем случае. Была [ERROR] Can't init tc log который был быстро исправлен с помощью следующего ответа: dba.stackexchange.com/a/185006/163583
1
sudo service mysqld start

Работал для меня, я использую Centos

1

Я использовал 127.0.0.1 для -h вместо localhost, и все было в порядке. В другом случае было то, что было - ошибка выше.

0

Если кто-то ищет ошибку Intialization

Невозможно подключиться к базе данных "/var/run/mysql/mysql.sock"

При запуске civicrm и drupal просто сделайте ниже изменения в

settings.php и civicrm.settings.php

только в тех местах, где вы пытаетесь установить соединение db

localhost до 127.0.0.1 # локальная установка

0

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

0

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

sudo /etc/init.d/mysql start
0

Я удалил файл mysql.sock, и он сработал. Ввод прав на него вообще не работал. Ни перезапуск, ни другое...

0

У меня была эта ошибка сокета, и это в основном сводилось к тому, что MySQL не работал. Если вы запустите новую установку, убедитесь, что вы установили 1) системный пакет и 2) установщик панели (mysql.prefPane). Установщик панели позволит вам перейти к вашим системным настройкам и открыть MySQL, а затем запустить экземпляр.

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

Также следует отметить, что я, по-видимому, имел предыдущие версии MySQL, но удалил панель, что упростило получение экземпляра MySQL для пользователей Mac.

Хорошая ссылка для этого процесса переустановки: http://www.coolestguyplanettech.com/how-to-install-php-mysql-apache-on-os-x-10-6/

-2

Измените файл конфигурации /etc/mysql/my.cnf:

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

Ещё вопросы

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