Не удается подключиться к локальному серверу MySQL через доморощенный сокет

109

Недавно я попытался установить MySQL с помощью homebrew ( brew install mysql), и когда я пытаюсь запустить его, я получаю следующую ошибку:

ОШИБКА 2002 (HY000): не удается подключиться к локальному серверу MySQL через сокет '/tmp/mysql.sock' (2)

Нет ни /tmp/mysql.sockкота /var/lib/mysql.sock.

Я искал и не нашел ни одного mysql.sockфайла.

Как я могу это исправить?

сокетник
источник
Вы можете увидеть по этой ссылке ответ GeekHades. stackoverflow.com/questions/4847069/…
GeekHades
Я варил установленный mysql и имел ту же проблему после того, как батарея моего ноутбука разрядилась и принудительно завершила работу. Стоит бежать, mysqldчтобы все проверить и убедиться, что MySQL в последний раз правильно завершил работу. Если у него было «грязное» выключение (например, если аккумулятор ноутбука вынуждает выключить систему), это должно очистить его. Затем вы можете запустить сервер MySQL снова: mysql.server start.
Дэйв Эверитт
1
Этот ответ сработал для меня: stackoverflow.com/a/6378429/2641861
ArnoHolo
Это произошло со мной после восстановления нового Mac Mini из резервной копии Time Machine. Мне пришлось удалить mysql@5.7 и переустановить, чтобы он начал работать. Удар молотком, но это было относительно безболезненно, так как все мои конфигурации были сохранены.
Джошуа Пинтер,

Ответы:

93

Когда вы запустили сервер через

mysql.server start

вы должны увидеть сокет в /tmp/mysql.sock . Однако система, похоже, ожидает его в /var/mysql/mysql.sock . Чтобы исправить это, вам нужно создать символическую ссылку в / var / mysql :

sudo mkdir /var/mysql

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

Это решило проблему для меня. Теперь мой phpMyAdmin успешно работает с localhost и 127.0.0.1 .

Кредит принадлежит Генри

AAGD
источник
20
Когда я пытаюсь, mysql.server startя получаю ERROR! The server quit without updating PID file (/usr/local/var/mysql/lyahdav-C02R32HCG8WM.pid). Мне нужна была более старая версия MySQL, установленная через brew install mysql@5.6.
Лирон Яхдав
3
Бег. mysql.server startисправил это для меня
Stylishcoder
@EB прошло некоторое время с тех пор, как у меня была эта проблема, но, оглядываясь на мой комментарий, вы пробовали обходной путь для установки более старой версии MySQL? К сожалению, у меня нет идей.
Liron Yahdav
Проблема решается, когда вы переустанавливаете MySQL, но тогда у вас очень долгая процедура резервного копирования и восстановления. Затем он снова ломается, потому что мой компьютер неожиданно закрывается. Я не знаю, если это проблема нехватки памяти, но каждый раз, когда мой компьютер закрывается, mysql ломается с 2002
Бадди,
@LironYahdav Что заставило вас сделать вывод, что вам нужна более старая версия MySQL?
crmpicco
61

Похоже, ваш сервер mysql не запущен. Обычно я запускаю команду остановки, а затем запускаю ее снова:

mysqld stop
mysql.server start

Та же ошибка, и это работает для меня.

Иисус
источник
89
. ОШИБКА! Сервер завершил работу без обновления файла PID (/usr/local/var/mysql/myHostName.pid). ?
Песулап
Я сделал mysqld &за комментарий выше, но я думаю, что он, вероятно, будет делать то же самое, поскольку mysqld stop я почти уверен, что в моем случае это произошло из-за неправильного завершения работы.
Mitch VanDuyn
54

У меня остались некоторые каталоги от другой установки mysql (8.0), которые не были удалены.

Я решил это, выполнив следующие действия:

Сначала удалите mysql

brew uninstall mysql@5.6

