ERROR 2002 (HY000): не удается подключиться к локальному серверу MySQL через ночную ошибку на homebrew после MySQL 8.0 [duplicate]

Версия, которая использует Ruby и http://flori.github.com/json/

$ < file.json ruby -e "require 'rubygems'; require 'json'; puts JSON.pretty_generate(JSON[STDIN.read]);"

или более кратко:

$ < file.json ruby -r rubygems -r json -e "puts JSON.pretty_generate(JSON[STDIN.read]);"

91
задан Alex Gaynor 1 May 2013 в 21:32
поделиться

25 ответов

, если вы получите ошибку, как показано ниже:

django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")

Затем просто найдите местоположение файла mysqld.sock и добавьте его в «HOST».

Как я использую xampp на linux, поэтому файл mysqld.sock находится в другом месте. поэтому он не работает для /var/run/mysqld/mysqld.sock '

DATABASES = {

    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'asd',
        'USER' : 'root',
        'PASSWORD' : '',
        'HOST' : '/opt/lampp/var/mysql/mysql.sock',
        'PORT' : ''
    }
}
0
ответ дан alexander.polomodov 17 August 2018 в 15:53
поделиться

Когда, если вы потеряете демона mysql в mac OSx, но присутствуете в другом пути для примера в private / var, выполните следующую команду:

1)

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

2 ) перезапустите вашу связь с mysql с помощью:

mysql -u username -p -h host databasename

работает также и для mariadb

9
ответ дан aurny2420289 17 August 2018 в 15:53
поделиться
  • 1
    Я прошел через почти все решения в Интернете, за исключением этого, и это сработало. – numerical25 1 March 2014 в 21:41

Убедитесь, что ваш mysql не достиг максимального количества подключений или не находится в каком-то виде цикла загрузки, как это происходит довольно часто, если настройки неверны в my.cnf.

Использовать ps aux | grep mysql, чтобы проверить, изменяется ли PID.

2
ответ дан beiller 17 August 2018 в 15:53
поделиться

Была эта же проблема. Выключено mysqld перестало работать (я на Mac OSX). Я перезапустил его, и ошибка исчезла.

Я понял, что mysqld не работает в основном из-за этой ссылки: http://dev.mysql.com/doc/refman/5.6 /en/can-not-connect-to-server.html

Обратите внимание на первый отзыв!

3
ответ дан Ben Rollert 17 August 2018 в 15:53
поделиться

Для тех, кто обновился с 5.7 до 8.0 с помощью доморощенного, эта ошибка, скорее всего, вызвана тем, что обновление не завершено. В моем случае mysql.server start получил следующую ошибку:

ОШИБКА! Сервер завершает работу без обновления файла PID

Затем я проверил файл журнала с помощью cat /usr/local/var/mysql/YOURS.err | tail -n 50 и нашел следующее:

InnoDB: обновление после сбоя не поддерживается.

Если вы находитесь на одной лодке, сначала установите mysql@5.7 через homebrew, остановите сервер, а затем снова запустите систему 8.0.

brew install mysql@5.7

/usr/local/opt/mysql@5.7/bin/mysql.server start
/usr/local/opt/mysql@5.7/bin/mysql.server stop

Затем ,

mysql.server start

Это заставит ваш MySQL (8.0) работать снова.

0
ответ дан Blaszard 17 August 2018 в 15:53
поделиться
  • 1
    Большое спасибо ... Я был немного разочарован, увидев, что все мои базы данных удалены. – Adrien G 16 July 2018 в 07:59
  • 2
    Я снова получаю тот же ERROR! The server quit without updating PID file. – awebartisan 28 July 2018 в 10:41

Это может быть одной из следующих проблем.

  1. Неверная блокировка mysql. Решение: вам нужно найти правильный mysql-сокет,

mysqladmin -p variables | grep socket

, а затем поместите его в код подключения db:

pymysql.connect(db='db', user='user', passwd='pwd', unix_socket="/tmp/mysql.sock")

/tmp/mysql.sock - это возврат из grep

2. Неверное решение порта mysql: вы должны узнать правильный порт mysql:

mysqladmin -p variables | grep port

, а затем в вашем коде:

pymysql.connect(db='db', user='user', passwd='pwd', host='localhost', port=3306)

3306 - это порт, возвращенный из grep

Я думаю, что первый вариант разрешит вашу проблему.

5
ответ дан Chamith Malinda 17 August 2018 в 15:53
поделиться

