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-transactiongera 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.