Tutoriais

Como instalar e otimizar MySQL/MariaDB em VPS

Como instalar e otimizar MySQL/MariaDB em VPS

MySQL e MariaDB são os bancos de dados mais usados em sites e sistemas web. Com poucos ajustes, você extrai muito mais desempenho deles — especialmente em um VPS com disco NVMe.

MySQL ou MariaDB?

O MariaDB nasceu como um fork do MySQL e mantém alta compatibilidade para a maioria das aplicações (WordPress, Laravel, Magento). É o padrão em Debian e em várias distribuições. Escolha o MySQL se sua aplicação exigir recursos específicos dele; caso contrário, qualquer um atende bem.

Instalação

# MariaDB
sudo apt install mariadb-server -y
sudo mariadb-secure-installation

# ou MySQL
sudo apt install mysql-server -y
sudo mysql_secure_installation

O script de segurança remove usuários anônimos, bancos de teste e o acesso remoto do root.

Usuários e permissões

Crie um usuário por aplicação, com acesso apenas ao seu banco:

CREATE DATABASE loja CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'loja'@'localhost' IDENTIFIED BY 'SENHA_FORTE';
GRANT ALL PRIVILEGES ON loja.* TO 'loja'@'localhost';
FLUSH PRIVILEGES;

Acesso apenas local

Confirme que o banco escuta só no localhost (bind-address = 127.0.0.1). Se outro servidor precisar acessar, libere apenas o IP dele no firewall e crie o usuário com esse host específico ('loja'@'IP_DO_APP'), preferencialmente com TLS ou por uma VPN privada.

Ajustes de desempenho

Os arquivos ficam em /etc/mysql/mariadb.conf.d/50-server.cnf (MariaDB) ou /etc/mysql/mysql.conf.d/mysqld.cnf (MySQL). Crie um arquivo próprio, como /etc/mysql/conf.d/otimizacao.cnf:

[mysqld]
# Memória — o ajuste mais importante
innodb_buffer_pool_size = 2G          # 50-70% da RAM se o servidor for só do banco;
                                       # menos se dividir com web/PHP
innodb_log_file_size = 512M           # no MySQL 8.0.30+, use innodb_redo_log_capacity

# Disco NVMe
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_flush_neighbors = 0

# Conexões
max_connections = 200

# Tabelas temporárias
tmp_table_size = 64M
max_heap_table_size = 64M

# Consultas lentas
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
sudo systemctl restart mariadb    # ou mysql

Ajuste os valores ao tamanho do seu VPS e ao que mais roda nele. Evite superdimensionar o max_connections: cada conexão consome memória.

Encontrando consultas lentas

sudo mysqldumpslow -s t /var/log/mysql/slow.log | head -20

Ou use o pt-query-digest (Percona Toolkit) para relatórios detalhados. Analise as piores consultas com EXPLAIN:

EXPLAIN SELECT * FROM pedidos WHERE cliente_id = 123 ORDER BY criado_em DESC;

Se aparecer type: ALL (varredura completa) em tabelas grandes, provavelmente falta um índice:

CREATE INDEX idx_cliente_data ON pedidos (cliente_id, criado_em);

Ferramenta de diagnóstico: MySQLTuner

sudo apt install mysqltuner -y
sudo mysqltuner

Ele analisa o uso real e sugere ajustes. Rode após o banco estar em uso por pelo menos 24 horas.

Backups

mysqldump --single-transaction --routines --triggers -u root -p loja | gzip > loja-$(date +%F).sql.gz
  • --single-transaction gera um backup consistente de tabelas InnoDB sem bloquear;
  • Para bancos grandes, considere Mariabackup ou Percona XtraBackup (backups físicos e rápidos);
  • Envie as cópias para fora do servidor.

Monitoramento

SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
SHOW PROCESSLIST;

Se Innodb_buffer_pool_reads (leituras do disco) for alto em relação a Innodb_buffer_pool_read_requests, aumente o buffer pool.

Conclusão

Buffer pool bem dimensionado, índices certos e disco rápido formam a base de um banco de dados veloz. Hospede o seu em um VPS-NVME-BR da VittHost, com armazenamento NVMe e servidores no Brasil.Use o cupom SP-VITT20 e ganhe 20% de desconto na primeira fatura enquanto a promoção estiver ativa.

Compartilhar:

Pronto para hospedar seu próximo projeto?

VPS com painel pré-instalado em 1 clique. Ativação imediata.

Ver planos VPS