RPO — Recovery Point Objective
Quantos dados, em tempo, você aceita perder — e como transformar esse número em frequência de backup real, verificável e juridicamente defensável.
Nesta página
1. Definição e fundamentação normativa
RPO (Recovery Point Objective) é a quantidade máxima de dados que uma organização aceita perder em caso de incidente, medida em tempo. Em outras palavras: se o pior acontecer agora, qual é o ponto no passado para o qual você precisa conseguir restaurar?
Assim como o RTO, o RPO é um conceito formal de continuidade de negócios, definido em frameworks como o NIST SP 800-34 e a ISO 22301. Ele é a base para determinar a frequência dos backups e o tipo de replicação necessário.
Exemplo simples
Se o RPO do banco RADIUS é de 15 minutos, você precisa ser capaz de restaurar os dados como estavam no máximo 15 minutos antes do incidente. Isso exige backups (ou replicação contínua) a cada 15 minutos ou menos. Um backup diário não atende.
2. RPO não é frequência de backup — entenda a diferença
Um erro comum é confundir "eu faço backup a cada 1 hora" com "meu RPO é 1 hora". O RPO é o pior caso de perda de dados, não a média. Se o backup horário falhar às 10:00 e o próximo só rodar com sucesso às 12:00, o RPO real foi de 2 horas — o dobro do declarado.
Portanto, RPO efetivo = intervalo entre backups bem-sucedidos consecutivos. Para garantir um RPO de 1 hora, a frequência de backup deve ser menor que 1 hora (ex.: a cada 45 minutos) e cada execução deve ser validada quanto ao sucesso.
3. Exemplos reais por criticidade de sistema (ISP)
| Sistema | RPO típico | Impacto da perda |
|---|---|---|
| Banco RADIUS/AAA (sessões ativas) | 5-15 min | Perder horas de autenticações = clientes sem conexão, chamados massivos |
| Sistema de bilhetagem/ERP | 1-4 horas | Perda de registros financeiros recentes — retrabalho administrativo |
| Logs de conexão (Marco Civil) | 24 horas | Perda de logs não quebra o serviço, mas pode descumprir obrigação legal (ver seção 10) |
| Configuração de OLT/switch | 24 horas | Mudanças de config perdidas — recuperáveis via backup semanal + documentação |
4. Como medir o RPO real
O RPO declarado só vale se for medido. O script abaixo verifica a "idade" do backup mais recente e compara com o RPO máximo aceitável. Pode ser integrado ao monitoramento (Zabbix/PRTG).
#!/bin/bash
# check_rpo.sh — verifica se o último backup está dentro do RPO
RPO_MINUTOS=15
ULTIMO_BACKUP=$(restic snapshots --latest 1 --json | jq -r '.[0].time')
SEGUNDOS_DESDE_BACKUP=$(( $(date +%s) - $(date -d "$ULTIMO_BACKUP" +%s) ))
MINUTOS_DESDE_BACKUP=$(( SEGUNDOS_DESDE_BACKUP / 60 ))
if [ $MINUTOS_DESDE_BACKUP -gt $RPO_MINUTOS ]; then
echo "CRITICAL: último backup tem $MINUTOS_DESDE_BACKUP min (RPO: ${RPO_MINUTOS} min)"
exit 2
else
echo "OK: último backup tem $MINUTOS_DESDE_BACKUP min"
exit 0
fi
Adapte restic snapshots para borg list --last 1 ou bconsole conforme sua ferramenta. O importante é que o script valide o tempo desde o último backup bem‑sucedido, não desde a última tentativa.
5. Impacto das ferramentas no RPO
A ferramenta de backup influencia o RPO de duas formas: velocidade de execução (backups mais rápidos permitem maior frequência) e eficiência de armazenamento (incrementais pequenos viabilizam RPOs baixos sem sobrecarregar disco/rede).
| Ferramenta | Tempo de backup incremental típico (500 MB) | RPO mínimo viável |
|---|---|---|
| restic | ~5-10 seg (local) | 5 min (ou menos, com replicação) |
| BorgBackup | ~5-10 seg (local) | 5 min |
| Bacula | ~30-60 seg (local, com catálogo) | 15-30 min |
Para RPOs abaixo de 5 minutos, o backup tradicional (mesmo incremental) pode não ser suficiente — é necessário partir para replicação contínua (ex.: MySQL com binary log shipping, ou DRBD).
6. Simulação: RPO declarado × RPO real
O cenário abaixo mostra como um RPO declarado de 1 hora pode se tornar um RPO efetivo de 3 horas se as falhas não forem monitoradas.
| Horário | Evento |
|---|---|
| 08:00 | Backup concluído com sucesso. Último ponto de recuperação. |
| 09:00 | Backup agendado falha (disco cheio no destino). |
| 10:00 | Backup falha novamente (mesma causa, ninguém percebeu). |
| 10:30 | Incidente: corrupção lógica no banco de dados. |
| 10:31 | Equipe tenta restaurar — último backup íntegro é das 08:00. |
RPO declarado: 1 hora (intervalo agendado).
RPO efetivo medido: 2,5 horas (das 08:00 às 10:30).
A diferença é que ninguém validava o sucesso do backup. O script da seção 4 teria detectado a falha às 09:00 e evitado o estouro do RPO.
7. RPO e ransomware — o problema do "último backup limpo"
Ransomware moderno frequentemente opera de forma silenciosa por dias ou semanas antes de se revelar, criptografando ou corrompendo dados aos poucos. Quando o ataque é finalmente detectado, o último backup "limpo" pode estar muito mais distante do que o último backup agendado.
Exemplo realista:
- Backups incrementais são feitos a cada 1 hora (RPO declarado = 1 hora).
- O invasor começa a corromper dados silenciosamente há 3 dias.
- Todos os backups dos últimos 3 dias contêm dados corrompidos ou backdoors.
- O último backup íntegro é de 4 dias atrás — o RPO efetivo, nesse cenário, é de 96 horas, não 1 hora.
Mitigação: a regra 3‑2‑1‑1‑0 resolve isso com o "+1" imutável e o "0" de testes de restauração. Manter snapshots imutáveis de longo prazo (ex.: 1 snapshot semanal retido por 3 meses) garante que sempre exista um ponto de recuperação anterior ao início do ataque.
8. Técnicas para RPO baixo
- Binlog do MySQL / WAL do PostgreSQL — permite restaurar até um ponto exato no tempo (point-in-time recovery), não só até o último backup completo.
- Réplica em standby (streaming replication) — RPO praticamente zero, mas exige infraestrutura de banco redundante; é solução de alta disponibilidade, não substitui backup.
- Backup incremental frequente com ferramenta deduplicada (restic/Borg) — viável de rodar de hora em hora sem consumir espaço proporcional, já que só grava a diferença real.
Exemplo prático — habilitar binlog no MySQL do banco RADIUS:
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
log_bin = /var/log/mysql/mysql-bin.log
binlog_expire_logs_seconds = 604800 # retém 7 dias de binlog
# Restauração point-in-time (dump full + replay do binlog até o instante exato):
mysql < backup-full-2026-08-05.sql
mysqlbinlog --stop-datetime="2026-08-05 14:32:00" mysql-bin.000123 | mysql
9. Trade‑offs: quanto menor o RPO, maior o custo
Reduzir o RPO não é gratuito. Cada redução implica em mais recursos:
| Frequência | RPO resultante | Custo operacional |
|---|---|---|
| Backup diário (madrugada) | Até 24h | Baixo — 1 job, fora do horário de pico |
| Incremental de hora em hora | Até 1h | Médio — 24 execuções/dia, ainda gerenciável com deduplicação |
| Replicação contínua (binlog/WAL) | Segundos | Alto — exige infraestrutura de replicação dedicada |
10. RPO, LGPD e Marco Civil — a implicação legal
O Art. 46 da LGPD exige medidas de proteção contra perda de dados pessoais. Um RPO mal dimensionado que resulte em perda de dados de clientes pode ser interpretado como falha nessa obrigação. Além disso, o Marco Civil da Internet (Lei 12.965/2014, Art. 13) obriga provedores a manter registros de conexão por 1 ano. Isso significa que:
- Não basta ter backup — o backup precisa garantir que você não perca registros dentro do período obrigatório.
- Se o RPO do sistema de logs é 24h, mas ocorre um incidente que destrói 48h de dados, você perdeu 2 dias de registros obrigatórios — dupla infração (LGPD + Marco Civil).
- A retenção mínima de 1 ano impacta diretamente a política de forget/prune das ferramentas.
11. Planilha de definição de RPO
| Sistema | RPO alvo | Frequência de backup | Ferramenta |
|---|---|---|---|
| Banco RADIUS (autenticação) | ___ min | ___ | ___ |
| ERP / Bilhetagem | ___ horas | ___ | ___ |
| Logs de conexão (Marco Civil) | ___ horas | ___ | ___ |
| Configuração de equipamentos | ___ horas | ___ | ___ |
12. Exemplo de dimensionamento — custo do RPO para um ISP
Suponha o banco RADIUS de um ISP com 5.000 clientes, gerando ~50 MB de dados incrementais por hora. Custo de armazenamento off‑site (S3) para diferentes RPOs, com 30 dias de retenção:
| RPO alvo | Volume diário | Retenção 30 dias | Custo mensal (US$ 0,023/GB) |
|---|---|---|---|
| 24 horas | 50 MB | ~1,5 GB | ~US$ 0,03 |
| 1 hora | ~1,2 GB | ~36 GB | ~US$ 0,83 |
| 15 minutos | ~4,8 GB | ~144 GB | ~US$ 3,31 |
Com deduplicação (90%+ em backups incrementais de bancos de dados), os volumes reais podem ser até 10× menores. O verdadeiro custo está na carga de I/O e rede, não no armazenamento.
13. Como reduzir o RPO na prática
- Aumentar a frequência de backups incrementais — restic e Borg fazem incrementais em segundos; agende a cada 15 min se necessário.
- Replicar o banco de dados em tempo real — MySQL com binary log ou PostgreSQL com streaming replication para RPO próximo de zero.
- Usar storage local rápido (SSD/NVMe) — reduz o tempo do backup e permite executá‑lo mais vezes sem impactar a produção.
- Automatizar a validação de sucesso — scripts que confirmam que o backup realmente foi concluído, evitando RPO "fantasma".
14. RPO × RTO — não são a mesma coisa
RPO olha para trás no tempo (quanto dado perdi até o momento do incidente). RTO olha para frente (quanto tempo até voltar a funcionar). Os dois são independentes — é possível ter RPO excelente (replicação contínua, zero perda de dado) e RTO péssimo (demora horas para promover a réplica e religar o serviço), ou o contrário. Uma estratégia de backup completa precisa definir os dois separadamente.
15. Checklist operacional
| Item | Frequência |
|---|---|
| Verificar sucesso do último backup | A cada execução |
| Medir RPO efetivo (script seção 4) | Diário (via monitoramento) |
| Teste de restauração completo | Mensal |
| Revisar política de retenção (Marco Civil) | Trimestral |
16. Mitos comuns sobre RPO
- "Backup diário = RPO de 24 horas." Se o backup falhar um dia, o RPO real pode ser 48h. O RPO é o pior caso, não a média.
- "RPO baixo resolve tudo." RPO baixo reduz perda de dados, mas não reduz o tempo de restauração — isso é o RTO.
- "Replicação síncrona resolve RPO." Resolve, mas se o desastre for lógico (ex.: DELETE acidental), a replicação propaga o erro instantaneamente. Backup com retenção ainda é necessário.
- "Já tenho RAID, não preciso me preocupar com RPO." RAID não protege contra corrupção de dados, exclusão acidental ou ransomware.
17. Glossário
18. Referências
- NIST SP 800-34 Rev. 1 — Contingency Planning Guide (definições de RPO/RTO).
- ISO 22301:2019 — Business continuity management systems — Requirements.
- Lei nº 12.965/2014 (Marco Civil da Internet) — Art. 13 (obrigação de guarda de registros).
- CISA — #StopRansomware Guide (justificativa para backups imutáveis e testes periódicos).
- Documentação oficial MySQL — Point-in-Time Recovery (binlog).
- Páginas relacionadas: RTO, Regra 3-2-1(-1-0), LGPD.
Conteúdo técnico independente. Nenhum trecho é cópia literal das fontes citadas.