Can't connect to localhost MySQL server



2011-04-08

Erro: Can't connect to [local] MySQL server

Um cliente MySQL em Unix pode conectar ao servidor mysqld de dois modos diferentes: sockets Unix, que conectam através de um arquivo no sistema de arquivos (padrão /tmp/mysqld.sock) ou TCP/IP, que conecta através um número de porta. Sockets Unix são mais rápidos que TCP/IP mas só podem ser usados quando conectados ao servidor no mesmo computador. Sockets Unix são usados se você não especificar um nome de máquina ou se você especificar o nome de máquina especial localhost.
No Windows, se o servidor mysqld está rodando no 9x/Me, você só pode conectar via TCP/IP. Se o servidor estiver rodando no NT/2000/XP e o mysqld é iniciado com --enable-named-pipe, você também pode conectar com named pipes. O nome do named pipes é MySQL. Se você não der um nome de máquina quando conectar ao mysqld, um cliente MySQL tentará conectar primeiro ao named pipe, e se isto não funcionar ele irá conectar a porta TCP/IP. Você pode forçar o uso de named pipes no Windows usando . como nome de máquina.
O erro (2002) Can't connect to ... normalmente significa que não há um servidor MySQL rodando no sistema ou que você está usando um arquivo socket ou porta TCP/IP errado ao tentar conectar so servidor mysqld.
Inicie verificando (usando ps ou gerenciador de tarefas do Windows) que há um processo chamado mysqld executando em seu sistema! Se não houver nenhum processo mysqld, você deve iniciar um. Veja mais informações sobre isto na Seção 2.4.2, "Problemas Inicializando o Servidor MySQL".
Se um processo mysqld estiver em execução, você pode verificar o servidor tentando estas diferentes conexões (o número da porta e o caminho do socket devem ser diferente em sua consiguração, é claro):
shell> mysqladmin version shell> mysqladmin variables shell> mysqladmin -h `hostname` version variables shell> mysqladmin -h `hostname` --port=3306 version shell> mysqladmin -h 'ip for your host' version shell> mysqladmin --protocol=socket --socket=/tmp/mysql.sock version 
Note o uso de aspas para traz em vez de aspas para frente com o comando hostname; isto provoca a saída de hostname (que é, o nome de máquina atual) para ser substituído no comando mysqladmin.
Aqui estão algumas razões pela quais o erro Can't connect to local MySQL server pode ocorrer:
  • mysqld não está rodando.
  • Você está rodando em um sistema que usa MIT-pthreads. Se você estiver executando em um sistema que não possui threads nativas, o mysqld usa o pacote MIT-pthreads. Veja mais informações sobre isto na Seção 2.2.3, "Sistemas Operacionais suportados pelo MySQL". No entanto, nem todas as versões de MIT-pthreads suportam sockets Unix. Em um sistema sem suporte a sockets você sempre deve especificar o nome de máquina explicitamente ao conectar ao servidor. Tente usar este comando para verificar a conexão com o servidor:
    shell> mysqladmin -h `hostname` version 
  • Alguém removeu o socket Unix que o mysqld utiliza (por padrão /tmp/mysqld.sock). Você deve ter um trabalho cron que remove o socket MySQL (por exemplo, um trbalhoque remove arquivos antigos do diretório /tmp). Você sempre pode executar mysqladmin version e verificar que o socket que o mysqladmin está tentando usar realmente existe. A correção neste caso é alterar o trabalho cron para não remover mysqld.sock ou para colocar o socket em outro local. Veja mais informações sobre isto na Seção A.4.5, "Como Proteger ou AlterarHow to Protect or Change the MySQL Socket File /tmp/mysql.sock".
  • Você iniciou o servidor mysqld com a opção --socket=/path/to/socket. Se você alterar o caminho do socket para o servidor, você também deve notificar o cliente MySQL sobre o novo caminho. Você pode fazer isto fornecendo o caminho do socket como um argumento para o cliente. Veja mais informações sobre isto na Seção A.4.5, "Como Proteger ou AlterarHow to Protect or Change the MySQL Socket File /tmp/mysql.sock".
  • Você está usando Linux e uma thread finalizou (core dumped). Neste caso você deve matar as outras threads mysqld (por exemplo, com o script mysql_zap antes de você poder iniciar um novo servidor MySQL. Veja mais informações sobre isto na Seção A.4.1, "O Que Fazer Se o MySQL Continua Falhando".
  • Você pode não ter privilégios de leitura e escrita tanto no diretório que guarda o arquivo de socket quanto no próprio arquivo de socket. Neste caso você deve mudar o privilégio do diretório/arquivo ou reiniciar mysqld para que ele use um diretorio que você possa utilizar.
Se você obter a mensagem de erro Can't connect to MySQL server on alguma_maquina, você pode tentar o seguinte para descobrir qual é o problema:
  • Verifique se o servidor está funcionando fazendo telnet seu-servidor num-porta-tcp-ip e pressione Enter algumas vezes. Se houver um servidor MySQL em execução nesta porta você deve obter uma resposta que inclui o número da versão do servidor MySQL em execução. Se você obter um erro como telnet: Unable to connect to remote host: Connection refused, então não há nenhum servidor rodando na porta dada.
  • Tente conectar ao daemon mysqld na máquina local e verifique a porta TCP/IP que o mysqld está configurado para usar (variável port) com mysqladmin variables.
  • Verifique se o seu servidor mysqld não foi iniciado com a opção --skip-networking.
Postar um comentário