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](/hc/vps/articles/tailscale-acesso-privado-a-vps) 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:
1. `/etc/postgresql/*/main/postgresql.conf`: `listen_addresses = '*'` (ou o IP do Tailscale).
2. `/etc/postgresql/*/main/pg_hba.conf`, adicione uma linha por origem permitida:
   ```
   host    app    app    SEU-IP/32    scram-sha-256
   ```
3. `sudo systemctl restart postgresql` e `sudo 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](/hc/vps/articles/backup-automatico-da-vps-para-o-object-storage).

## Desempenho

Banco lento normalmente é falta de índice ou de RAM. Veja [Meu servidor está lento](/hc/vps/articles/meu-servidor-esta-lento-como-diagnosticar); se o `iostat` mostrar disco saturado, o plano com mais RAM (cache) resolve mais que CPU.