Просто попробуйте запустить mysqld.

Это было то, что не работало для меня на Mac. Если он не работает, попробуйте перейти к /usr/local/var/mysql/<your_name>.err, чтобы просмотреть подробные журналы ошибок.

0
ответ дан eloone 17 August 2018 в 15:53
поделиться

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

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

mysql_config --socket

, который даст вам свой путь к файлу носка. возьмите этот путь и используйте его в вашем DATABASES HOST paramater.

Что вам нужно сделать, это указать ваш

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': 'test',
        'HOST': '/Applications/MAMP/tmp/mysql/mysql.sock',
        'PORT': '',
    },
}

ПРИМЕЧАНИЕ

также запустить which mysql_config если у вас есть несколько экземпляров сервера mysql, установленных на компьютере, вы можете подключиться к неправильному.

21
ответ дан Francis Yaconiello 17 August 2018 в 15:53
поделиться
  • 1
    Что делать, если ваш файл с носками отсутствует? – AlxVallejo 15 July 2014 в 22:38
  • 2
    купить еще пару? j / k, что означает, что служба mysql не запущена. запустить / перезапустить mysql – Francis Yaconiello 16 July 2014 в 16:57
  • 3
    В моем случае изменение HOST с "localhost" до "127.0.0.1" решил проблему. – lucaswxp 4 March 2015 в 20:39
  • 4
    @lucaswxp: В моем случае я должен изменить localhost с именем домена – Anshul Mishra 31 August 2015 в 08:47
  • 5
    Я знаю, что это старый пост, но все же так уместно ... спасло то, что у меня осталось. – Studio Rooster 2 October 2016 в 06:49

Убедитесь, что ваш / etc / hosts имеет 127.0.0.1 localhost, и он должен работать нормально

2
ответ дан hd1 17 August 2018 в 15:53
поделиться
  • 1
    Удивительно (с уважением) это отсортировало его для меня - при проверке этого я обнаружил, что при попытке настроить webdav Mavericks добавила некоторые дополнительные (полностью искаженные) строки в мой файл хоста, включая тот, который переназначил localhost. – rob_was_taken 3 January 2015 в 00:43

Мне пришлось убить все экземпляры mysql, сначала обнаружив все идентификаторы процессов:

ps aux | grep mysql

И затем убить их:

kill -9 {pid}

Затем:

mysql.server start

Работал для меня.

1
ответ дан HomerPlata 17 August 2018 в 15:53
поделиться

Проверить количество открытых файлов для процесса mysql с помощью команды lsof.

Увеличьте ограничение на открытые файлы и запустите снова.

7
ответ дан hsen 17 August 2018 в 15:53
поделиться
  • 1
    Я столкнулся с этим раньше, и вы не сможете просто сделать это через ваш .cnf-файл. вам действительно понадобится ulimit, чтобы увеличить количество открытых файлов, доступных вашему клиенту и серверу. если вы используете последнюю версию ubuntu, это может потребовать редактирования сценария upstart mysql в / etc / init, но, надеюсь, вы можете просто сделать это в файле .cnf. – underrun 6 May 2013 в 14:29

Соответствующий раздел руководства 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, точно как вы создаете соединение и т. д.

64
ответ дан jtoberon 17 August 2018 в 15:53
поделиться
  • 1
    Хотя в целом следующие установленные диагностические процедуры являются хорошей идеей, если вы прочитали вопрос (и процедуры), вы увидите, что процедуры были соблюдены и определили, что это не проблема с сервером MySQL. Это то, что конкретно связано с клиентом Python, поскольку все остальные доступ через сокет отлично работают, включая другой доступ с Python. – Old Pro 11 May 2013 в 20:17
  • 2
    Какой странный голос. Я опубликовал установленную процедуру по нескольким причинам: (1) другие люди публиковали только часть установленной процедуры, и лучше систематически относиться к отладке, (2) казалось, что существует некоторая путаница в отношении localhost vs 127.0.0.1 и (3 ) другие люди с тем же «Не удается подключиться к локальному серверу mysql». Симптом, вероятно, наткнется на этот вопрос. Я знаю, что это, вероятно, клиент Python, поэтому я попросил дополнительную информацию, например. о том, как создается соединение. – jtoberon 12 May 2013 в 01:21
  • 3
    +1 Я получал эту ошибку, пытающуюся подключиться к mysql через туннель ssh (используя localhost в качестве хоста). Изменение на 127.0.0.1 зафиксировано. – krock 4 March 2016 в 01:01
  • 4
    Для записи это устранило мою проблему: «Не удается подключиться к локальному серверу MySQL через сокет» /tmp/mysql.sock'" ;. – proinsias 31 May 2016 в 16:25
  • 5
    На самом деле, это лучший ответ Thumbs UP !!! – servatj 14 June 2017 в 09:38

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

  1. Перезапустить систему
  2. mysql.server start
  3. Успех!
