Não é possível conectar ao MySQL usando 'localhost', mas usando '127.0.0.1' está tudo bem?

12

Meu arquivo / etc / hosts fica assim:

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Descobri ao construir o servidor que, embora eu pudesse executar ping localhost com sucesso, em certos arquivos de configuração de serviços como Postfix, Apache e Dovecot, eu precisava especificar em 127.0.0.1vez de localhostfazê-los funcionar.

Eu também precisava alterar os arquivos de configuração de determinados sites direcionados a bancos de dados, que costumavam localhostse conectar ao MySQL.

Eu tentei várias modificações no hostsarquivo, mas nada que eu tentei até agora ajudou.

O servidor está executando o Ubuntu 12.04.02 LTS. Ele não possui o selinux instalado e a situação acima permanece mesmo após a configuração das políticas padrão do IPtables para aceitá-las e liberá-las.

Peter Snow
fonte

Respostas:

15

Uma coisa que você pode verificar é (o que requer que você faça login no console do MySQL) - verifique se você tem permissões para acessar rootvia localhost.

mysql -h 127.0.0.1 -u root -p

- Depois de fazer login com sucesso -

mysql> select user,host from mysql.user;
+------+--------------------------------+
| user | host                           |
+------+--------------------------------+
| root | 127.0.0.1                      | 
| root | ::1                            |
| root | localhost                      | <-- Make sure you have a localhost entry for root
+------+--------------------------------+
3 rows in set (0.00 sec)

Apenas jogá-lo lá fora, caso seja esse o problema.

drewrockshard
fonte
Sinto que você está no caminho certo. Eu fiz isso e posso ver que, embora a raiz e alguns outros usuários tenham sido criados para o host local, todos aqueles criados pelo painel de controle de hospedagem são todos 127.0.0.1(exceto um que é %). Acho que isso provavelmente revela o suficiente para que eu conserte, então provavelmente aceitarei sua resposta em pouco tempo.
Peter Snow
Obrigado pela ajuda! Eu gostaria de acrescentar que é necessário reiniciar o servidor mysql após atualizar a tabela mysql.user para que a alteração tenha efeito.
precisa saber é o seguinte
Apesar de aceito, este não é geralmente (nunca?) O problema para o mysql. Veja a resposta da EEAA em vez disso (o mysql interpreta localhostcomo em socketvez de TCP).
Home
8

A maioria dos clientes MySQL é estranha no fato de que, se você especificar o host como localhost, eles o aliam a uma conexão de soquete em vez de uma conexão TCP. Suas opções são ficar com 127.0.0.1ou, se o cliente suportar (como o binário da CLI do mysql faz com a --protocolflag), forçá-lo a usar TCP em vez de um soquete unix.

EEAA
fonte
Obrigado EEAA. O problema é que coisas como o instalador do Joomla falham. Se você especificar em 127.0.0.1vez de localhostno campo hostname durante a instalação, os caminhos da instalação ficarão confusos, causando outros erros, mas a especificação de localhost falhará ao conectar o banco de dados! O que causou essa situação? Por que eu tenho isso?
Peter Snow
3
@PeterSnow Configure um soquete de domínio Unix na sua configuração do MySQL.
Michael Hampton
Obrigado @MichaelHampton Eu procurei na última meia hora e não consigo encontrar como configurar isso. Você pode me indicar um artigo ou me dar uma ideia, por favor? Eu tenho socket = /var/run/mysqld/mysqld.sockem my.cnfeo arquivo é existente, de propriedade de mysql com permissões 777. Obrigado.
Peter Snow
@PeterSnow Você reiniciou o mysqld depois de fazer essa alteração?
EEAA
Atualmente, estou tentando usá-lo através do script de instalação do Joomla. A página http solicita o nome do host. Se eu escolher, 127.0.0.1ele funcionará (mas o script usará a entrada posteriormente e falhará porque espera um nome resolvível como localhost), mas se eu usar a localhostconexão para criar o banco de dados falhará.
Peter Snow
1

Você pode verificar a permissão como esta:

[learner@localhost ~]$ sudo netstat -npa | grep mysqld  
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6284/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     233040 6284/mysqld         /var/lib/mysql/mysql.sock

Se estiver escutando 0 0.0.0.0:*, significa que todos podem acessar esse mysql.

você pode editar a ligação para isso no arquivo my.conf. No caminho padrão do Linux, isso é:

[learner@localhost ~]$ sudo vi /etc/my.cnf

Adicione essas linhas no arquivo my.conf para permitir o ip que você deseja.

bind-address = 127.0.0.1   
bind-address = 0.0.0.0
a_learner
fonte
Obrigado a_learner, pela informação, embora eu já tenha aceitado uma resposta.
Peter Snow
0

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 .

mysqli.default_socket =/newDBLocation/mysql/mysql.sock
joelschmid
fonte
0

Resolvi esse problema criando um link simbólico sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock,. Mas primeiro tenho que criar uma pasta /var/run/mysqld/porque a pasta não existia inicialmente.

saharul
fonte
-1

Você precisa de um mysql.sock em / tmp

ln -s /var/lib/mysql/mysql.sock mysql.sock

deve funcionar bem depois disso.

William
fonte