Не удается подключиться к локальному серверу MySQL через сокет homebrew
Недавно я пытался установить MySQL с homebrew (brew install mysql
), и когда я пытаюсь запустить его, я получаю следующую ошибку:
ERROR 2002 (HY000): невозможно подключиться к локальному серверу MySQL через сокет '/tmp/mysql.sock' (2)
Нет /tmp/mysql.sock
или /var/lib/mysql.sock
.
Я искал и не нашел файл mysql.sock
.
Как я могу это исправить?
Ответы
Ответ 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)]>
Заметки:
-
Я не совсем уверен насчет групп, в которые нужно добавить сокет, сначала он был у меня [клиент-сервер], но потом я подумал, что [клиента] должно быть достаточно. Я изменил это, и оно все еще работает.
-
При запуске mariadb_config | grep socket
mariadb_config | grep socket
я получаю: --socket [/tmp/mysql.sock]
что немного сбивает с толку, так как кажется, что /usr/local/mariadb/data/mariadb.sock
является фактическим местом (по крайней мере, на моей машине)
-
Интересно, где я могу сконфигурировать /usr/local/mariadb/data/mariadb.sock
чтобы он действительно был /tmp/mysql.sock
чтобы я мог использовать настройки по умолчанию вместо того, чтобы редактировать мой .my.cnf
(но я слишком устал, чтобы понять это...)
-
В какой-то момент я также сделал вещи, упомянутые в других ответах, прежде чем придумать это.
Ответ 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 *