Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Dicas úteis para solucionar erros comuns no MySQL


MySQL é um sistema de gerenciamento de banco de dados relacional de código aberto amplamente usado (RDMS ) 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.

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

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

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


Um dos erros comuns de conexão cliente-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á MySQL servidor (mysqld) executando no sistema host ou que você especificou um nome de arquivo de soquete Unix incorreto ou TCP/IP porta ao tentar se conectar ao servidor.

Certifique-se de que o servidor esteja executando 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 MySQL status do serviço, use o comando a seguir.
$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

A partir da saída do comando acima, o MySQL serviço 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 o TCP/IP porta está bloqueada por um firewall ou qualquer serviço de bloqueio de porta.
$ ps xa | grep mysqld | grep -v mysqld

Para localizar a porta na qual o servidor está escutando, use o comando netstat conforme mostrado.
$ sudo netstat -tlpn | grep "mysql"

2. Não é possível 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 existe um MySQL servidor rodando no sistema como 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 se 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 um TCP/IP porta, pipe nomeado ou arquivo de soquete Unix diferente daquele em que o servidor está escutando.

3. Erros de acesso negado no MySQL


Em MySQL , uma conta de usuário é definida em termos de um nome de usuário e o 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 “Acesso negado ” erros, uma das causas comuns está relacionada às contas MySQL que o servidor permite que os programas clientes usem ao se conectar. Indica que nome de usuário especificado na conexão não tem privilégios para acessar o banco de dados.

MySQL permite a criação de contas que permitem que usuários clientes se conectem ao servidor e acessem os dados gerenciados pelo servidor. Nesse sentido, se você encontrar um erro de acesso negado , verifique se a conta de 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 está vindo.

Você pode ver quais privilégios uma determinada conta tem executando o comando SHOW GRANTS comando como 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 do MySQL.
> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100';
> flush privileges;

Além disso, erros de acesso negado também pode resultar de problemas com a conexão ao 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 ruim , tempo limite de conexão ou um problema com BLOB valores 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 tempo limite de conexão problema, especialmente quando MySQL está tentando usar uma conexão inicial com o servidor, aumente o valor do connect_timeout parâmetro. Mas no caso de valores BLOB que são 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 em [mysqld] ou [client] seção como mostrado.
[mysqld]
connect_timeout=100
max_allowed_packet=500M

Se o MySQL configuration 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 MySQL o cliente encontra as “conexões demais ” erro, 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 pelo max_connections variável do sistema; você pode remediar o problema aumentando seu valor para permitir mais conexões em seu /etc/my.cnf arquivo de configuração.
[mysqld]
max_connections=1000

6. MySQL sem memória


Caso você execute uma consulta usando o MySQL programa cliente e encontrar o erro em questão, isso significa que o MySQL não tem 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 MyODBC driver, a interface do usuário de configuração (UI) possui uma guia avançada para sinalizadores. Marque “Não armazenar em cache o resultado “.

Outra ótima ferramenta é o MySQL Tuner – um script útil que se conectará a um servidor MySQL em execução e fornece sugestões de como ele pode ser configurado para 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 de ajuste e otimização de desempenho do MySQL/MariaDB.

7. MySQL continua travando


Se você encontrar esse problema, tente descobrir se o problema é que o MySQL servidor morre ou se é o cliente com um problema. Observe que muitas falhas do 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á em funcionamento.
$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Como alternativa, 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 MySQL servidor e habilitando a depuração, então inicie 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 

O resultado final:determinando o que está causando um problema ou um erro


Embora tenhamos analisado alguns MySQL comuns problemas e erros e também forneceu maneiras de solucioná-los e solucioná-los, o 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 guiá-lo sobre como determinar o que exatamente está causando um 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 não iniciar, verifique seu status usando systemctl ou use o journetctl (com o -xe flag) em systemd para examinar o problema.
  3. Você também pode examinar o arquivo de log do sistema, como /var/log/messages ou similar por motivos do seu problema.
  4. Tente usar ferramentas como Mytop, olhares, top, ps ou htop para verificar qual programa está consumindo toda a CPU ou está bloqueando a máquina ou para inspecionar se você está ficando sem memória, espaço em disco, descritores de arquivo ou alguns 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 mysqld servidor está 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 for com seu programa cliente ao tentar se conectar ao servidor MySQL, verifique por que ele não está funcionando bem, 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 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 mais.