Не вдається знайти mysql.sock


82

Мені просто довелося перевстановити mysql, і у мене проблема з його запуском. Він не може знайти сокет (mysql.sock). Проблема в тому, що я не можу. У моєму терміналі Mac OS X 10.4 я набираю: locate mysql.sockі повертаюся /private/tmp/mysql.sock. Має сенс, що файл сокета існує в цьому місці, але насправді цього немає.

  1. Як я можу знайти файл сокета?

  2. Якщо locate повертає помилкове розташування, воно повинно мати якусь пам'ять і, можливо, індекси. Як я можу оновити цей індекс?


1
/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
Máxima Alekz

Відповіді:


139

щоб відповісти на першу частину вашого запитання:

бігти

% mysqladmin -p -u <user-name> variables

і перевірте змінну 'socket'


1
Я міг би повністю змінити цю відповідь на правильну, якби міг. Якби я знав це раніше!
Steph Rose

50
Побіг mysqladmin variables. Що робити коли error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'? :)
Олександр Валлін

Я отримую ту ж помилку, що і @afEkenholm, і мені не вдалося знайти рішення. Я запустив sudo find / -name mysql.sockіз кореневого каталогу і не зміг знайти mysql.sock ніде в системі. Я встановив MySQL, використовуючи 64-розрядний файл dmg для Mac OS 10.7. В даний час працює Mavericks.
b_dubb

@b_dubb Я те саме з вашою ситуацією. Як ви вирішили свої проблеми?
Меганчжоу,

1
Щоб швидко знайти параметр сокета без усіх інших, виконайте: змінні mysqladmin | grep socket
BAR

49

Це вирішило мою проблему

mysql_config --socket

ОНОВЛЕННЯ

mysql_config може сказати нам, де повинен знаходитися файл mysql.sock, але в моєму випадку файл не існував. Отже, я видалив файл my.cnf:

sudo rm -rf /etc/my.cnf

А потім перезапустив mysql:

brew services restart mysql

Файл було створено, і mysql зараз працює добре.


7
Ця команда підказує, де знаходиться mysql.sock, який відповідає на питання
Євген Рамірес

3
Ця команда не повідомляє вам, де знаходиться файл. Він повідомляє вам, де mysql його шукає: налаштування конфігурації --socket.
morksinaanab

Я не маю, ls: /etc/my.cnf: No such file or directoryможливо, мені доведеться його створити першим?
Аби

якщо у вас немає файлу, /etc/my.cnfспробуйте подивитися /usr/loca/etc/my.cnf- @Abhi
rwcorbett

20

Файл сокета повинен створюватися автоматично при запуску демона MySQL.

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

Щоб дізнатись, де повинен бути файл, скористайтеся:

% mysqld --verbose --help | grep ^socket

4
Або mysql --verbose --help | grep ^ socket
Ondrej Rafaj

1
@Ondrej, безумовно, це говорить вам, куди клієнт думає, що шукає? Сенс запуску mysqldполягає в тому, що він повинен сказати вам, куди насправді його помістив сервер !
Alnitak

на моїй установці xampp я не зміг знайти демон, тому намагався без нього, і це спрацювало :) ... те, що сталося за лаштунками, я не маю уявлення ...
Ondrej Rafaj


10

Моєю проблемою був також файл mysql.sock.

Під час процесу встановлення drupal мені довелося сказати, яку базу даних я хочу використовувати, але базу даних не було знайдено

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

система шукає mysql.sock, але він знаходиться в неправильному каталозі

все, що вам потрібно зробити, це зв’язати його;)

мені знадобилося багато часу, щоб прогуглити всю важливу інформацію, але мені знадобилися навіть години, щоб дізнатись, як адаптуватися, але тепер я можу представити результат: D

ps: якщо ви хочете бути точно таким, вам потрібно прив'язати свій /tmp/mysql.sock-file(якщо він також знаходиться у вашій системі там) до каталогу, заданого php.ini (або php.default.ini)pdo_mysql.default_socket= ...


Після того, як ви змінили php.ini, pdo_mysql.default_socketвам потрібно перезапустити веб-сервер, щоб зміни завантажилисяsudo apachectl restart
Szekelygobe

5

Я отримав точний шлях, використовуючи:

