Não é possível conectar-se ao servidor MySQL local por meio do soquete

2

Eu estava tentando ajustar o desempenho de um servidor mysql em execução executando este comando:

mysqld_safe --key_buffer_size=64M --table_cache=256 --sort_buffer_size=4M --read_buffer_size=1M &

Depois disso, não consigo conectar o mysql do servidor onde o mysql está rodando. Eu recebo este erro:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

No entanto, felizmente ainda posso me conectar ao mysql remotamente. Então, todos os meus servidores web ainda têm acesso ao mysql e estão rodando sem nenhum problema. Devido a isso, porém, eu não quero tentar reiniciar o servidor mysql, pois isso provavelmente irá bagunçar tudo.

Agora eu sei que o mysqld_safe está iniciando o servidor mysql, e como o servidor mysql já estava rodando, acho que é algum tipo de problema com dois servidores mysql rodando e ouvindo a mesma porta.

Existe alguma maneira de resolver este problema sem reiniciar o servidor mysql inicial?

UPDATE : Isso é o que ps xa | grep "mysql" diz:

11672 ?        S      0:00 /bin/sh /usr/bin/mysqld_safe
11780 ?        Sl   175:04 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
11781 ?        S      0:00 logger -t mysqld -p daemon.error
12432 pts/0    R+     0:00 grep mysql

UPDATE 2 : Tentei reiniciar agora. Parar funcionou bem, mas começou a falhar. Para minha surpresa, o mysql-server ainda está rodando sem problemas, então eu realmente não sei o que parou.

UPDATE 3 : Eu tenho certeza que este é o problema agora: Quando eu iniciei o mysql na primeira vez que ele escreveu seu processid para /var/run/mysqld/mysqld.pid e o socket para /var/run/mysqld/mysqld.sock.

Então, quando eu executei o comando mysqld_safe, ele removeu esses arquivos. Agora eu não posso parar o servidor mysql, pois o comando stop precisa desses arquivos. Existe alguma maneira eu posso restaurar esses arquivos? Eu acho que o arquivo pid é apenas um arquivo com o id do processo? Eu não quero apenas matar o processo porque existem muitas gravações neste servidor e matar o mysql normalmente termina em bancos de dados corrompidos.

    
por Martin 19.05.2010 / 14:39

3 respostas

5

Verifique o bind-address no seu my.cnf . Deve ser 0.0.0.0 para permitir conexões locais e remotas.

Verifique com ps xa | grep mysql quantas instâncias são executadas.

Editar
Aparentemente:

A MySQL client on Unix can connect to the mysqld server in two different ways: By using a Unix socket file to connect through a file in the file system (default /tmp/mysql.sock), or by using TCP/IP, which connects through a port number. A Unix socket file connection is faster than TCP/IP, but can be used only when connecting to a server on the same computer. A Unix socket file is used if you don't specify a host name or if you specify the special host name localhost.

Verifique aqui para obter uma dica útil.

Edit2
Uma das possíveis razões de Can't connect to local MySQL server , parece ser o problema aqui:

Someone has removed the Unix socket file that mysqld uses (/tmp/mysql.sock by default). For example, you might have a cron job that removes old files from the /tmp directory. You can always run mysqladmin version to check whether the Unix socket file that mysqladmin is trying to use really exists. The fix in this case is to change the cron job to not remove mysql.sock or to place the socket file somewhere else. See Section B.5.4.5, “How to Protect or Change the MySQL Unix Socket File”.

Martin, certifique-se de ter socket = /var/run/mysqld/mysqld.sock em my.cnf, acredito que o mysqld restart irá resolver o seu problema, ele deve recriar o mysqld.sock e você deve ser capaz de se conectar localmente.

    
por 19.05.2010 / 14:44
2

O que está no seu log de erro de log do mysql (diferentes distros têm locais diferentes)?

Quais são as suas configurações de instância? Conecte-se ao mysql e execute o comando

show global variabes

Observe as variáveis socket e log-error

EDITAR : Se o mysql está rodando e você pode se conectar a ele, você pode desligá-lo usando o comando

mysqladmin shutdown
    
por 19.05.2010 / 21:46
1

Basta adicionar o sinalizador -h ao seu nome de host ao conectar-se para vê-lo, se funcionar. Também tente adicionar o sinalizador --socket = ao MySQLd

mysql -h meu_servidor.null.com -P 3306 -u bob -P dbname

    
por 23.05.2010 / 10:20

Tags