Удалите папки / файлы, которые не были удалены

rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf

Переустановите mysql и свяжите его

brew install mysql@5.6
brew link --force mysql@5.6

Включите и запустите службу

brew services start mysql@5.6
Royal.O
источник
1
Похоже, проблема для меня заключалась в том, что после предыдущей установки у меня все еще был / usr / local / var / mysql. Удаление сделало свое дело! Спасибо за ваше предложение.
themantimes8
Мне нужно было выполнить шаг mysql_secure_installation, упомянутый homebrew, прежде чем эта ошибка исчезла.
searaig
27

Попробуйте подключиться, используя «127.0.0.1» вместо «localhost».

Iswanto San
источник
2
@Esteban MySQL попытается подключиться к сокету unix, если вы укажете ему подключиться к "localhost". Если вы говорите ему подключиться к 127.0.0.1, вы заставляете его подключаться к сетевому сокету. Так что, вероятно, у вас настроен MySQL только для прослушивания сетевого сокета, а не сокета файловой системы. (Источник: serverfault.com/a/295300/59101 )
Арди Арам
Это помогло мне заставить клиента mysql использовать сокет TCP, поскольку я запускаю SSH-туннель на локальном хосте для моей удаленной базы данных MySQL.
Iow
22
  1. Если вы видите «mysql остановлен» при выполнении следующей команды;

     brew services list
  2. и если вы можете запустить mysql с помощью следующей команды;

     mysql server start

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

brew services start mysql

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

ОШИБКА 2002 (HY000): не удается подключиться к локальному серверу MySQL через сокет '/tmp/mysql.sock' (2)

Берк
источник
@berk, в моем случае это помогло получить информацию об ошибке, но вызвало другую ошибку: «ERROR 1045 (28000): Access denied for user 'user' @ 'localhost' (using password: NO)»
Pratik Khadka
Привет @PratikKhadka, ошибка, которую вы сейчас получаете, означает, что mysql запущен, и у вас есть проблема с аутентификацией. Согласно сообщению об ошибке, которое вы опубликовали, вы используете имя пользователя как «пользователь» и не используете пароль. Вы должны использовать действующие имя пользователя и пароль. Предлагаю вам проверить следующую ссылку; « forum.mysql.com/read.php?34,140320,140324 »
Берк
Не нужно перезагружать ОС, у меня сработало просто запустить «brew services start mysql». Спасибо!
AKS
Привет @AKS, ты прав. Для работы перезагрузки не требуется. Я отредактировал ответ, чтобы объяснить, почему требуется перезагрузка. Требуется проверить, запускается ли mysql автоматически при запуске ОС. Спасибо за ваш отзыв!
Berk
5

Этот файл /tmp/mysql.sock, вероятно, представляет собой именованный канал, поскольку он находится во временной папке. Именованный канал - это специальный файл, который никогда не сохраняется постоянно.

Если мы создадим две программы и хотим, чтобы одна программа отправляла сообщение другой программе, мы могли бы создать текстовый файл. Одна программа записывает что-то в текстовый файл, а другая программа читает то, что написала другая программа. Вот что такое канал, за исключением того, что он не записывает файл на жесткий диск нашего компьютера, IE не сохраняет файл постоянно (как мы это делаем, когда создаем файл и сохраняем его).

Socket - это то же самое, что и Pipe. Разница в том, что сокеты обычно используются по сети - между компьютерами. Socket отправляет информацию на другой компьютер или получает информацию с другого компьютера. И каналы, и сокеты используют временный файл для совместного использования, чтобы они могли «общаться».

Трудно определить, какой из MySql используется в этом случае. Хотя это не имеет значения.

Команда mysql.server startдолжна заставить «сервер» (программу) запустить свой бесконечный цикл, который создаст этот специальный файл и будет ждать изменений ( listenдля записи).

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