7
ответ дан Mark Lohr 17 August 2018 в 15:53
поделиться

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

4
ответ дан Martin 17 August 2018 в 15:53
поделиться

Если это сокет, прочитайте этот файл

/etc/mysql/my.cnf

и посмотрите, что такое стандартное расположение сокетов. Это строка, например:

socket = /var/run/mysqld/mysqld.sock

теперь создает псевдоним для вашей оболочки:

alias mysql="mysql --socket=/var/run/mysqld/mysqld.sock"

Таким образом, вам не нужны привилегии root.

0
ответ дан MaxV 17 August 2018 в 15:53
поделиться

в ubuntu 14.04 вы можете сделать это, чтобы решить эту проблему.

zack@zack:~/pycodes/python-scraping/chapter5$ **mysqladmin -p variables|grep socket**
Enter password: 
| socket                                            | ***/var/run/mysqld/mysqld.sock***                                                                                            |
zack@zack:~/pycodes/python-scraping/chapter5$***ln -s  /var/run/mysqld/mysqld.sock /tmp/mysql.sock***
zack@zack:~/pycodes/python-scraping/chapter5$ ll /tmp/mysql.sock 
lrwxrwxrwx 1 zack zack 27 11月 29 13:08 /tmp/mysql.sock -> /var/run/mysqld/mysqld.sock=
0
ответ дан Mi-Creativity 17 August 2018 в 15:53
поделиться

Настройте соединение с БД в диалоговом окне «Управление соединениями с БД». Выберите «Стандартный (TCP / IP)» в качестве метода подключения.

Подробнее см. На этой странице http://dev.mysql.com/doc/workbench/en/wb-manage-db -connections.html

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

A Unix файл сокета используется, если вы не укажете имя хоста или укажите специальное имя хоста localhost.

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

Если процесс mysqld запущен, вы можете проверить его, попробовав следующие команды. Номер порта или имя файла сокета Unix может отличаться в вашей настройке. host_ip представляет IP-адрес машины, на которой работает сервер.

shell> mysqladmin version 
shell> mysqladmin variables 
shell> mysqladmin -h `hostname` version variables 
shell> mysqladmin -h `hostname` --port=3306 version 
shell> mysqladmin -h host_ip version 
shell> mysqladmin --protocol=SOCKET --socket=/tmp/mysql.sock version
0
ответ дан Only You 17 August 2018 в 15:53
поделиться

Запустите ниже cmd в терминале

/ usr / local / mysql / bin / mysqld_safe

enter image description here [/g0]

Затем перезапустите аппарат, чтобы он вступил в силу. Он работает !!

6
ответ дан Prashanth Sams 17 August 2018 в 15:53
поделиться
sudo /usr/local/mysql/support-files/mysql.server start 

Это сработало для меня. Однако, если это не работает, убедитесь, что mysqld запущен и попробуйте подключиться.

132
ответ дан Pratyay 17 August 2018 в 15:53
поделиться
  • 1
    Я потратил 2 часа на это, и это решение, потрясающее. Я не могу отблагодарить! – Engin Yapici 29 March 2014 в 06:16
  • 2
    Я провел 3 ... СПАСИБО !! – Amr M. AbdulRahman 19 September 2015 в 20:40
  • 3
    Я провел более 2 недель (даже не шучу), и это самое близкое, что я получил, чтобы наконец связаться. Тем не менее, он застрял на «запуске mysql» ..... Но спасибо, хороший пост! – L. Klotz 3 November 2015 в 13:40
  • 4
    sudo: /usr/local/mysql/support-files/mysql.server: команда не найдена. Зачем? – Syam Pillai 13 June 2016 в 05:00
  • 5
    Почему двоеточие после sudo? Проверьте, существует ли путь – Pratyay 13 June 2016 в 12:57

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

ERROR 2002 (HY000): Не удается подключиться к локальному серверу MySQL через socket '/ tmp / mysql. sock '(2)

