Что должен содержать mysqld.sock, почему у меня его нет?

Кто-нибудь знает, почему мой /var/run/mysqld/mysqld.sock файл сокета не будет на моем компьютере при установке (или переустановке) MySQL 5.1?

Прямо сейчас, когда я пытаюсь запустить сервер с mysqld, я получаю такие ошибки, как Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect, но создание пустого файла с таким именем (как предлагалось на форумах по Ubuntu) не увенчалось успехом.

У меня были и mysql, и postgres, которые хорошо работали, пока я не перешел на natty некоторое время назад; Я часами гулял по обеим базам данных, пытаясь выяснить, что происходит. Я могу отказаться от postgres, но я не могу работать без рабочей копии mysql.

Самая странная часть: я использую Kubuntu, и я понимаю, что KDE использует mysql для хранения пользовательских разрешений и т. Д. У меня не возникает никаких странных проблем с разрешениями; Могу ли я считать, что это означает (как-то?) MySQL на самом деле работает?

Может быть, эти файлы сокетов живут в другом месте в natty? Будет ли проще просто переустановить ОС fresh? На данный момент я открыт для любых предложений, которые перестанут тратить мое время.

6 ответов

Решение

Файл сокета на самом деле не содержит данных, он переносит их. Это особый, необычный тип файла, созданный с помощью специальных системных вызовов / команд. Это не обычный файл.

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

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

Я рекомендую удалить любой файл, который вы положили в папку. Специальный файл сокета создается сервером.

Когда вы указываете host=localhostКлиент MySQL попытается войти на сервер MySQL, используя именованный канал Unix, который требует .sock файл.

Это можно обойти, указав host=127.0.0.1. Это заставит клиента mysql использовать TCP для подключения к серверу.

Взято из документации MySQL:

mysql --host=127.0.0.1 --port=3306 --user=your_uname --password=your_pass

Сокет - это специальный псевдофайл, используемый для передачи данных путем чтения и записи, а не для хранения данных.

Файл сокета создается при запуске службы и удаляется при ее завершении. Расположение файла определяется в /etc/my.cnf вот так:

[mysqld]
socket=/var/run/mysql/mysql.sock

В моем случае работает mysqld_safe создал новый mysqld.sock файл.

$ cd /etc/init.d/
$ mysqld_safe

Вероятно, вы не получите ответ, но если вы перезапустите сеанс, файл mysqld.sock будет где-то. Найдите это с

$ sudo find / -type s | grep mysqld.sock

У меня была такая же проблема с отсутствующим mysqld.sock. Я пошел в каталог, который содержал MySQL, а именно /usr/bin в моем случае. Затем я выпустил команду

mysql mysql --host=localhost --password=whatever --port=3306

Двойной mysql - это не опечатка, а mysql - это база данных, которая всегда будет присутствовать в новой установке MySQL. я не знаю, если --host, --password или же --port необходимы, но так как это работает для меня, используя эти параметры, я включаю их. Как только появился MySQL, я вошел в таблицу пользователей, чтобы установить пароль для пользователя root. Как только MySQL подошел, был создан отсутствующий файл сокета. Я надеюсь, что это помогает кому-то, так как я боролся в течение нескольких дней.

Если вы используете nginx php-fastcgi и у вас есть ошибка 502 Bad Gateway, вам нужно посмотреть конфигурацию вашего виртуального хоста в файле конфигурации nginx. Вы должны установить или исправить fastcgi_pass parameter.The fastcgi_pass переменная для установки сокетного соединения между nginx и php CGI.

Другая проблема заключается в том, что двоичный стартовый скрипт может пропустить следующие записи (важные), открытые с помощью: nano /usr/bin/php-fastcgi

SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid

Полное содержание моего начального скрипта /usr/bin/php-fastcgi:

#!/bin/bash

FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid
CHILDREN=6
PHP5=/usr/bin/php5-cgi

/usr/bin/spawn-fcgi -s $SOCKET -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5

В моем случае мне пришлось переустановить mysql с помощью: apt install mysql-server-5.7 (пожалуйста, проверьте перед выполнением текущей версии sql-server), чтобы вернуться mysqld.sock.

Другие вопросы по тегам