sudo mysql.server start
Тайлер Кертис Джоуэрс
источник
Это отлично сработало, спасибо. Я просто запустил mysql.server start, mysql.server stopа затем снова запустил службу через homebrew, brew services start mysql@5.7и все прошло гладко.
taylorthurlow
4

После установки macos mojave пришлось стереть папку mysql, /usr/local/var/mysqlа затем переустановить через, brew install mysqlиначе вещи, связанные с разрешениями, будут возникать повсюду .

GnrlBzik
источник
Я решил свою проблему с вашим ответом, я установил ранее mysql, а затем попытался перейти на mysql@5.6
Rodrirokr
Спасибо приятель. это тоже решило мою проблему. удаление / usr / local / var / mysql и переустановка были для меня решением.
Oğuz Can
1
Осторожно: удаление /usr/local/var/mysqlприведет к удалению всех существующих баз данных!
Леонардо
3

У меня такая же ошибка, и вот что мне помогло:

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>
gouravtiwari21
источник
3

Чтобы добавить к этим ответам, в моем случае у меня не было локального сервера mySQL, он работал внутри контейнера докеров. Таким образом, файл сокета не существует и не будет доступен для клиента «mysql».

Файл sock создается mysqld, и mysql использует его для связи с ним. Однако, если ваш сервер mySql не работает локально, он не требует файла sock.

При указании имени хоста / ip файл sock не требуется, например

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz
Уэйн
источник
3

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

Моя проблема

то же самое, но мои настройки немного отличаются (mariadb вместо mysql):

Установил mariadb с homebrew

$ brew install mariadb

Запустил демон

$ brew services start mariadb

Пытался подключиться и получил указанную выше ошибку

$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Мое решение

узнайте, какие my.cnfфайлы используются mysql(как предлагается в этом комментарии ):

$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
                        order of preference, my.cnf, $MYSQL_TCP_PORT,

проверьте, где запущен файл сокета Unix (почти как описано здесь ):

$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock

(вы можете захотеть grep mysqlвместо mariadb)

Добавьте найденный вами файл сокета ~/.my.cnf(при необходимости создайте файл) (при условии, что он ~/.my.cnfбыл указан при запуске mysql --verbose ...команды сверху):

[client]
socket = /usr/local/mariadb/data/mariadb.sock

Перезагрузите свой mariadb:

$ brew services restart mariadb

После этого я смог запустить mysql и получил:

$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Поэтому я запускаю команду с привилегиями суперпользователя и после ввода пароля получил:

$ sudo mysql -uroot
MariaDB [(none)]>

Ноты:

  1. Я не совсем уверен насчет групп, в которые нужно добавить сокет, сначала у меня был [клиент-сервер], но потом я решил, что [client] должно быть достаточно. Я изменил его, и он все еще работает.

  2. При запуске mariadb_config | grep socketя получаю: --socket [/tmp/mysql.sock] что немного сбивает с толку, поскольку кажется, что /usr/local/mariadb/data/mariadb.sockэто реальное место (по крайней мере, на моей машине)

  3. Интересно, где я могу настроить /usr/local/mariadb/data/mariadb.sockего /tmp/mysql.sockтак, чтобы я мог использовать настройки по умолчанию вместо того, чтобы редактировать мои .my.cnf(но я слишком устал, чтобы понять это ...)

  4. В какой-то момент я также делал то, что упоминалось в других ответах, прежде чем придумать это.

дингалападум
источник
2

Вам нужно будет запустить mysql_install_db- проще всего, если вы находитесь в каталоге установки:

$ cd /usr/local/Cellar/mysql/<version>/ 
$ mysql_install_db

В качестве альтернативы, вы можете подать mysql_install_dbв basedirпараметр , как в следующем:

$ mysql_install_db --basedir="$(brew --prefix mysql)"
Келли Робинсон
источник
2

Я столкнулся с той же проблемой на своем Mac и решил ее, выполнив следующие инструкции

https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew

