для меня это немного загадка. Единственный способ, которым я могу подключиться к MySQL, - это вызвать его через «127.0.0.1» ... например, мой скрипт подключения PHP НЕ будет работать с localhost
Я использую Mac OS X Lion, встроенный apache2, MySQL, PHP, phpMyAdmin
mysqladmin:
count 0
debug-check FALSE
debug-info TRUE
force FALSE
compress FALSE
character-sets-dir (No default value)
default-character-set auto
host (No default value)
no-beep FALSE
port 0
relative FALSE
socket (No default value)
sleep 0
ssl FALSE
ssl-ca (No default value)
ssl-capath (No default value)
ssl-cert (No default value)
ssl-cipher (No default value)
ssl-key (No default value)
ssl-verify-server-cert FALSE
user (No default value)
verbose FALSE
vertical FALSE
connect-timeout 43200
shutdown-timeout 3600
plugin-dir (No default value)
default-auth (No default value)
ping localhost
и посмотрите, что она говорит.Ответы:
MySQL попытается подключиться к сокету unix, если вы скажете ему подключиться к «localhost». Если вы скажете ему подключиться к 127.0.0.1, вы заставите его подключиться к сетевому сокету. Поэтому, вероятно, MySQL настроен на прослушивание только сетевого сокета, а не сокета файловой системы.
Что именно не так с вашим сокетом Unix, сказать сложно. Но я рекомендую вам прочитать эту страницу в справочном руководстве по MySQL. Это должно помочь вам.
ОБНОВЛЕНИЕ: на основе обновленного вопроса: параметр "сокет" должен выглядеть примерно так: "/var/lib/mysql/mysql.sock". Эта страница в Справочном руководстве содержит дополнительную информацию.
Здесь у вас есть начало моего файла /etc/my.cnf:
Ваш файл должен быть похожим. Тогда ваша проблема должна быть решена. Не забудьте перезапустить сервер MySQL перед его тестированием.
источник
Возможно, у вас включен IPv6, вполне возможно, что localhost преобразуется в локальный хост ipv6, который не определен в вашей конфигурации msql.
У меня также была проблема, когда я должен был добавить «localhost» вместо «127.0.0.1» в разрешенные подсети для этого пользователя, не понимаю почему (я использовал ipv4, и это было некоторое время назад), но его стоит попробовать.
источник
Для меня встроенный php OSX настроен на использование другого unix-сокета, чем mysql homebrew. Таким образом, он не может подключиться через localhost, который использует этот сокет.
Я исправил это быстрым взломом, используя символьный путь к сокету в php, чтобы указать на тот, который фактически использует mysql.
Следующие диагностические команды были очень полезны.
Проверьте пути к сокетам по умолчанию, используемые php и mysql:
Подключитесь через указанный сокет:
Определите, какой тип сокета mysql-клиент использует для подключения:
источник
Не могли бы вы проверить
mysql/conf/my.conf
(структура каталогов должна быть почти такой же на OSx), чтобы увидеть, еслиskip-networking
это не комментируется? Если это так, добавьте#
перед строкой и перезапустите MySQL-сервер.У меня фактически была похожая проблема некоторое время назад (хотя это не было в OSx), поэтому я подумал, что это может стоить того.
источник
PHP все еще пытается использовать расположение сокетов по умолчанию. Эта проблема может возникнуть, если вы переместили папку MariaDB / MySQL из / var / lib / mysql в другое место. Чтобы решить эту проблему, вы должны определить местоположение нового сокета в файле /etc/php.ini .
Будьте внимательны, в зависимости от того, какой драйвер вы используете, вам может потребоваться указать pdo_mysql.default_socket = !
Чтобы проверить текущий каталог, запустите следующую команду в mysql:
источник
Определен ли localhost в вашем
/private/etc/hosts
файле?источник
/private
? Никогда такого не виделЯ смог воссоздать ваши симптомы на моем тестовом боксе, надеюсь, это поможет.
В MySQL пользователи определяются двумя частями (имя и хост). По умолчанию в MySQL будет 3 корневых пользователя:
Поле пароля будет пустым (без пароля) или хэшем. Если вы устанавливаете пароль для одного конкретного пользователя, он не обновляет все автоматически, так как MySQL видит их как разных пользователей.
Например:
обновит пароль для
'root'@'127.0.0.1'
, но не'root'@'localhost'
или'root'@'localhost.localdomain'
Посмотрите на
skip_name_resolve
переменную:По умолчанию
skip_name_resolve
этоOFF
, и будет пытаться решить все IP - адреса в имена хостов. Например, если вы подключитесь как'root'@'127.0.0.1'
, MySQL изменит подключение к вам как'root'@'localhost'
.Если
ON
, MySQL будет видеть и подключиться'root'@'127.0.0.1'
и ,'root'@'localhost'
как отдельные пользователи. И они могут иметь или не иметь разные пароли, в зависимости от того, как они были установлены.Итак, сначала я бы проверил, чтобы увидеть любые различия в паролях
mysql> SELECT host,user,password FROM mysql.user WHERE user='root';
Если есть, вы можете исправить их или продолжить расследование.
Тогда я бы проверил
skip_name_resolve
:mysql> show variables like 'skip_name_resolve';
Если это так
ON
, я бы выяснил, где он установлен (например/etc/my.cnf
), и удалил бы его, если в этом нет необходимости.Надеюсь, это поможет вам!
источник
У меня была эта проблема, и я не мог понять это. Я перепробовал все, что мог, но безрезультатно.
Я обнаружил, что у меня есть .netrc в / root / с информацией в нем.
Я удалил его, и проблема исчезла.
Теперь можно войти в mysql, используя mysql -uroot -p без проблем.
Я знаю, что это старый пост, но надеюсь, что это кому-то поможет.
источник
Для меня изменение разрешений для публичного чтения в родительском каталоге mysql.sock устранило проблему:
источник
Для людей, которые используют CageFS с CloudLinux:
Я воссоздал,
/var/lib/mysql
потому что я перестраивал сервер MySQL с нуля ...который размонтировал путь от cagefs. Я знаю, что это не связано, но я использовал cPanel и CloudLinux. Я не мог проверить, почему сокетное соединение не будет работать, и, наконец, я понял.
добавление
/var/lib/mysql
к/etc/cagefs/cagefs.mp
(если уже есть переход к следующему шагу) и запускисправил проблему
источник
/etc/cagefs/cagefs.mp
но работаетcagefsctl --remount-all
исправлено. Спасибо чувак!Вы должны определить это в частном / etc / hosts, я думаю ... или просто использовать 127.0.0.1, потому что в любом случае это одно и то же, просто псевдоним.
источник