Pesquisa de site

Dicas úteis para solucionar erros comuns no MySQL


MySQL é um sistema de gerenciamento de banco de dados relacional de código aberto (RDMS) amplamente utilizado, de propriedade da Oracle. Ao longo dos anos, tem sido a escolha padrão para aplicativos baseados na Web e ainda permanece popular em comparação com outros mecanismos de banco de dados.

Leia também: Como instalar o MySQL mais recente no RHEL/CentOS e Fedora

O MySQL foi projetado e otimizado para aplicações web – ele é parte integrante dos principais aplicativos baseados na web, como Facebook, Twitter, Wikipedia, YouTube e muitos outros.

O seu site ou aplicativo web é desenvolvido com MySQL? Neste artigo detalhado, explicaremos como solucionar problemas e erros comuns no servidor de banco de dados MySQL. Descreveremos como determinar as causas dos problemas e o que fazer para resolvê-los.

1. Não consigo conectar ao servidor MySQL local

Um dos erros comuns de conexão de cliente para servidor no MySQL é “ERRO 2002 (HY000): Não é possível conectar ao servidor MySQL local através do soquete '/var/run/mysqld/mysqld.sock' (2) ”.

Este erro indica que não há nenhum servidor MySQL (mysqld) em execução no sistema host ou que você especificou um nome de arquivo de soquete Unix ou TCP/IP< incorreto. porta ao tentar conectar-se ao servidor.

Certifique-se de que o servidor esteja em execução verificando um processo chamado mysqld no host do servidor de banco de dados usando o comando ps e o comando grep juntos, conforme mostrado.

ps xa | grep mysqld | grep -v mysqld

Se os comandos acima não mostrarem saída, o servidor de banco de dados não está em execução. Portanto, o cliente não pode se conectar a ele. Para iniciar o servidor, execute o seguinte comando systemctl.

sudo systemctl start mysql        #Debian/Ubuntu
sudo systemctl start mysqld       #RHEL/CentOS/Fedora

Para verificar o status do serviço MySQL, use o seguinte comando.

sudo systemctl status mysql       #Debian/Ubuntu
sudo systemctl status mysqld      #RHEL/CentOS/Fedora

A partir da saída do comando acima, o serviço MySQL falhou. Nesse caso, você pode tentar reiniciá-lo e verificar seu status mais uma vez.

sudo systemctl restart mysql
sudo systemctl status mysql

Além disso, se o servidor estiver funcionando conforme mostrado pelo comando a seguir, mas você ainda vir o erro acima, você também deverá verificar se a porta TCP/IP está bloqueada por um firewall ou qualquer serviço de bloqueio de porta .

ps xa | grep mysqld | grep -v mysqld

Para encontrar a porta em que o servidor está escutando, use o comando netstat conforme mostrado.

sudo netstat -tlpn | grep "mysql"

2. Não consigo conectar ao servidor MySQL

Outro erro de conexão comumente encontrado é “(2003) Can’t connect to MySQL server on ‘server’ (10061) ”, o que significa que a conexão de rede foi recusada.

Aqui, comece verificando se há um servidor MySQL em execução no sistema conforme mostrado acima. Certifique-se também de que o servidor tenha conexões de rede habilitadas e que a porta de rede que você está usando para conectar seja aquela configurada no servidor.

Outros erros comuns que você provavelmente encontrará ao tentar se conectar ao servidor MySQL são:

ERROR 2003: Can't connect to MySQL server on 'host_name' (111)
ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)

Esses erros indicam que o servidor pode estar em execução, no entanto, você está tentando se conectar usando uma porta TCP/IP, um pipe nomeado ou um arquivo de soquete Unix diferente daquele em que o servidor está escutando.

3. Erros de acesso negado no MySQL

No MySQL, uma conta de usuário é definida em termos de um nome de usuário e do host ou hosts do cliente a partir dos quais o usuário pode se conectar ao servidor. Além disso, uma conta também pode ter credenciais de autenticação, como uma senha.

Embora existam muitas causas diferentes para erros de “Acesso negado”, uma das causas mais comuns está relacionada às contas MySQL que o servidor permite que programas clientes usem durante a conexão. Indica que o nome de usuário especificado na conexão não possui privilégios para acessar o banco de dados.

O MySQL permite a criação de contas que permitem que usuários clientes se conectem ao servidor e acessem dados gerenciados pelo servidor. A este respeito, se você encontrar um erro de acesso negado, verifique se a conta do usuário tem permissão para se conectar ao servidor através do programa cliente que você está usando e, possivelmente, do host de onde a conexão vem .

Você pode ver quais privilégios uma determinada conta possui executando o comando SHOW GRANTS conforme mostrado.

> SHOW GRANTS FOR 'tecmint'@'localhost';

Você pode conceder privilégios a um usuário específico em um banco de dados específico para o endereço IP remoto usando os seguintes comandos no shell MySQL.

> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100';
> flush privileges;

Além disso, erros de acesso negado também podem resultar de problemas de conexão com o MySQL, consulte os erros explicados anteriormente.

4. Conexão perdida com o servidor MySQL

Você pode encontrar esse erro devido a um dos seguintes motivos: má conectividade de rede, tempo limite de conexão ou um problema com valores BLOB maiores que max_allowed_packet. No caso de um problema de conexão de rede, certifique-se de ter uma boa conexão de rede, especialmente se estiver acessando um servidor de banco de dados remoto.

