Неможливо підключитися до локального сервера 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 .

Кредит йде на Генрі


1
Це також вирішило мою проблему з відмовою підключення Wordpress до mySQL. Ще раз дякую
Аюб

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виправили це для мене
ivange94

@Liron, ви виправили проблему, з якою ви стикаєтесь? Я зіткнувся з тим же питанням без сторонньої допомоги.
Бадді

@EB минуло певний час, як у мене виникла ця проблема, але, оглянувшись на мій коментар, ви спробували вирішити проблему, щоб встановити старішу версію MySQL? Крім цього, на жаль, я не маю ідеї.
Лірон Ягдав

61

Схоже, ваш сервер mysql не запущений. Зазвичай я запускаю команду stop і потім запускаю її знову:

mysqld stop
mysql.server start

Така ж помилка, і це працює для мене.


89
. ПОМИЛКА! Сервер вийшов без оновлення PID-файлу (/usr/local/var/mysql/myHostName.pid). ?
Песулап

Я зробив mysqld &за коментар вище, але я думаю, що це, ймовірно, зробить те саме, що mysqld stop я майже впевнений, що в моєму випадку це було через неправильне відключення.
Мітч ВанДюйн

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

3
Велике спасибі :) Усі інструкції не вдалися, але ваші
В’ячеслав Логінов

1
Дякую - ця відповідь закінчилася 24 години
ударом

1
Це також працювало для мене після того, як спробував все інше там! Дякую!!!! :)
Ерік

1
Здається, проблема для мене полягала в тому, що я все ще мав / usr / local / var / mysql після попередньої установки. Видалення зробило трюк! Дякуємо за вашу пропозицію.
тематика8

Мені потрібно було виконати крок "mysql_secure_installation", згаданий домашнім бором, перш ніж ця помилка зникла.
searaig

27

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


2
@Esteban MySQL спробує підключитися до unix-сокета, якщо ви скажете йому підключитися до "localhost". Якщо ви скажете йому підключитися до 127.0.0.1, ви змусите його підключитися до мережевого сокета. Отже, можливо, у вас MySQL налаштований на прослуховування лише мережевого сокета, а не сокета файлової системи. (Джерело: serverfault.com/a/295300/59101 )
Ardee Aram

Це допомогло мені змусити клієнта mysql використовувати сокет TCP, оскільки я запускаю тунель SSH на localhost до віддаленої бази даних 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 допомогло в моєму випадку позбутися помилки, але запропонувала ще одну помилку "ПОМИЛКА 1045 (28000): Доступ заборонено користувачеві" user "@" localhost "(з використанням пароля: НІ)"
Pratik Khadka

Привіт @PratikKhadka, помилка, яку ви отримуєте зараз, означає, що mysql працює, і у вас є проблема автентифікації. Відповідно до повідомлення про помилку, яке ви опублікували, ви використовуєте ім'я користувача як "користувач" і не використовуєте пароль. Ви повинні використовувати дійсне ім’я користувача та пароль. Я пропоную вам перевірити наступне посилання; " forums.mysql.com/read.php?34,140320,140324 "
Берк

Немає необхідності перезавантажувати ОС, для мене працював лише запуск "brew services start mysql". Дякую!
АКС

Привіт @AKS, ти маєш рацію. Перезапуск не потрібен, щоб він працював. Я відредагував відповідь, щоб пояснити, чому потрібен перезапуск. Потрібно перевірити, чи автоматично запускається mysql при запуску ОС. Дякую за відгук!
Берк

5

Файл /tmp/mysql.sock, ймовірно, названий з трубою, оскільки знаходиться у тимчасовій папці. Названа труба - це спеціальний файл, який ніколи не зберігається назавжди.

Якщо ми робимо дві програми, і хочемо, щоб одна програма надіслала повідомлення іншій програмі, ми могли б створити текстовий файл. У нас одна програма щось записує у текстовий файл, а інша читає те, що написала наша інша програма. Ось що таке труба, за винятком того, що він не записує файл на наш жорсткий диск комп'ютера, IE не зберігає файл постійно (як це робимо, коли ми створюємо файл і зберігаємо його.)

Розетка - це те саме, що і труба. Різниця полягає в тому, що сокети зазвичай використовуються в мережі - між комп'ютерами. Socket посилає інформацію на інший комп'ютер або отримує інформацію з іншого комп'ютера. І Труби, і Сокети використовують тимчасовий файл для обміну, щоб вони могли "спілкуватися".

Важко розрізнити, який саме MySql використовується в даному випадку. Не має значення.

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

Після цього поширеною проблемою може бути те, що програма MySql не має дозволу на створення файлу на вашій машині, тому вам, можливо, доведеться надати їй root права

sudo mysql.server start

Це спрацювало чудово, дякую. Я просто побіг mysql.server start, mysql.server stopа потім знову запустив послугу через домашнє пиво brew services start mysql@5.7і все пройшло гладко.
Тейлортвурлов

4

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


Я вирішив свою проблему своєю відповіддю, я раніше встановив mysql, а потім спробував перейти на сторінку mysql@5.6
Rodrirokr

Дякую, чувак. це вирішило і мою проблему. видалення / usr / local / var / mysql та перевстановлення було для мене рішенням.
Oğuz Can Sertel

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>

3

На додаток до цих відповідей: У моєму випадку я не мав локального сервера mySQL, він працював всередині контейнера докера. Отже, файл сокета не існує і не буде доступний для клієнта "mysql".

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

Вказуючи ім'я хоста / ip, файл шкарпетки не потрібно, наприклад

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

3

Оскільки я витратив досить багато часу, намагаючись вирішити це питання, і завжди повертався на цю сторінку, шукаючи цю помилку, я залишу тут своє рішення, сподіваючись, що хтось заощадить час, який я втратив. Хоча в моєму випадку я використовую мариадб, а не 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 замість мариадби)

Додайте файл сокету, який ви знайшли ~/.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я отримую: --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

Після перезавантаження я не зміг зв’язатися з місцевою маріадбою, пошук також привів мене до цієї сторінки, і я хотів поділитися своїм рішенням з вами.

Я помітив, що каталог my.cnf.d в / usr / local / тощо / відсутній.

Це відома помилка з домашньою мовою, яка описана і вирішена там. https://github.com/Homebrew/homebrew-core/isissue/36801

швидкий спосіб виправити: mkdir /usr/local/etc/my.cnf.d


Це працювало для мене. Не вдалося підключитися до локальної mariadb після brew updateта перезавантаження. brew services listУ результаті було показано статус маріадбу 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 що нарешті дозволить мені ввести новий кореневий пароль та продовжувати інші налаштування налаштування.

Я сподіваюся, що це комусь допоможе. Людина, я ненавиджу цей матеріал ...


0

просто для завершення цієї теми. тому MAMP (PRO) використовується досить часто

шлях тут є

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

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

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

і зробили!



0

Для мене я давно встановив 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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.