Dicas úteis para solucionar erros comuns no MySQL


O MySQL é um sistema de gerenciamento de banco de dados relacional de software livre amplamente utilizado ( RDMS ) de propriedade do Oracle . Ele tem sido, ao longo dos anos, a opção padrão para aplicativos baseados na Web e continua sendo popular em comparação com outros mecanismos de banco de dados.

O MySQL foi projetado e otimizado para aplicativos da Web - forma parte integrante dos principais aplicativos baseados na Web, como Facebook , Twitter , Wikipédia , YouTube e muitos outros.

Seu site ou aplicativo da Web é ativado pelo MySQL ? Neste artigo detalhado, explicaremos como solucionar problemas e erros comuns no servidor de banco de dados do MySQL . Descreveremos como determinar as causas dos problemas e o que fazer para resolvê-los.

1. Não é possível conectar-se ao servidor MySQL local

Um dos erros comuns de conexão de cliente para servidor no MySQL é “ ERROR 2002 (HY000): Não é possível conectar-se ao servidor MySQL local por meio 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 errado ou TCP/IP port ao tentar se conectar ao servidor.

Assegure-se de que o servidor esteja executando verificando um processo chamado mysqld no seu host do servidor de banco de dados usando o comando ps e o comando grep juntos, como mostrado.

$ ps xa | grep mysqld | grep -v mysqld

Se os comandos acima não mostrarem nenhuma saída, o servidor de banco de dados não estará 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 sendo executado conforme mostrado pelo comando a seguir, mas você ainda vir o erro acima, verifique também 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 localizar a porta em que o servidor está escutando, use o comando netstat, conforme mostrado.

$ sudo netstat -tlpn | grep "mysql"

2. Não é possível conectar-se ao servidor MySQL

Outro erro de conexão comumente encontrado é “ (2003) Não é possível conectar-se ao servidor MySQL no 'servidor' (10061) ”, o que significa que a conexão de rede foi recusada.

Aqui, comece checando se existe um servidor MySQL rodando no sistema como mostrado acima. Verifique também se o servidor possui conexões de rede ativadas e se a porta de rede que você está usando para se conectar é 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 , pipe nomeado ou arquivo de soquete Unix diferente daquele no qual o servidor está atendendo.

3. Acesso Negado Erros 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 de erros “ Acesso negado ”, uma das causas mais comuns está relacionada às contas do MySQL que o servidor permite que programas clientes usem ao se conectar. Indica que username especificado na conexão não tem 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 acesso negado erro , 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 o host do qual a conexão está vindo .

Você pode ver quais privilégios uma dada conta tem executando o comando SHOW GRANTS como mostrado.

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

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

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

Além disso, acesso negado erros também pode resultar de problemas com a 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: conectividade de rede deficiente , 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, verifique se você tem 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 , particularmente 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 o 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ê, então você pode definir este 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

No caso de um cliente MySQL encontrar o erro “ demasiadas ligações ”, significa que todas as ligaçõ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. Sem Memória MySQL

Caso você execute uma consulta usando o programa cliente MySQL e encontre o erro em questão, isso 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 for, faça o seguinte:

  • if you are using MySQL client directly, start it with --quick switch, to disable cached results or
  • if you are using the MyODBC driver, the configuration user interface (UI) has an advanced tab for flags. Check “Do not cache result“.

Outra grande ferramenta é o Tuner do MySQL - um script útil que se conectará a um servidor MySQL em execução e dará sugestões de como ele pode ser configurado para um desempenho mais alto.

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

Para dicas de otimização de desempenho e otimização do MySQL, leia nosso artigo: 15 Dicas Úteis de Otimização e Otimização do Desempenho do MySQL/MariaDB.

7. MySQL Continua Falhando

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

Você pode verificar o status do servidor para estabelecer por quanto tempo ele está ativo e em execução.

$ 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, depois iniciar o serviço novamente. Você pode tentar criar 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 estatísticas do processo MySQL enquanto executa suas outras consultas:

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

Embora tenhamos olhado alguns problemas e erros comuns do MySQL e também fornecido maneiras de solucionar problemas e resolvê-los, a coisa mais importante no diagnóstico de um erro é entender o que significa (em termos do que está causando isso) .

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

  1. The first and most important step is to look into the MySQL logs which are stored in the directory /var/log/mysql/. You can use command line utilities such as tail to read through the log files.
  2. If MySQL service fails to start, check its status using systemctl or use the journetctl (with the -xe flag) command under systemd to examine the problem.
  3. You can also examine system log file such as /var/log/messages or similar for reasons for your problem.
  4. Try using tools such as Mytop, glances, top, ps, or htop to check which program is taking all CPU or is locking the machine or to inspect whether you are running out of memory, disk space, file descriptors, or some other important resource.
  5. Assuming that problem is some runaway process, you can always try to kill it (using the pkill or kill utility) so that MySQL works normally.
  6. Supposing that the mysqld server is causing problems, you can run the command: mysqladmin -u root ping or mysqladmin -u root processlist to get any response from it.
  7. If the problem is with your client program while trying to connect to the MySQL server, check why it is not working fine, try to get any output from it for troubleshooting purposes.

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

  1. Learn MySQL / MariaDB for Beginners – Part 1
  2. How to Monitor MySQL/MariaDB Databases using Netdata on CentOS 7
  3. How to Transfer All MySQL Databases From Old to New Server
  4. Mytop – A Useful Tool for Monitoring MySQL/MariaDB Performance in Linux
  5. 12 MySQL/MariaDB Security Best Practices for Linux

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