netstat -ln | grep -o -m 1 -E '\S*mysqld?\.sock'

Оскільки це лише повертає шлях і не вимагає жодного введення, ви потенційно можете використовувати його в сценарії оболонки.

Наразі на вашій машині має працювати MySQL, щоб це працювало. Працює і на MariaDB.


Чудова відповідь! Це фактично знаходить місце розташування розетки, на відміну від будь-якої іншої відповіді.
Тайлер Крістіан

2

Оригінальні запитання, здається, виникають через плутанину щодо: а) де знаходиться файл, і б) де його шукають (і чому ми не можемо знайти його там, коли робимо пошук або grep). Думаю, суть Альнітака полягала в тому, що ви хочете знайти, куди було пов’язано - але grep не покаже вам посилання, так? Файл там не живе, оскільки це посилання, це лише вказівник. Вам все-таки потрібно знати, де розмістити посилання.

мій файл sock, безумовно, знаходиться в / tmp, і ПОМИЛКА, яку я отримую, шукає його в / var / lib / (а не тільки / var), який я зараз зв'язав з / var та / var / lib, і я все ще отримую помилку "Не вдається підключитися до локального сервера MySQL через сокет 'var / lib / mysql.sock' (2)".

Зверніть увагу на (2) після помилки .... В іншому потоці я виявив, що це означає, що сокет справді можна було спробувати використати, але з самим сокетом щось не так - тому повністю вимкнути машину - так, щоб розетка закривається. Тоді перезапуск повинен це виправити. Я спробував це, але у мене це не спрацювало (тепер я запитую, чи не перезапустив я занадто швидко? Справді?) Можливо, це буде рішення для когось іншого.


1
$ mysqladmin variables | grep sock

Спробуйте замість цього, це виведе необхідний результат, позбувшись непов’язаної інформації.



0

(Q1) Як я можу знайти файл сокета?

Розташування файлу сокета за замовчуванням - /tmp/mysql.sock, щоб знайти файл сокета для вашої системи.

mysqladmin variables | grep socket

Якщо ви щойно встановили MySql, файл mysql.sock не буде створений до запуску сервера. Використовуйте цю команду для її запуску.

sudo launchctl load -F /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist

Якщо буде запропоновано ввести пароль, ви можете передати ім’я користувача root або інше ім’я користувача, подібне до цього. Термінал запропонує вам ввести пароль.

mysqladmin --user root --password variables | grep socket

(Q2) Як я можу оновити індекс локації

Оновіть локацію db за допомогою цієї команди.

sudo /usr/libexec/locate.updatedb

0

Я отримую ту саму помилку в Mac OS X 10.11.6:

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

Після численних мук і копання порад тут і у відповідних питаннях, жоден з яких, здавалося, не вирішив проблему, я повернувся назад і видалив встановлені папки, і просто зробив brew install mysql.

З більшістю команд все одно отримується однакова помилка, але це працює:

/usr/local/bin/mysqld

і повертає:

/ usr / local / bin / mysqld: готовий до з'єднань.

Версія: '5.7.12' сокет: '/tmp/mysql.sock' порт: 3306 Homebrew


0

Я взагалі не зміг знайти сокет mysql, тому перевстановив сервер mysql (усі таблиці та налаштування phpmyadmin збереглися). Ось команди:

1) Встановити

sudo apt-get встановити mysql-сервер

2) Виконайте кроки налаштування терміналу

sudo mysql_secure_installation

3) Перевірити стан: (має повернути "Активний: активний (працює)")

статус systemctl mysql.service


0

На жаль, у моєму випадку нічого з перерахованого вище не спрацювало. Але нарешті я знайшов рішення.

Щоб знайти, де знаходиться файл mysql.sock, просто відкрийте менеджер xampp, виберіть MySQL і натисніть Налаштувати праворуч. На панелі конфігурації натисніть Відкрити файл конф. Та просто знайдіть mysql.sock, натиснувши ярлик CMD + F.

У моєму випадку було змінено власника mysql.sock, і мені довелося змінити його на root admin за допомогою: chmod root: admin mysql.sock

Після цього було здійснено доступ до бази даних.


-4

Я не можу допомогти з питанням №1, але щоб оновити locateбазу даних файлів, запустіть:

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