Otimizar MariaDB em 5 Minutos: Guia Prático do my.cnf em Produção

“Você sabia que um banco de dados mal configurado é a principal causa de TTFB (Time to First Byte) alto em sites WordPress? Otimizar o my.cnf não só baixa o Load do seu servidor, como ajuda diretamente no SEO dos sites hospedados, fazendo o Google ranquear melhor o conteúdo dos seus clientes.”

Otimizar MariaDB. A configuração padrão do MariaDB é feita para funcionar em qualquer torradeira, não para performar no seu servidor dedicado ou VPS de produção. Se o seu site WordPress está lento ou o servidor está com Load alto devido ao MySQL, geralmente o problema não é falta de hardware, mas um my.cnf mal configurado.

Aqui está o que você precisa ajustar agora.

⚠️ Passo 0: A Regra de Ouro do SysAdmin

Antes de tocar em qualquer coisa:

cp /etc/my.cnf /etc/my.cnf.bak.$(date +%F)

Se o MariaDB não subir, você tem um backup instantâneo.


1. O Coração: innodb_buffer_pool_size

Esta é a variável mais importante de todas. O MariaDB usa o buffer pool para manter dados e índices em cache na memória RAM, evitando leitura em disco (I/O).

  • Servidor Dedicado apenas para Banco: Configure entre 70% a 80% da RAM total.
  • Servidor Web Compartilhado (cPanel/DirectAdmin): O banco concorre com o Apache/Nginx/PHP. Configure entre 50% a 60% da RAM total.

Exemplo (Para um servidor de 16GB com web + banco):

[mysqld]
innodb_buffer_pool_size = 8G

Dica: Se o valor for muito alto em um VPS pequeno, o OOM Killer do Linux vai matar o MariaDB.

2. A Performance de Escrita: innodb_log_file_size

Isso controla o tamanho dos logs de “redo” (transações). Um valor muito baixo faz o MariaDB escrever no disco com muita frequência (checkpoints), matando a performance de escrita.

  • Recomendação: 25% do tamanho do seu innodb_buffer_pool_size, mas geralmente 512M a 2G é suficiente para a maioria das cargas de trabalho web.
innodb_log_file_size = 512M

3. A Armadilha do Cache: query_cache_type

Desative isso. Em versões modernas do MariaDB e em ambientes com muitas escritas (como WordPress ou E-commerce), o Query Cache tradicional se torna um gargalo devido ao bloqueio global (global lock) que ele exige a cada atualização de tabela.

query_cache_type = 0
query_cache_size = 0

Nota: Confie no cache do InnoDB (Buffer Pool) e em caches de aplicação como Redis/Object Cache.

4. Conexões e Temporários

Dois ajustes finos para evitar erros de “Too many connections” e uso excessivo de disco para tabelas temporárias.

  • max_connections: Não chute “10000”. Cada conexão consome RAM. Para um servidor médio, 150 a 300 é o suficiente.
  • tmp_table_size e max_heap_table_size: Devem ter o mesmo valor. Isso define o tamanho máximo de uma tabela temporária em memória antes de ser jogada para o disco (o que é lento).
max_connections = 200
tmp_table_size = 64M
max_heap_table_size = 64M

Resumo do my.cnf (Copy & Paste)

Ajuste o Buffer Pool conforme sua RAM.

[mysqld]
# --- InnoDB Performance ---
# Ajuste para 50-60% da RAM (Servidor Web) ou 80% (Banco Dedicado)
innodb_buffer_pool_size = 4G 
innodb_log_file_size = 512M
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2 # Mais performance, risco mínimo de perda em crash total
# --- Conexões e Limites ---
max_connections = 200
max_allowed_packet = 64M
open_files_limit = 65535
# --- Cache e Temporários ---
# Desativando Query Cache (Obsoleto/Gargalo)
query_cache_type = 0
query_cache_size = 0
# Tabelas Temporárias
tmp_table_size = 64M
max_heap_table_size = 64M
# --- Otimizações Gerais ---
thread_cache_size = 50
table_open_cache = 4000

Passo Final: Aplicar e Monitorar

Reinicie o serviço e acompanhe o log de erros para garantir que tudo subiu corretamente:

systemctl restart mariadb
tail -f /var/log/mysqld.log # ou /var/log/messages

Quer ir além dos 5 minutos? Use o MySQLTuner

Depois que o servidor estiver rodando por pelo menos 24 horas com essas configurações, rode o script perl MySQLTuner. Ele vai analisar o uso real e sugerir ajustes finos baseados no tráfego que o seu servidor recebeu.

wget http://mysqltuner.pl/ -O mysqltuner.pl
perl mysqltuner.pl

Dica Pro (SEO & Performance)

Um banco lento aumenta o TTFB (Time to First Byte). O Google odeia TTFB alto. Otimizar o innodb_buffer_pool_size é frequentemente a maneira mais rápida de baixar o TTFB de 1.5s para 200ms em sites dinâmicos.

FAQ

Onde fica o arquivo de configuração my.cnf no Linux?

Na maioria das distribuições Linux (CentOS, AlmaLinux, Ubuntu), o arquivo principal de configuração do MariaDB está localizado em /etc/my.cnf ou dentro do diretório /etc/mysql/. Sempre faça um backup antes de editar.

Qual o valor ideal para o innodb_buffer_pool_size?

Em um servidor dedicado apenas para banco de dados, recomenda-se alocar entre 70% a 80% da memória RAM total. Se o servidor for compartilhado (Web + Banco, como cPanel ou DirectAdmin), utilize entre 50% a 60% da RAM para evitar falta de memória para o Apache/Nginx.

Preciso reiniciar o MariaDB após alterar o my.cnf?

Sim. A maioria das alterações no arquivo my.cnf, especialmente as relacionadas ao tamanho de buffers e memória (como o innodb_buffer_pool_size), exige um reinício do serviço (systemctl restart mariadb) para entrar em vigor.

O MySQLTuner é seguro para usar em produção?

O MySQLTuner é um script de leitura segura que não altera configurações sozinho; ele apenas sugere mudanças. É uma ferramenta excelente para diagnóstico, mas deve ser rodada após o banco estar ativo por pelo menos 24 horas para gerar dados confiáveis.

Veja Mais:

Guia completo para otimização de perfomance do mariadb

Como Instalar Openlitespeed no Ubuntu 20.04

Como Usar htop, iotop e Glances para Diagnóstico Rápido de Servidores Linux

Como reduzir o tempo de resposta (TTFB) do servidor

Cache de servidor vs cache de plugin: diferenças reais