Se for um problema de tempo limite de conexão, especialmente quando o MySQL está tentando usar uma conexão inicial com o servidor, aumente o valor do parâmetro connect_timeout . Mas no caso de valores BLOB maiores que max_allowed_packet, você precisa definir um valor mais alto para max_allowed_packet em seu /etc /my.cnf arquivo de configuração na seção [mysqld] ou [client] conforme mostrado.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Se o arquivo de configuração do MySQL não estiver acessível para você, você poderá definir esse valor usando o seguinte comando no shell do MySQL.

> SET GLOBAL connect_timeout=100;
> SET GLOBAL max_allowed_packet=524288000;

5. Muitas conexões MySQL

Caso um cliente MySQL encontre o erro “muitas conexões”, significa que todas as conexões disponíveis estão em uso por outros clientes. O número de conexões (o padrão é 151) é controlado pela variável de sistema max_connections; você pode solucionar o problema aumentando seu valor para permitir mais conexões em seu arquivo de configuração /etc/my.cnf.

[mysqld]
max_connections=1000

6. MySQL sem memória

Caso você execute uma consulta utilizando o programa cliente MySQL e encontre o erro em questão, significa que o MySQL não possui memória suficiente para armazenar todo o resultado da consulta.

O primeiro passo é garantir que a consulta esteja correta, se estiver, faça o seguinte:

  • se você estiver usando o cliente MySQL diretamente, inicie-o com --quick switch, para desativar os resultados em cache ou
  • se você estiver usando o driver MyODBC, a interface do usuário (IU) de configuração terá uma guia avançada para sinalizadores. Marque “Não armazenar resultado em cache“.

Outra ótima ferramenta é o MySQL Tuner – um script útil que se conecta a um servidor MySQL em execução e dá sugestões de como ele pode ser configurado para obter maior desempenho.

sudo apt-get install mysqltuner     #Debian/Ubuntu
sudo yum install mysqltuner         #RHEL/CentOS/Fedora
mysqltuner

Para dicas de otimização e ajuste de desempenho do MySQL, leia nosso artigo: 15 dicas úteis para ajuste e otimização de desempenho do MySQL/MariaDB.

7. MySQL continua travando

Se você encontrar esse problema, você deve tentar descobrir se o problema é que o servidor MySQL morre ou se é o cliente que está com problema. Observe que muitas falhas de servidor são causadas por arquivos de dados ou arquivos de índice corrompidos.

Você pode verificar o status do servidor para estabelecer há quanto tempo ele está funcionando.

sudo systemctl status mysql       #Debian/Ubuntu
sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Alternativamente, execute o seguinte comando mysqladmin para encontrar o tempo de atividade do servidor MySQL.

sudo mysqladmin version -p 

Outras soluções incluem, mas não se limitam a, parar o servidor MySQL e ativar a depuração e, em seguida, iniciar o serviço novamente. Você pode tentar fazer um caso de teste que possa ser usado para repetir o problema. Além disso, abra uma janela de terminal adicional e execute o seguinte comando para exibir as estatísticas do processo MySQL enquanto você executa suas outras consultas:

sudo mysqladmin -i 5 status
OR
sudo mysqladmin -i 5 -r status 

Conclusão: determinar o que está causando um problema ou erro

Embora tenhamos examinado alguns problemas e erros comuns do MySQL e também fornecido maneiras de solucioná-los e resolvê-los, a coisa mais importante ao diagnosticar um erro é entender o que ele significa (em termos do que o está causando) .

Então, como você pode determinar isso? Os pontos a seguir irão orientá-lo sobre como determinar exatamente o que está causando o problema:

  1. O primeiro e mais importante passo é examinar os logs do MySQL que estão armazenados no diretório /var/log/mysql/. Você pode usar utilitários de linha de comando, como tail, para ler os arquivos de log.
  2. Se o serviço MySQL falhar ao iniciar, verifique seu status usando systemctl ou use o comando journetctl (com o sinalizador -xe) no systemd para examinar o problema.
  3. Você também pode examinar o arquivo de log do sistema, como /var/log/messages ou similar, para verificar os motivos do seu problema.
  4. Tente usar ferramentas como Mytop, Glances, top, ps ou htop para verificar qual programa está consumindo toda a CPU ou bloqueando a máquina ou para inspecionar se você está ficando sem memória, espaço em disco, descritores de arquivo ou algum outro recurso importante .
  5. Supondo que o problema seja algum processo descontrolado, você sempre pode tentar eliminá-lo (usando o utilitário pkill ou kill) para que o MySQL funcione normalmente.
  6. Supondo que o servidor mysqld esteja causando problemas, você pode executar o comando: mysqladmin -u root ping ou mysqladmin -u root processlist para obter qualquer resposta dele.
  7. Se o problema estiver no seu programa cliente ao tentar se conectar ao servidor MySQL, verifique por que ele não está funcionando bem e tente obter qualquer saída dele para fins de solução de problemas.

Você também pode gostar de ler estes seguintes artigos relacionados ao MySQL:

  1. Aprenda MySQL/MariaDB para iniciantes – Parte 1
  2. Como monitorar bancos de dados MySQL/MariaDB usando Netdata no CentOS 7
  3. Como transferir todos os bancos de dados MySQL do servidor antigo para o novo
  4. Mytop – Uma ferramenta útil para monitorar o desempenho do MySQL/MariaDB no Linux
  5. 12 Práticas recomendadas de segurança MySQL/MariaDB para Linux

Para obter mais informações, consulte o manual de referência do MySQL sobre problemas e erros comuns. Ele lista de forma abrangente problemas comuns e mensagens de erro que você pode encontrar ao usar o MySQL, incluindo os que discutimos acima e muito mais.