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

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

  

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

Нет /tmp/mysql.sock и /var/lib/mysql.sock.

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

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

70 голосов | спросил socketman 22 FebruaryEurope/MoscowbFri, 22 Feb 2013 07:34:34 +0400000000amFri, 22 Feb 2013 07:34:34 +040013 2013, 07:34:34

11 ответов


0

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

  

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 7 AM000000120000002031 2013, 00:47:20
0

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

mysqld stop
mysql.server start

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

ответил jesuis 25 AMpThu, 25 Apr 2013 02:13:51 +040013Thursday 2013, 02:13:51
0

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

ответил Iswanto San 22 FebruaryEurope/MoscowbFri, 22 Feb 2013 07:43:08 +0400000000amFri, 22 Feb 2013 07:43:08 +040013 2013, 07:43:08
0

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 10 Jpm1000000pmSun, 10 Jan 2016 22:23:30 +030016 2016, 22:23:30
0

Я получил ту же ошибку, и это мне помогло:

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>
ответил gouravtiwari21 8 +04002013-10-08T13:18:38+04:00312013bEurope/MoscowTue, 08 Oct 2013 13:18:38 +0400 2013, 13:18:38
0

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

https://mariadb.com/resources /блог /установка-MariaDB-10116-макинтош-OS-X-доморощенного

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

Команды

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
ответил Hany Sakr 27 TueEurope/Moscow2016-12-27T14:38:08+03:00Europe/Moscow12bEurope/MoscowTue, 27 Dec 2016 14:38:08 +0300 2016, 14:38:08
0

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

Моя проблема

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

Установлен mariadb с домашним пивом

$ 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

Перезапустите свою мариадбу.

$ brew services restart mariadb

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

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

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

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

Примечания:

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

  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. В какой-то момент я также сделал вещи, упомянутые в других ответах, прежде чем придумать это.

ответил dingalapadum 23 Mayam18 2018, 03:53:11
0

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

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

Кроме того, вы можете mysql_install_db a basedir

$ mysql_install_db --basedir="$(brew --prefix mysql)"
ответил Kelley Robinson 1 MarpmTue, 01 Mar 2016 22:51:08 +03002016-03-01T22:51:08+03:0010 2016, 22:51:08
0

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

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

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

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz
ответил Wayne 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 04 Sep 2017 14:21:14 +0300 2017, 14:21:14
0

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

ответил GnrlBzik 2 +03002018-10-02T22:07:52+03:00312018bEurope/MoscowTue, 02 Oct 2018 22:07:52 +0300 2018, 22:07:52
0

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

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

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

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

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

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

sudo mysql.server start
ответил Tyler Curtis Jowers 28 +03002018-10-28T01:10:02+03:00312018bEurope/MoscowSun, 28 Oct 2018 01:10:02 +0300 2018, 01:10:02

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132