Но не забудьте убить или удалить старую версию, прежде чем продолжить.

Команды:

brew uninstall mariadb

xcode-select --install

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - See more at: https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew#sthash.XQoxRoJp.dpuf

brew doctor

brew update

brew info mariadb

brew install mariadb

mysql_install_db

mysql.server start
Хани Сакр
источник
1
Пожалуйста, объясните на нескольких кратких примерах, как предоставленная вами ссылка помогла вам. Ссылки могут исчезнуть, и поэтому это может быть причиной того, что ваш ответ может быть удален.
Курт Ван ден Бранден,
2

После перезапуска мне не удалось подключиться к локальному mariadb, поиск также привел меня на эту страницу, и я хотел поделиться с вами своим решением.

Я заметил, что каталог my.cnf.d в / usr / local / etc / отсутствует.

Это известная ошибка homebrew, которая там описана и решена. https://github.com/Homebrew/homebrew-core/issues/36801

быстрый способ исправить: mkdir /usr/local/etc/my.cnf.d

тимо
источник
Это сработало для меня. Не удалось подключиться к локальному mariadb после brew updateи перезапустить. brew services listРезультат показывает статус mariadb startedжелтым цветом. Спасибо за чаевые.
nterms
1

При запуске mysql_secure_installation и вводе нового пароля я получил:


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


Я заметил, пытаясь сделать следующее из этого ответа :

netstat -ln | grep mysql

Он ничего не вернул, и я понял, что это означает, что не было файла .sock.

Итак, я добавил следующее в свой файл my.cnf (либо в /etc/my.cnf, либо в моем случае /usr/local/etc/my.cnf ).

Под:

[mysqld]
socket=/tmp/mysql.sock

Под:

[client]
socket=/tmp/mysql.sock

Это было основано на этом сообщении .

Затем остановите / запустите mysql снова и повторите установку mysql_secure_installation, что наконец позволило мне ввести мой новый пароль root и продолжить установку с другими настройками.

Должен произвести впечатление
источник
0

просто чтобы завершить эту ветку. поэтому MAMP (PRO) используется довольно часто

путь здесь

/Applications/MAMP/tmp/mysql/mysql.sock
alexdd55
источник
0

Я вручную запустил mysql в панели системных настроек, инициализировав базу данных, а затем запустив ее. Это решило мою проблему.

криш
источник
0

В моем случае виновник был найден в лог-файлах:

$ tail /usr/local/var/mysql/<hostname>.lan.err
2019-09-19  7:32:21 0 [ERROR] InnoDB: redo log file './ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2019-09-19  7:32:21 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

Поэтому я переименовал, ib_logfile0чтобы избавиться от ошибки ( ib_logfile1потом пришлось поступить так же ).

mv /usr/local/var/mysql/ib_logfile0 /usr/local/var/mysql/ib_logfile0_bak
mv /usr/local/var/mysql/ib_logfile1 /usr/local/var/mysql/ib_logfile1_bak
brew services restart mariadb
JBaczuk
источник
0

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

tail -f the-mysql-or-maria-db-error-file.err

в другой консоли:

brew services restart mariadb

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

«Ошибка восстановления MAC HOMEBREW. Либо устраните проблему (если это, например, ошибка нехватки памяти) и перезапустите, либо удалите журнал tc и запустите mysqld с помощью»

Поэтому я изменил tc.logрасширение tc.log.txtи перезапустил mariadb

brew services restart mariadb

и готово!

Ричард Родригес
источник
-1

Для меня я давно установил mariadb, потом установил mysql@5.7.

Когда я выполнил mysql -uroot, я получаю сообщение об ошибке: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Читаем ответы:

  • Я удалил mariadb
  • Удалил папку /usr/local/var/mysql
  • Выполнить команду mysqld --initialize

Тогда я смог mysql -uroot -p

Wesamly
источник
-1

Это работает для меня:

brew upgrade mysql
FianGaming
источник