isso é um mistério para mim. A única maneira de me conectar ao MySQL é se eu chamá-lo via "127.0.0.1" ... por exemplo, meu script de conexão PHP NÃO funcionará com o localhost
Estou executando o Mac OS X Lion, apache2 embutido, 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
e veja o que diz.Respostas:
O MySQL tentará se conectar ao soquete unix se você solicitar que se conecte ao "localhost". Se você solicitar que ele se conecte ao 127.0.0.1, você o está forçando a se conectar ao soquete de rede. Portanto, provavelmente você tem o MySQL configurado para ouvir apenas o soquete da rede e não o soquete do sistema de arquivos.
O que exatamente está errado com seu soquete unix é difícil de dizer. Mas eu recomendo que você leia esta página no guia de referência do MySQL. Isso deve ajudá-lo.
ATUALIZAÇÃO: Com base na pergunta atualizada: O parâmetro "socket" deve ser algo como isto: "/var/lib/mysql/mysql.sock". Esta página no Manual de referência tem mais algumas informações.
Aqui você tem o início do meu arquivo /etc/my.cnf:
Seu arquivo deve ser semelhante. Então seu problema deve ser resolvido. Não esqueça de reiniciar o servidor MySQL antes de testá-lo.
fonte
Você pode ter o IPv6 ativado, seu host local muito possível é resolvido para o host local ipv6, que não está definido na sua configuração do msql.
Eu também tive um problema em que eu tive que adicionar 'localhost' no lugar de '127.0.0.1' às sub-redes permitidas para esse usuário, não entendo o porquê (eu estava usando o ipv4 e isso foi há algum tempo), mas vale a pena tentar.
fonte
Para mim, o php embutido no OSX está configurado para usar um soquete unix diferente do mysql do homebrew. Portanto, ele não pode se conectar via localhost, que utiliza esse soquete.
Corrigi-o com um hack rápido, simbolizando o caminho do soquete configurado do php para apontar para o que o mysql realmente usa.
Os seguintes comandos de diagnóstico foram muito úteis.
Verifique os caminhos de soquete padrão usados pelo php e mysql:
Conecte usando um soquete especificado:
Determine que tipo de cliente mysql de soquete está usando para conectar:
fonte
Você poderia verificar
mysql/conf/my.conf
(a estrutura de diretórios deve ser praticamente a mesma no OSx) para ver se nãoskip-networking
é comentada? Nesse caso, adicione um#
na frente da linha e reinicie o servidor mysql.Na verdade, tive um problema semelhante há um tempo (embora isso não estivesse no OSx), então pensei que valeria a pena tentar.
fonte
O PHP ainda está tentando usar o local padrão do soquete. Esse problema pode aparecer se você tiver movido a pasta MariaDB / MySQL de / var / lib / mysql para outro local. Para resolver o problema, você precisa definir a localização do novo soquete no arquivo /etc/php.ini .
Cuidado, dependendo do driver que você usa, pode ser necessário especificar pdo_mysql.default_socket = !
Para verificar seu diretório atual, execute o seguinte comando no mysql:
fonte
O localhost está definido no seu
/private/etc/hosts
arquivo?fonte
/private
? Nunca vi isso antesConsegui recriar seus mesmos sintomas na minha caixa de teste, espero que isso ajude.
No MySQL, os usuários são definidos por duas partes (nome e host). Por padrão, o MySQL terá 3 usuários root:
O campo da senha ficará em branco (sem senha) ou terá um hash armazenado. Se você definir a senha para um usuário específico, ele não atualizará tudo automaticamente, pois o MySQL as vê como usuários diferentes.
Por exemplo:
atualizará a senha para
'root'@'127.0.0.1'
, mas não'root'@'localhost'
ou'root'@'localhost.localdomain'
Dê uma olhada na
skip_name_resolve
variável:Por padrão ,
skip_name_resolve
éOFF
e tentará resolver todos os endereços IP para nomes de host. Por exemplo, se você se conectar como'root'@'127.0.0.1'
, o MySQL mudará se conectar como'root'@'localhost'
.Se for
ON
, o MySQL verá e se conectará'root'@'127.0.0.1'
e'root'@'localhost'
como usuários separados. E eles podem ou não ter senhas diferentes, dependendo de como foram definidas.Então, primeiro, gostaria de verificar se há diferenças de senha:
mysql> SELECT host,user,password FROM mysql.user WHERE user='root';
Se houver, você pode corrigi-los ou continuar investigando.
Então eu verificaria
skip_name_resolve
:mysql> show variables like 'skip_name_resolve';
Se estiver
ON
, eu descobriria onde está sendo definido (por exemplo/etc/my.cnf
) e o removeria, a menos que haja necessidade.Espero que isso ajude você!
fonte
Eu estava tendo esse problema e não consegui descobrir. Tentei tudo o que pude, sem sucesso.
Eu descobri que tinha um .netrc em / root / que continha informações.
Eu o apaguei e o problema desapareceu.
Capaz de efetuar login no mysql usando mysql -uroot -p sem problemas agora.
Eu sei que este é um post antigo, mas espero que isso ajude alguém.
fonte
Para mim, alterar as permissões para serem publicamente legíveis no diretório pai do mysql.sock corrigiu o problema:
fonte
Para pessoas que estão usando o CageFS com CloudLinux:
Recriei
/var/lib/mysql
porque estava reconstruindo o servidor MySQL do zero ...que desmontou o caminho dos cagefs. Sei que não está relacionado, mas estava usando o cPanel e o CloudLinux. Não pude verificar por que a conexão do soquete não funcionaria e, finalmente, percebi.
adicionando
/var/lib/mysql
a/etc/cagefs/cagefs.mp
(se já houver, prossiga para a próxima etapa) e executandocorrigiu o problema
fonte
/etc/cagefs/cagefs.mp
mas estava sendo executadocagefsctl --remount-all
. Valeu cara!você tem que defini-lo em privado / etc / hosts, eu acho ... ou apenas usar 127.0.0.1, porque é a mesma coisa de qualquer maneira, apenas um alias.
fonte