Veja como checar o status do MySQL ou MariaDB num servidor cPanel pelo WHM e pelo terminal: serviço, conexões, processos, consultas lentas e logs.
Quando os sites de um servidor cPanel ficam lentos ou mostram "erro ao conectar ao banco de dados", o MySQL é um dos primeiros suspeitos. Este roteiro mostra o que olhar, na ordem: o serviço está no ar, quantas conexões existem, quem está consumindo, quais consultas são lentas e o que diz o log.
Antes de começar
- Acesso root ao WHM e, para a parte do terminal, ao SSH do servidor como root.
- No cPanel, o root tem o arquivo
/root/.my.cnfcom a senha do banco. Por issomysqlemysqladminfuncionam sem pedir senha. - Os comandos abaixo só leem informações. Mesmo assim, evite consultas pesadas no horário de pico.
Status do MySQL pelo WHM
- Server Status » Service Status: mostra se o serviço de banco está no ar.
- SQL Services » Show MySQL Processes: lista as consultas em andamento, com as colunas Id, User, Host, db, Command, Time, State e Info. Só mostra; para encerrar uma consulta use o terminal.
- SQL Services » Edit SQL Configuration: ajusta
max_connections, log de consultas lentas,long_query_timee outros. Salvar reinicia o serviço. - Restart Services » SQL Server (MySQL): reinicia o banco. Use como último recurso: todos os sites perdem a conexão por alguns segundos.
- SQL Services » Repair a MySQL Database: repara tabelas MyISAM marcadas como corrompidas.
Status do MySQL pelo terminal
- Confira se o serviço está rodando e a versão.
/scripts/restartsrv_mysql --status mysql -V - Veja o resumo rápido.
A saída trazmysqladmin statusUptime(segundos desde o último início),Threads(conexões abertas),Slow queries(consultas lentas desde o início) eQueries per second avg. UmUptimepequeno sem você ter reiniciado indica que o banco caiu e voltou sozinho. - Compare as conexões com o limite.
Semysql -e "SHOW GLOBAL STATUS WHERE Variable_name IN ('Threads_connected','Threads_running','Max_used_connections', 'Aborted_connects','Connection_errors_max_connections'); SHOW VARIABLES LIKE 'max_connections';"Max_used_connectionsjá encostou emmax_connections, alguém recebeu "Too many connections".Threads_runningalto (dezenas) significa consultas se acumulando. - Veja o que está rodando agora, do mais demorado para o mais rápido.
mysql -e "SELECT id, user, db, command, time, state, LEFT(info, 80) AS consulta FROM information_schema.processlist WHERE command <> 'Sleep' ORDER BY time DESC LIMIT 20;" - Descubra qual conta cPanel abre mais conexões. Os usuários de banco do cPanel começam com o nome da conta (
conta_usuario), então dá para agrupar:mysql -e "SELECT SUBSTRING_INDEX(user, '_', 1) AS conta, COUNT(*) AS conexoes FROM information_schema.processlist GROUP BY conta ORDER BY conexoes DESC LIMIT 10;" - Encerre uma consulta travada, se for o caso, usando o
idda listagem:mysql -e "KILL 123456;". Encerrar umALTER TABLEou uma importação no meio pode deixar o trabalho pela metade; confirme com o dono do site antes.
Como achar as consultas lentas
Ative o log de consultas lentas em Edit SQL Configuration ou no /etc/my.cnf, na seção [mysqld]:
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /var/lib/mysql/slow.log
Reinicie com /scripts/restartsrv_mysql, espere o movimento normal do dia e resuma o arquivo, ordenando pelas consultas que somaram mais tempo:
mysqldumpslow -s t -t 10 /var/lib/mysql/slow.log
No MariaDB 11, o comando pode se chamar mariadb-dumpslow. Na maioria das vezes a consulta campeã é resolvida com um índice na coluna usada no WHERE ou no ORDER BY.
slow_query_log = 0) ou suba o long_query_time.Log de erros e espaço em disco
Pergunte ao próprio banco onde está o log de erros e leia o final dele. No cPanel costuma ser /var/lib/mysql/NOME-DO-SERVIDOR.err:
mysql -NBe "SELECT @@log_error"
tail -n 100 /var/lib/mysql/servidor.seudominio.com.br.err
Disco cheio derruba o MySQL. Confira o espaço da partição e os bancos que mais ocupam:
df -h /var/lib/mysql
du -sh /var/lib/mysql/* | sort -h | tail -n 15
Problemas comuns
ERROR 1040: Too many connections
Todas as conexões permitidas estão ocupadas. Use a consulta por conta para ver quem está segurando conexões (robôs, cron mal feito, site sob ataque). Aumentar max_connections ajuda, mas cada conexão consome memória; suba aos poucos e acompanhe a RAM.
ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
O serviço está parado. Leia o log de erros antes de reiniciar: disco cheio, falta de memória (o sistema mata o processo) e opção inválida no /etc/my.cnf são as causas mais comuns. Depois de corrigir, /scripts/restartsrv_mysql.
MySQL server has gone away
A conexão caiu no meio do caminho. Em importações grandes, o pacote passou do max_allowed_packet; em scripts longos, a conexão ficou parada mais que o wait_timeout. Ajuste o valor correspondente em Edit SQL Configuration.
Table is marked as crashed and should be repaired
Tabela MyISAM danificada, em geral depois de queda de energia ou disco cheio. Use Repair a MySQL Database no WHM ou mysqlcheck -r banco tabela. Tabelas InnoDB não usam esse reparo; se possível, converta as MyISAM para InnoDB.
Servidor lento com o MySQL no topo do consumo de CPU
Quase sempre é uma consulta sem índice repetida muitas vezes. Use a lista de processos para ver o padrão e o log de consultas lentas para confirmar. Uma consulta pesada rodada à mão em tabela MyISAM grande também trava tudo enquanto roda.