Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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.

Кредит отправляется Генри

Ответ 2

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

mysqld stop
mysql.server start

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

Ответ 3

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

Ответ 4

1) Если вы видите "mysql остановлен" при запуске команды ниже;

brew services list

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

mysql server start

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

brew services start mysql

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

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

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

Ответ 5

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

Я решил это, сделав следующее:

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

brew uninstall [email protected]

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

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

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

brew install [email protected]
brew link --force [email protected]

Включить и запустить сервис

brew services start [email protected]

Ответ 6

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

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

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

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

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

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

sudo mysql.server start

Ответ 7

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

Ответ 8

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

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>

Ответ 9

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

Моя проблема

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

Установил мариадб с доморощенным

$ 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... -command сверху):

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

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

Ответ 10

Я столкнулся с той же проблемой на своем 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

Ответ 11

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

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

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

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz

Ответ 12

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

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

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

$ mysql_install_db --basedir="$(brew --prefix mysql)"

Ответ 13

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

путь здесь

/Applications/MAMP/tmp/mysql/mysql.sock

Ответ 14

Сокет не создается, если вы перезапустили mysqld слишком быстро после его остановки:

brew services stop mysql;brew services start mysql
ls /tmp/mysql.sock // socket not created

Ожидание за 3 секунды до перезапуска mysql исправляет это:

brew services stop mysql;sleep 3;brew services start mysql
sleep 1.5 // Note that it takes a second after mysql starts to create the socket
ls /tmp/mysql.sock // socket created!

Ответ 15

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

Ответ 16

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

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

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

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

Ответ 17

При запуске 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

Under:

[client]
socket=/tmp/mysql.sock

Это основано на этом посте.

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

Я надеюсь, что это поможет кому-то. Чувак, я ненавижу это...

Ответ 18

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

$ 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

Ответ 19

rm -rf/usr/local/var/mysql/ib_logfile *