Whitepaper técnico — PodHeitor MySQL / MariaDB para Bacula

Backup lógico paralelo, físico hot via xtrabackup/mariabackup com cadeia LSN incremental, MySQL 8.0.17+ CLONE INSTANCE agent-less, transportable tablespaces e provisioning DR de réplica nativo.

Documento técnico complementar à página do plugin PodHeitor MySQL.

1. Por que não o Bacula Enterprise MySQL plugin?

O Enterprise plugin é Perl glue proprietário em volta de mysqldump / xtrabackup. Funciona, mas:

  • Requer Perl runtime em cada host FD.
  • Jobs sequenciais per-database (sem paralelismo dentro de um job).
  • Documentadamente incompatível com a criptografia AES de volume Bacula quando se usa xtrabackup --prepare.
  • Sem provisioning DR de réplica, sem automação TDE, sem CDP sidecar.
  • Closed source — você não pode auditar nem patchar o que protege seu DB.
  • Pricing para budgets Fortune-500.

O PodHeitor entrega o mesmo feature set — e mais — como um único binário Rust musl static-pie de ~540 KB, sem Perl, sem Python runtime.

2. Modelo arquitetural

Padrão PodHeitor: cdylib FD podheitor-mysql-fd.so (Rust puro, sem source AGPLv3 do Bacula linkado) + backend standalone, comunicação PTCOMM em stdin/stdout.

Desde v2.0.0, o cdylib é construído a partir de ../PodHeitor Rust cdylib/crates/plugin-mysql/. Nenhum source AGPLv3 do Bacula, headers, ou object files são vinculados estaticamente. O shim C++ legacy foi removido.

3. Modos de backup

Mode Função Engine usada
dump Logical dump per-DB com paralelismo (parallel_dbs) mysqldump / mariadb-dump
xtrabackup Physical hot backup com cadeia LSN incremental xtrabackup (Percona)
mariabackup Physical hot backup MariaDB mariabackup
clone MySQL 8.0.17+ CLONE INSTANCE agent-less SQL nativo
replicate Provisioning DR — restore + setup automático de réplica SQL + CHANGE REPLICATION SOURCE

4. Topology awareness e safety gates

O plugin detecta automaticamente a topologia MySQL e aplica safety gates configuráveis:

Topologia detectada Detecção Comportamento
Standalone Backup direto
Async-Replica SHOW REPLICA STATUS Backup do replica (offload do primary)
Group Replication performance_schema.replication_group_members Backup de membro secundário; verifica lag
Galera wsrep_local_state Auto-desync donor com RAII guard

4.1 require_replica=true — safety gate

Bacula stock + xtrabackup tipicamente faz backup do primary (porque é o nó “default”). Em frota MySQL séria, isso é exatamente o que você não quer — o primary já está ocupado servindo writes. Setar require_replica=true faz o plugin recusar backup se o nó conectado for primary. Combine com max_replica_lag=60 para evitar backup de replica atrasado.

4.2 Galera donor RAII guard

Em Galera, um nó tirado para backup deve ser dessincronizado do cluster (SET GLOBAL wsrep_desync=ON) para evitar flow control afetar o cluster inteiro. O plugin faz isso com guard RAII: o flag é setado antes do backup e garantidamente removido mesmo em panic/crash do backend, via Drop trait.

5. Provisioning DR de réplica (modo replicate)

Validado em produção (JobId 3592). No restore para o host DR, o plugin executa automaticamente:

STOP REPLICA;
RESET REPLICA ALL;
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='192.168.15.131',
  SOURCE_PORT=3306,
  SOURCE_USER='repl_user',
  SOURCE_PASSWORD='<from repl_password_file>',
  SOURCE_AUTO_POSITION=1;
START REPLICA;

Depois verifica que ambas as threads (Replica_IO_Running e Replica_SQL_Running) estão healthy antes de retornar success. Sem isso, “DR” significa restaurar o dump e depois operacionalmente lembrar de configurar replicação — frequentemente esquecido até o próximo incidente.

6. Features adicionais

Feature Status
Transportable tablespaces — single-table restore via IMPORT TABLESPACE Production
TDE keyring export + re-install on restore Production
CDP binlog streamer sidecar — mysqlbinlog --stop-never --raw + systemd unit Production
Prometheus textfile-collector metrics Production
Post-restore verify (basic/checksum/deep) Production
Streaming PTCOMM — zero staging area, compatibilidade com encryption nativa Bacula Production

Documento docs/ENTERPRISE_PARITY.md mapeia 48 de 48 features do Bacula Enterprise MySQL Plugin 18.2.3 que estão atendidas ou superadas.

7. Validated support matrix

Engine Versões Mode coverage
MySQL Community / Enterprise 5.7 EOL · 8.0 ≥ 8.0.17 · 8.4 LTS dump, xtrabackup, clone, replicate
Percona Server 8.0.x dump, xtrabackup, clone, replicate (+ TDE keyring)
MariaDB 10.5 · 10.6 LTS · 10.11 LTS · 11.4 LTS dump, mariabackup, replicate

OS: Oracle Linux 9 / RHEL 9 / Rocky 9 / AlmaLinux 9, EL8 (rebuild), Debian 12, Ubuntu 22.04/24.04. Bacula: Community 15.0.3.

8. Anti-patterns documentados

  • Não combine encryption AES de volume Bacula com xtrabackup --prepare sem testar restore end-to-end. A documentação Enterprise reconhece incompatibilidade; o PodHeitor sintetiza prepare durante o restore para evitar este modo problemático.
  • Não rode require_replica=false em produção sem entender que isso permite backup do primary — pode ser intencional, mas é a fonte mais comum de “backup ficou lento e apagou minha latência p99”.
  • Não confie em parallel_dbs alto sem ajustar I/O do host. 4 dumps paralelos de DBs grandes saturam disco antes que CPU. Comece em 4, monitore iostat.

9. License posture

Plugin sob LicenseRef-PodHeitor-Proprietary. Source AGPLv3 do Bacula não é vinculado estaticamente desde v2.0.0. O shim C++ legacy src/podheitor-mysql-fd.{c,h} foi removido. Bindings via crate bacula-fd-abi independente.

Pronto para avaliar?

Trial comercial de 30 dias para frotas MySQL/MariaDB/Percona em produção. Garantimos no mínimo 50% de desconto vs Bacula Enterprise, Veeam ou Commvault, com mais funcionalidades inclusas.

Heitor Faria — Fundador, PodHeitor International
[email protected]
☎ +1 (789) 726-1749 · +55 (61) 98268-4220 (WhatsApp)
🔗 Página do plugin PodHeitor MySQL

Disponível em: pt-brPortuguêsenEnglish (Inglês)esEspañol (Espanhol)

Deixe um comentário