Expor a porta 3306 ou 5432 para a internet é o erro mais comum, e em horas o banco recebe tentativas de senha. A regra: bind no IP certo, usuário restrito por origem e firewall só para o IP que precisa. Melhor ainda: acesso pela rede privada do Tailscale ou por túnel SSH.
MariaDB (Ubuntu/Debian)
sudo apt install -y mariadb-server
sudo mysql_secure_installation # senha do root, remove testes e acesso anônimo
Crie o banco e um usuário que só pode conectar do seu IP:
sudo mysql
CREATE DATABASE app CHARACTER SET utf8mb4;
CREATE USER 'app'@'SEU-IP' IDENTIFIED BY 'SENHA-FORTE';
GRANT ALL PRIVILEGES ON app.* TO 'app'@'SEU-IP';
FLUSH PRIVILEGES;
Para aplicações na própria VPS use 'app'@'localhost' e não abra nada para fora.
Permitir conexão remota: em /etc/mysql/mariadb.conf.d/50-server.cnf, altere bind-address = 127.0.0.1 para bind-address = 0.0.0.0 (ou o IP do Tailscale, 100.x.x.x) e sudo systemctl restart mariadb.
Firewall (só o seu IP):
sudo ufw allow from SEU-IP to any port 3306
Teste do seu computador: mysql -h IP-DA-VPS -u app -p app.
PostgreSQL
sudo apt install -y postgresql
sudo -u postgres psql
CREATE USER app WITH PASSWORD 'SENHA-FORTE';
CREATE DATABASE app OWNER app;
Acesso remoto:
/etc/postgresql/*/main/postgresql.conf:listen_addresses = '*'(ou o IP do Tailscale)./etc/postgresql/*/main/pg_hba.conf, adicione uma linha por origem permitida:host app app SEU-IP/32 scram-sha-256sudo systemctl restart postgresqlesudo ufw allow from SEU-IP to any port 5432.
Teste: psql -h IP-DA-VPS -U app app.
Túnel SSH (sem abrir porta nenhuma)
Do seu computador:
ssh -L 3306:127.0.0.1:3306 root@IP-DA-VPS
Enquanto a sessão estiver aberta, localhost:3306 no seu computador é o banco da VPS. Funciona no DBeaver, Workbench, pgAdmin (opção "SSH tunnel").
Bancos em Docker
Publique a porta só localmente: -p 127.0.0.1:5432:5432. Aplicações na mesma rede Docker acessam pelo nome do serviço; você acessa por túnel SSH ou Tailscale.
Backup
mariadb-dump --all-databases -u root -p | gzip > /root/mysql-$(date +%F).sql.gz
sudo -u postgres pg_dumpall | gzip > /root/pg-$(date +%F).sql.gz
Automatize com o backup para o Object Storage.
Desempenho
Banco lento normalmente é falta de índice ou de RAM. Veja Meu servidor está lento; se o iostat mostrar disco saturado, o plano com mais RAM (cache) resolve mais que CPU.