2009-04-14 2 views
61

Мне просто пришлось переустановить mysql, и у меня возникла проблема с запуском. Он не может найти сокет (mysql.sock). Проблема в том, что я не могу. В моем терминале Mac OS X 10.4 я печатаю: locate mysql.sock, и я возвращаюсь /private/tmp/mysql.sock. Имеет смысл, что файл сокета существует в этом месте, но на самом деле это не так.Не удалось найти mysql.sock

  1. Как найти файл сокета?

  2. Если локация возвращает ложное местоположение, у нее должна быть какая-то память и, возможно, индексы. Как обновить этот индекс?

ответ

118

ответить на первую часть вашего вопроса:

выполнения

% mysqladmin variables 

и проверить переменную 'гнездо'

+1

Я бы полностью измените этот ответ на правильный, если позволите. Если бы я знал это раньше! –

+34

Ran 'mysqladmin variables'. Что делать, когда 'error: 'Не удается подключиться к локальному серверу MySQL через сокет' /tmp/mysql.sock '(2)''? :) –

+0

Я получаю ту же ошибку, что и @afEkenholm, и не смог найти решение. Я запускал 'sudo find/-name mysql.sock' из корневого каталога и не смог найти mysql.sock в любом месте системы. Я установил MySQL, используя 64-разрядный файл dmg для Mac OS 10.7. Запуск Маверикс в настоящее время. –

-4

Я не могу помочь с вопросом # 1, но для обновления locate «s файл базы данных, выполните следующую команду:

updatedb 
+0

, который не работает – Tony

+2

Итак, почему это принятый ответ? –

15

Файл сокета должен быть создан автоматически при запуске демона MySQL.

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

Чтобы узнать, где файл должен быть, использование:

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

Или mysql --verbose --help | grep^socket – Ondrej

+1

@ Ondrej, конечно, это говорит вам, где _client_ думает, что это выглядит? Точка запуска 'mysqld' заключается в том, что он должен сказать вам, где на самом деле стоит _server_! – Alnitak

+0

на моей установке xampp Я не мог найти демона, так что пробовал без него, и это сработало :) ... что случилось за кулисами, я понятия не имею ... – Ondrej

0

Чтобы обновить базу данных местонахождения Я бежал

/usr/libexec/locate.updatedb 
7

Моя проблема была также в файле mysql.sock.

Во время процесса установки Друпала, я должен был сказать, какие базы данных я хочу использовать , но моя база данных не была найдена

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

система ищет mysql.sock но в неправильном каталоге

все, что вам нужно сделать, это связать его;)

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

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

26

Это решило мою проблему

mysql_config --socket 

UPDATE

mysql_config может сказать нам, где файл MySQL.носок должен быть, но в моем случае файл не существовал. Таким образом, я удалил my.cnf:

sudo rm -rf /etc/my.cnf 

А затем перезапустить MySQL:

brew services restart mysql 

Файл был создан и MySQL теперь работает хорошо.

+6

Эта команда сообщает вам, где mysql.sock отвечает на вопрос –

+3

Эта команда не сообщает вам, где находится файл. Он сообщает вам, где ищет mysql: настройка конфигурации для -socket. – morksinaanab

0
$ mysqladmin variables | grep sock 

Попробуйте это вместо этого, это выдаст требуемый результат, избавившись от несвязанной информации.

2

Исходные вопросы, похоже, возникают из-за путаницы в отношении а) где находится файл, и б) где его ищут (и почему мы не можем найти его там, когда мы делаем locate или grep). Я думаю, что идея Алнитака заключалась в том, что вы хотите найти, с чем это связано, но grep не покажет вам ссылку, верно? Файл там не живет, так как это ссылка, это просто указатель. Вам все равно нужно знать, куда поместить ссылку.

мой файл sock определенно находится в/tmp, и ERROR, который я получаю, ищет его в/var/lib/(не просто/var). Я привязался к/var и/var/lib сейчас, и я все еще я получаю сообщение об ошибке «Не удается подключиться к локальному серверу MySQL через сокет» var/lib/mysql.sock (2) ».

Обратите внимание на (2) после ошибки .... Я нашел в другом потоке, что это означает, что сокет действительно может быть использован, но что-то не так с самим сокетом - так, чтобы выключить машину - полностью - так, чтобы сокет закрывался. Затем перезапуск должен исправить. Я пробовал это, но это не сработало для меня (теперь я сомневаюсь, если я перезапустил слишком быстро?) Может быть, это будет решение для кого-то другого.

8

Это нашел для меня:

netstat -ln | grep mysql 

Mac OSX

3

Я получил точный путь, используя:

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

Поскольку это только возвращает путь и не требует какого-либо входа вы можете использовать его в сценарии оболочки.

Для этого в настоящий момент на вашем компьютере должна быть установлена ​​MySQL. Работает и для MariaDB.

+1

это помогло мне! Спасибо! –

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) Как я могу обновить найти индекс

Обновить локации дб с этой командой.

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: ready for connections.

Version: '5.7.12' socket: '/tmp/mysql.sock' port: 3306 Homebrew

0

Я не мог найти MySQL сокет на всех так переустановить сервер MySQL (все таблицы и настройки phpmyadmin сохранены). Вот команды:

1) Установите

sudo apt-get install mysql-server

2) Следуйте терминальные конфигурации шагов

sudo mysql_secure_installation

3) Проверьте состояние: (Если вернуться "Активный: активный (бег)")

systemctl status mysql.service