Когда я пытался подключиться к локальному серверу MySQL во время моего набора тестов, он терпит неудачу с ошибкой:
OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")
Однако я всегда могу подключиться к MySQL, запустив программу командной строки
mysql
. A ps aux | grep mysql
показывает, что сервер работает, и
stat /tmp/mysql.sock
подтверждает, что сокет существует. Кроме того, если я открою отладчик в except
пункте этого исключения, я смогу надежно подключиться с теми же параметрами.
Эта проблема воспроизводится довольно надежно, однако она не выглядит на 100%, потому что каждый раз в синюю луну мой набор тестов действительно запускается без появления этой ошибки. Когда я пытался бежать с sudo dtruss
ним, не воспроизводилось.
Весь клиентский код написан на Python, хотя я не могу понять, насколько это актуально.
При переключении на использование хоста 127.0.0.1
возникает ошибка:
DatabaseError: Can't connect to MySQL server on '127.0.0.1' (61)
max_connections
в вашем MySQL conf файле?mysql -h 127.0.0.1
работу из командной строки? Я не уверен, что ваш сервер mysql действительно прослушивает TCP-порт.mysql -h localhost
надежно ли работает?Ответы:
Это сработало для меня. Однако, если это не сработает, убедитесь, что mysqld запущен, и попробуйте подключиться.
источник
Соответствующий раздел руководства MySQL находится здесь . Я бы начал с выполнения перечисленных здесь шагов отладки.
Также помните, что localhost и 127.0.0.1 в этом контексте не одно и то же:
localhost
, используется сокет или канал.127.0.0.1
, клиент вынужден использовать TCP / IP.Так, например, вы можете проверить, прослушивает ли ваша база данных TCP-соединения vi
netstat -nlp
. Кажется вероятным, что он прослушивает TCP-соединения, потому что вы говорите, что этоmysql -h 127.0.0.1
работает нормально. Чтобы проверить, можете ли вы подключиться к своей базе данных через сокеты, используйтеmysql -h localhost
.Если ничего из этого не помогает, вам, вероятно, нужно опубликовать более подробную информацию о вашей конфигурации MySQL, о том, как именно вы создаете соединение и т. Д.
источник
localhost
в качестве хоста). Изменение на127.0.0.1
исправленное.Для меня проблема заключалась в том, что я не запускал сервер mysql. Сначала запустите сервер, а затем выполните
mysql
.источник
Я видел, как это происходило в моем магазине, когда у моих разработчиков был установлен менеджер стека, такой как MAMP, который поставляется с предварительно настроенным MySQL, установленным в нестандартном месте.
при запуске вашего терминала
это даст вам ваш путь к файлу sock. выберите этот путь и используйте его в параметре DATABASES HOST.
Что вам нужно сделать, это указать
НОТА
также запустите,
which mysql_config
если у вас каким-то образом установлено несколько экземпляров сервера mysql на машине, вы можете подключиться не к тому.источник
Я просто изменил
HOST
сlocalhost
на,127.0.0.1
и он отлично работает:источник
settings.py
проекте.Когда, если вы потеряете свой демон mysql в Mac OSx, но присутствует в другом пути, например, в частном / var, выполните следующую команду
1)
2) перезапустите соединение с mysql с помощью:
работает также для mariadb
источник
Запустите приведенный ниже cmd в терминале
Затем перезапустите машину, чтобы изменения вступили в силу. Оно работает!!
источник
Проверьте количество открытых файлов для процесса mysql с помощью команды lsof.
Увеличьте лимит открытых файлов и запустите снова.
источник
ulimit
увеличить количество открытых файлов, которые разрешено открывать вашему клиенту и серверу. если вы используете последнюю версию ubuntu, это может потребовать редактирования сценария выскочки mysql в / etc / init, но, надеюсь, вы можете просто сделать это в файле .cnf.После попытки нескольких из этих решений и безуспешных попыток у меня сработало следующее:
источник
Это может быть одна из следующих проблем.
а затем введите его в свой код подключения к базе данных:
/tmp/mysql.sock возвращается из grep
2.Неправильное решение для порта mysql: вам необходимо найти правильный порт mysql:
а затем в вашем коде:
3306 - это порт, возвращаемый командой grep
Думаю, первый вариант решит вашу проблему.
источник
Для тех, кто обновился с 5.7 до 8.0 через homebrew, эта ошибка, скорее всего, вызвана незавершенным обновлением. В моем случае
mysql.server start
я получил следующую ошибку:Затем я проверил файл журнала
cat /usr/local/var/mysql/YOURS.err | tail -n 50
и обнаружил следующее:Если вы находитесь в той же лодке, сначала установите
mysql@5.7
через homebrew, остановите сервер, а затем снова запустите систему 8.0.Затем,
Это заставит ваш MySQL (8.0) снова заработать.
источник
ERROR! The server quit without updating PID file
снова получаю то же самое .Мне кажется, я видел такое же поведение некоторое время назад, но не могу вспомнить детали.
В нашем случае проблема заключалась в том, что тестер инициализирует соединения с базой данных относительно первого требуемого взаимодействия с базой данных, например, путем импорта модуля в settings.py или некоторого __init__.py. Я попытаюсь найти дополнительную информацию, но это уже может стать сигналом для вашего дела.
источник
Убедитесь, что ваш / etc / hosts есть
127.0.0.1 localhost
в нем, и он должен работать нормальноисточник
У меня есть две хитрые догадки на этот счет
Гипотеза №1
Рассмотрите возможность невозможности доступа к
/tmp/mysql.sock
файлу. Когда я настраиваю базы данных MySQL, я обычно подключаю сайт с файлом сокета/var/lib/mysql
. Если вы войдете в mysql какroot@localhost
, сеансу вашей ОС потребуется доступ к/tmp
папке. Убедитесь, что у вас/tmp
есть правильные права доступа в ОС. Кроме того, убедитесь, что пользователь sudo всегда может читать файл в формате/tmp
.Гипотеза №2
Доступ к mysql через
127.0.0.1
может вызвать некоторую путаницу, если вы не обращаете внимания. Как?Если вы подключаетесь к MySQL с помощью командной строки,
127.0.0.1
вам может потребоваться указать протокол TCP / IP.или попробуйте DNS-имя
Это позволит избежать входа в систему как
root@localhost
, но убедитесь, что выroot@'127.0.0.1'
определили.В следующий раз, когда вы подключитесь к MySQL, запустите это:
Что это вам дает?
Если эти функции возвращают те же значения, значит, вы подключаетесь и аутентифицируетесь, как и ожидалось. Если значения отличаются, вам может потребоваться создать соответствующего пользователя
root@127.0.0.1
.источник
Была такая же проблема. Оказалось,
mysqld
перестал работать (я на Mac OSX). Я перезапустил его, и ошибка исчезла.Я понял, что
mysqld
это не работает в основном из-за этой ссылки: http://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.htmlОбратите внимание на первый совет!
источник
если вы получите сообщение об ошибке, как показано ниже:
Затем просто найдите местоположение вашего файла mysqld.sock и добавьте его в «HOST».
Как будто я использую xampp в Linux, поэтому мой
mysqld.sock
файл находится в другом месте. так что это не работает '/var/run/mysqld/mysqld.sock
'источник
Убедитесь, что ваш mysql не достиг максимального количества подключений или не находится в каком-то цикле загрузки, как это часто бывает, если настройки в my.cnf неверны.
Используйте ps aux | grep mysql, чтобы проверить, меняется ли PID.
источник
Слишком долго смотрел в Интернете, чтобы не вносить свой вклад. После попытки ввести приглашение mysql из командной строки я продолжал получать это сообщение:
ОШИБКА 2002 (HY000): не удается подключиться к локальному серверу MySQL через сокет '/tmp/mysql.sock' (2)
Это было связано с тем, что мой локальный сервер mysql больше не работал. Чтобы перезапустить сервер, я перешел на
где находился мой mysql.server. Отсюда просто введите:
Это перезапустит локальный сервер mysql.
Оттуда вы можете сбросить пароль root, если это необходимо.
источник
Мне пришлось убить все экземпляры mysql, сначала найдя все идентификаторы процессов:
А потом убиваем их:
Затем:
Работал у меня.
источник
Сокет находится в / tmp. В системе Unix из-за режимов и прав собственности на / tmp это могло вызвать некоторые проблемы. Но до тех пор, пока вы говорите нам, что МОЖЕТЕ использовать соединение mysql в обычном режиме, я думаю, это не проблема для вашей системы. Основная проверка должна заключаться в перемещении mysql.sock в более нейтральный каталог.
Тот факт, что проблема возникает «случайно» (или не каждый раз), позволяет мне думать, что это может быть проблема сервера.
Ваш / tmp расположен на стандартном диске или на экзотическом монтировании (например, в ОЗУ)?
Ваш / tmp пуст?
iotop
Показывает ли вам что-то не так, когда вы сталкиваетесь с проблемой?источник
Настройте подключение к БД в диалоговом окне «Управление подключениями к БД». В качестве метода подключения выберите «Стандартный (TCP / IP)».
См. Эту страницу для получения дополнительной информации http://dev.mysql.com/doc/workbench/en/wb-manage-db-connections.html
Согласно этой другой странице, файл сокета используется, даже если вы указываете localhost.
Он также показывает, как проверить ваш сервер, выполнив следующие команды:
источник
в ubuntu14.04 вы можете сделать это, чтобы решить эту проблему.
источник
Я уверен, что mysqld запущен, и mysql из командной строки может работать правильно. Но сервер httpd показывает проблему (не удается подключиться к mysql через сокет).
Я запустил службу с mysqld_safe &.
наконец, я обнаружил, что когда я запускаю службу mysqld с помощью службы mysqld start, возникают проблемы (проблема с разрешением selinux), и когда я исправляю проблему с selinux и запускаю mysqld с помощью «service mysqld start», проблема подключения httpd исчезает. Но когда я запускаю mysqld с mysqld_safe &, mysqld может работать. (клиент mysql может работать правильно). Но при подключении к httpd все еще есть проблема.
источник
Если это связано с сокетом, прочтите этот файл
и посмотрите, какое стандартное расположение гнезда. Это такая строка:
теперь создайте псевдоним для вашей оболочки, например:
Таким образом, вам не нужны привилегии root.
источник
Просто попробуйте бежать
mysqld
.Это было то, что у меня не работало на Mac. Если это не сработает, попробуйте перейти на страницу,
/usr/local/var/mysql/<your_name>.err
чтобы просмотреть подробные журналы ошибок.источник
Может быть полезно.
источник
Использование MacOS Mojave 10.14.6 для MySQL 8.0.19, установленного через Homebrew
sudo find / -name my.cnf
/usr/local/etc/my.cnf
Некоторое время работал, затем в конце концов ошибка вернулась. Удалил версию MySQL для Homebrew и установил файл .dmg прямо отсюда
С тех пор мы счастливы на связи.
источник
В моем случае помогло отредактировать файл
/etc/mysql/mysql.conf.d/mysqld.cnf
и заменить строку:с участием
Затем я перезапустил сервер, и он работал нормально. Самое смешное, что если я верну линию, как было раньше, и перезапущу, она все равно будет работать ..
источник
Недавно я столкнулся с подобной проблемой. Перебрал много ответов. Я получил его, выполнив следующие шаги.
источник
Для меня сервер mysql не работал. Итак, я запустил сервер mysql через
затем
mysql_secure_installation
чтобы защитить сервер, и теперь я могу посетить сервер MySQL через
sudo mysql -uroot -p
источник