Что должен содержать 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
.