Это было связано с тем, что мой локальный сервер mysql больше не работал. Чтобы перезагрузить сервер, я перешел к

shell> cd /user/local/bin

, где находился мой mysql.server. Отсюда просто введите:

shell> mysql.server start

Это приведет к перезапуску локального сервера mysql.

Оттуда вы можете сбросить пароль root, если это необходимо ..

mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass')
->                   WHERE User='root';
mysql> FLUSH PRIVILEGES;
1
ответ дан preynolds 17 August 2018 в 15:53
поделиться

Для меня, я уверен, что mysqld запущен, а командная строка mysql может работать исправно. Но сервер httpd показывает проблему (не могу подключиться к mysql через сокет).

Я начал службу с mysqld_safe & amp;.

, наконец, я обнаружил, что при запуске службы mysqld при запуске службы mysqld возникают проблемы (проблема разрешения selinux), и когда я исправляю проблему selinux и запускаю mysqld с «service mysqld start», проблема подключения httpd исчезает. Но когда я запускаю mysqld с mysqld_safe & amp ;, mysqld может работать. (клиент mysql может работать правильно). Но есть еще проблема при подключении с httpd.

0
ответ дан Robin LI 17 August 2018 в 15:53
поделиться

У меня есть две подлые гипотезы на этом

КОНЕКЦИЯ № 1

Посмотрите на возможность не иметь доступа к файлу /tmp/mysql.sock. Когда я устанавливаю базы данных MySQL, я обычно разрешаю сайт файла сокета в /var/lib/mysql. Если вы входите в mysql как root@localhost, ваш сеанс ОС должен получить доступ к папке /tmp. Убедитесь, что /tmp имеет правильные права доступа в ОС. Кроме того, убедитесь, что пользователь sudo всегда может читать файл в /tmp.

CONJECTURE # 2

Доступ к mysql через 127.0.0.1 может вызвать некоторую путаницу, если вы не обращаете внимания. Как?

Из командной строки, если вы подключаетесь к MySQL с 127.0.0.1, вам может потребоваться указать протокол TCP / IP.

mysql -uroot -p -h127.0.0.1 --protocol=tcp

или попробуйте DNS-имя

mysql -uroot -p -hDNSNAME

Это приведет к обходу входа в систему как root@localhost, но убедитесь, что у вас установлен root@'127.0.0.1'.

При следующем подключении к MySQL запустите это:

SELECT USER(),CURRENT_USER();

Что это дает вам?

  • USER () сообщает, как вы пытались выполнить аутентификацию в MySQL
  • CURRENT_USER () сообщает, как вам было разрешено пройти аутентификацию в MySQL

Если эти функции возвращаются с одинаковыми значениями, то вы подключаетесь и проверяете подлинность, как ожидалось. Если значения разные, вам может потребоваться создать соответствующего пользователя root@127.0.0.1.

3
ответ дан RolandoMySQLDBA 17 August 2018 в 15:53
поделиться

Я только что изменил HOST с localhost на 127.0.0.1, и он отлично работает:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': '',
},
8
ответ дан Sirbito X 17 August 2018 в 15:53
поделиться
  • 1
    Было бы неплохо узнать, какой файл вы изменили и где он находится – Empi 3 May 2017 в 09:38
  • 2
    В settings.py проекта. – Sirbito X 3 May 2017 в 20:38

Сокет находится в / tmp. В системе Unix из-за режимов & amp; владельцы в / tmp, это может вызвать некоторые проблемы. Но, пока вы говорите нам, что вы МОЖЕТЕ использовать свою связь mysql нормально, я думаю, это не проблема в вашей системе. Первичная проверка должна состоять в том, чтобы переместить mysql.sock в более нейтральный каталог.

Тот факт, что проблема возникает «случайно» (или не каждый раз), позволяет мне думать, что это может быть проблема с сервером.

  • Является ли ваш / tmp размещен на стандартном диске или на экзотическом монтировании (например, в ОЗУ)?
  • Является ли ваш / tmp пустым?
  • Означает ли iotop что-то не так, когда вы сталкиваетесь с проблемой?
1
ответ дан Stéphane Bruckert 17 August 2018 в 15:53
поделиться

Для меня проблема в том, что я не запускал сервер mysql. Сначала запустите сервер, а затем выполните mysql.

$ mysql.server start
$ mysql -h localhost -u root -p
57
ответ дан yask 17 August 2018 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: