Van biztonsági mentésed.
De mikor bizonyítottad, hogy visszaállítható?
A probavi saját üzemeltetésű, adatbázismotortól független rendszer, amely folyamatosan bizonyítja, hogy az adatbázis-mentések visszaállíthatók, és minden bizonyítást aláírt, auditálható bizonyítékként rögzít, mért visszaállítási idővel.
Mentést nem készít. Azt a meglévő eszközeid már jól csinálják.
A „mentés sikeresen elkészült” szinte semmit nem bizonyít
Szekció neve “A „mentés sikeresen elkészült” szinte semmit nem bizonyít”A mentések csendben romlanak el. Sérülés az átvitel közben. Hiányzó WAL- vagy binlog-szegmens. Verzióeltérés, ami csak visszaállításkor derül ki. Titkosítókulcs, amit senki nem őrzött meg. Hónapok szorgos mentése — a rossz adatbázisról.
Mindegyik átmegy a mentési feladaton, és megbukik a visszaállításon; a hiba pedig pont abban a pillanatban jelentkezik, amikor a legkevésbé engedheted meg. Közben a „van mentésünk” válaszként elfogadott. Csakhogy nem arra a kérdésre válasz, ami számít: mikor állítottál vissza utoljára egyet?
Egy drill, elejétől a végéig
Szekció neve “Egy drill, elejétől a végéig”A drill a munka egysége: egy adatbázis egyetlen ütemezett visszaállításának igazolása.
- 1LétrehozásEldobható, elszigetelt futtatókörnyezet: konténer, Kubernetes Job vagy egy gép közvetlenül, SSH-n.
- 2VisszaállításEgy adapter valódi mentés valódi visszaállítását végzi, a motor saját eszközeivel.
- 3EllenőrzésA visszaállított adatbázison ellenőrzések futnak, az „elindult-e?” kérdéstől a saját SQL-edig.
- 4RögzítésEgyetlen aláírt rekord kerül a bizonyítéknaplóba, a sandbox pedig megsemmisül.
A mag semmit nem tud a pg_dump-ról, a WAL-szegmensekről vagy a binlogokról.
Minden motorspecifikus lépés az adapterben él — egy közönséges külső
folyamatban, dokumentált protokollal, amit bárki megírhat bármilyen nyelven.
A lebontás kényszerített, a hibaágakon is. A sandboxban éles adat van, így a megsemmisítéséből semmi nem marad a szerencsés ágra.
Fut nélküled
Szekció neve “Fut nélküled”Semmit nem kell mellé telepíteni, semmit nem kell életben tartani két drill között, és az adatbázis-kiszolgálókon nincs ügynök.
- cron vagy systemd timerAmi már úgyis fut a gépeiden. A Probavihoz nem tartozik ütemező, és nem fut saját szolgáltatása.
probavi runEgy drill, zárolófájllal és időkorláttal. A lebontás kényszerített, a hibaágakon is.- Amit maga után hagy
- Egy aláírt bizonyítékrekord
- Egy Prometheus-textfile
- Egy aláírt webhook, ha kéred
Kilépési kód
- 0
- backup proven restorable
- 1
- recoverability failure (backup, restore, or check)
- 2
- infrastructure error or cancelled
- 3
- usage or setup error
- 5
- evidence record could not be written
Ettől lesz a folyamatosan több egy határozószónál. Az a visszaállítás, amit akkor futtatsz, amikor eszedbe jut, gyakorlat; az, amelyik akkor is lefut, ha senkinek nem jut eszébe, rekord — és a helyreállíthatóság története pontosan annyit ér, ahány drill kérés nélkül futott le.
A kilépési kód a szerződés, és szétválasztja azt a két hibát, ami számít. Az a mentés, amelyik nem állt vissza, nem ugyanaz az esemény, mint egy leállt konténer-futtatókörnyezet, és az a riasztási szabály, amelyik nem tudja megkülönböztetni őket, egy hónapon belül el lesz némítva. Mindkettő rögzül: a hiba is a drill egyik kimenetele, nem hiányzó sor a naplóban.
Egy teljes DR game-day is így fut. A probavi gameday függőségi sorrendben
veszi a game-day tagjait, és mindegyik a saját aláírt rekordját hagyja maga
után: az évi egyszeri, runbookkal töltött délutánból egyetlen ütemezett sor
lesz.
A termék a bizonyíték, nem a teszt
Szekció neve “A termék a bizonyíték, nem a teszt”Visszaállítási tesztet futtatni másolható funkció. A helyreállíthatóság folyamatosan karbantartott, kriptográfiailag ellenőrizhető története nem az.
{ "adapter": { "digest": "sha256:4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c", "name": "postgres", "protocol": "probavi-adapter/0", "version": "0.1.0" }, "backup": { "checksum": "sha256:9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f", "created_at": "2026-07-30T01:58:02.000Z", "kind": "pgdump", "size_bytes": 565248 }, "checks": [ { "detail": "accepting connections", "name": "service_healthy", "ok": true }, { "detail": "100000 rows (min 100000)", "name": "row_count:orders", "ok": true } ], "drill": { "config_hash": "sha256:7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d", "name": "prod-orders-db", "pitr_target": "2026-07-30T14:32:00.000Z" }, "env": { "arch": "amd64", "host_id": "3f7a9c2e5b1d8e04", "os": "linux", "probavi_digest": "sha256:1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d", "probavi_version": "0.1.0" }, "error": null, "outcome": "pass", "prev_hash": "sha256:0000000000000000000000000000000000000000000000000000000000000000", "sandbox": { "params": { "image": "postgres:16", "memory": "2GiB" }, "provider": "docker" }, "schema": "probavi-evidence/2", "seq": 1, "sig": { "alg": "ed25519", "key_id": "56475aa75463474c", "sig_b64": "/f2ahJgj08qDVSvbTIZ/+XI7IfkCavp0WfS7ETIezC+E2PMzFzEmX/G8d4d+S42Q9ZegQDU8aMKJTBb/gS5KDQ==" }, "timings_ms": { "engine_ready": 1166, "provision": 1170, "restore": 190, "total": 2840, "transfer": 110, "validate": 61 }, "ts": "2026-07-31T02:00:11.482Z"}Valódi rekord a formátum közzétett példanaplójából, olvashatóság kedvéért újratördelve — a lemezen egyetlen kanonikus sor, és az aláírás arra a formára vonatkozik.
Aláírva ezzel:03a107bff3ce10be1d70dd18e74bc09967e4d6309ba50d5f1ddc8664125531b8
A rekordok láncba fűződnek: mindegyik hordozza az előtte lévő SHA-256 lenyomatát, és mindegyik ed25519-cel aláírt. A napló csak bővíthető — a Probaviban nincs olyan kód, amely már létező rekordot átírna vagy törölne.
- minden rekord hordozza az előző rekord lenyomatát
- egy rekord módosítása után minden utána következő láncszem érvénytelen
Mindennek az ellenőrzéséhez a naplófájl és egy nyilvános kulcs kell. Nem kell hálózat, nem kell licenc, és még Probavi-telepítés sem, mert a formátumhoz önállóan kiadott ellenőrző program tartozik. A bizonyíték ellenőrzése soha nem fizetős. Egy terméknél, amelynek a kimenete maga a bizonyíték, ez nem árazási kérdés.
Motorfüggetlen — és ez miért tartható
Szekció neve “Motorfüggetlen — és ez miért tartható”Két cserélhető tengely egy olyan mag két oldalán, amely sem adatbázisról, sem konténer-futtatókörnyezetről nem tud semmit.
Ami ma elérhető
Szekció neve “Ami ma elérhető”- 24motoradapter
- 3sandbox-szolgáltató
- 5ellenőrzéstípus
- 8CLI-parancs
- 24CLI-nyelv
- 4verziózott specifikáció
Motorok. Az „Ellenőrizve ezeken” pontosan azt jelenti, amit mond: azokat a verziókat, amelyekből a projekt integrációs tesztje minden futáskor visszaállít. Nem támogatott verziótartomány, és a projekt nem is állít ilyet.
| Motor | Ellenőrizve ezeken | Források | Időpontra visszaállítás (PITR) |
|---|---|---|---|
| Apache Cassandra | 4.1, 5.0 | cassandra_snapshot cassandra_snapshot_dir cassandra_snapshot_tar | — |
| ClickHouse | 26.3, 26.7 | clickhouse_backup clickhouse_backup_dir | — |
| Apache CouchDB | 3.5.2, 3.4.3 | couchbackup couchbackup_dir couchdb_data couchdb_data_tar | — |
| DuckDB | 1.4, 1.5 | duckdb_db duckdb_db_dir duckdb_export | — |
| Elasticsearch | 8.19.20, 9.5.2 | elasticsearch_repo elasticsearch_repo_zip | — |
| etcd | 3.5, 3.6, 3.7 | etcd_snapshot etcd_snapshot_dir | — |
| Firebird | 5.0.4, 4.0.7 | firebird_gbak firebird_gbak_dir | — |
| H2 | 2.4.240, 2.3.232 | h2_backup h2_backup_dir h2_db h2_db_dir | — |
| InfluxDB | 2.7, 2.8, 2.9 | influx_backup influx_backup_dir influx_backup_tar | — |
| MariaDB | 10.11, 11.4, 11.8, 12.3 | mariadb_backup mariadb_dump mariadb_dump_dir | — |
| MongoDB | 7.0, 8.0 | mongodump mongodump_dir mongodump_with_oplog mongodump_with_users | — |
| Microsoft SQL Server | 2019, 2022, 2025 | bak bak_chain bak_dir bak_with_logins | — |
| MySQL | 8.4, 9.7Variáns image: percona/percona-server:8.4.10 | mysqldump mysqldump_dir mysqldump_with_users xtrabackup | — |
| Neo4j | 5.26 | neo4j_dump neo4j_dump_dir | — |
| OpenSearch | 2.19.6, 3.8.0 | opensearch_repo opensearch_repo_tar | — |
| Oracle Database | 23.26.3.0 | oracle_datapump | — |
| PostgreSQL | 14, 15, 16, 17, 18Variáns image: pgvector/pgvector:0.8.6-pg17Variáns image: timescale/timescaledb:2.29.1-pg17Variáns image: postgis/postgis:17-3.5 | pgbackrest pgdump pgdump_dir pgdump_with_globals timescaledb_dump timescaledb_dump_dir | Igen |
| Prometheus | 3.13 | prometheus_snapshot prometheus_snapshot_dir prometheus_snapshot_tar | — |
| Qdrant | 1.19.0, 1.18.1 | qdrant_full_snapshot qdrant_full_snapshot_dir qdrant_snapshot qdrant_snapshot_dir | — |
| Redis | 7.2, 7.4, 8.2, 8.10 | redis_aof redis_rdb redis_rdb_dir | — |
| Apache Solr | 10 | solr_backup solr_backup_dir solr_backup_tar | — |
| SQLite | 3.46, 3.49, 3.50, 3.51, 3.53 | sqlite_db sqlite_db_dir sqlite_dump sqlite_dump_dir | — |
| Valkey | 7.2, 8.0, 8.1, 9.0, 9.1 | valkey_aof valkey_rdb valkey_rdb_dir | — |
| VictoriaMetrics | 1.150 | victoriametrics_backup victoriametrics_backup_dir victoriametrics_backup_tar | — |
Sandboxok. Ahol a visszaállítás történik, és amit garantálunk róla.
docker— Docker nincs publikált portkényszerített lebontásk8s— Kubernetes Job nincs publikált portkényszerített lebontásremotehost— Bare host over SSH nincs publikált portkényszerített lebontás
Ellenőrzések. Amit egy drill állíthat a visszaállított adatbázisról.
service_healthy— Engine answers the adapter's healthchecktable_exists— Table exists and is queryablerow_count— Row count within boundsfreshness— Newest row younger than a maximum agesql— Custom SQL assertion (a saját állításod)
Parancsok. A bináris teljes felülete.
probavi runprobavi gamedayprobavi pushprobavi evidence verifyprobavi evidence keygenprobavi adapter probeprobavi adapter conformanceprobavi version
Specifikációk. A bináristól függetlenül verziózva, így egy integráció szerződésre építhet, nem kiadásra.
- Adapterprotokoll —
probavi-adapter/0 - Bizonyítékséma —
probavi-evidence/2(az ellenőrző ezt is olvassa:probavi-evidence/0probavi-evidence/1) - Értesítési payload —
probavi-notification/1 - Bizonyítéknapló-küldés —
probavi-evidence-push/1
Ami a Probavi nem
Szekció neve “Ami a Probavi nem”A határok az ajánlat részei, ezért ki vannak mondva, nem sejtetve.
- Probavi takes no backups. It verifies backups produced by other tools — pgBackRest, wal-g, Barman, mysqldump and their equivalents — which are its foundation, never its competitors.
- Probavi ships no scheduler and no daemon of its own. Drills are started by cron or a systemd timer, with a lock file and a timeout.
- Probavi runs no agent or daemon on database hosts.
- Probavi manages no secrets. It reads credentials from environment variables or files for the duration of one drill, and redacts them from logs and evidence.
- Probavi has no telemetry and never phones home. It is a trust product; that is not negotiable.
- Probavi ships no web interface. The shipped surfaces are the command line, a Prometheus textfile, and webhooks.
A mentési eszközeidre épül, nem ellenük
Szekció neve “A mentési eszközeidre épül, nem ellenük”Ezért is érdemes saját üzemeltetésben. Menedzselt visszaállítási teszt létezik az egyes felhőökoszisztémákon belül, a vállalati mentőrendszerek pedig virtuálisgép-szinten ellenőriznek. Egyik sem segít egy vegyes, saját gépeken futó adatbázisparkon.
Visszaállítási teszt, amit meg is lehet mutatni
Szekció neve “Visszaállítási teszt, amit meg is lehet mutatni”A DORA, a NIS2 és a NIST üzletmenet-folytonossági útmutatói egyaránt azt várják el, hogy a helyreállítási képesség tesztelt és dokumentált legyen, ne pusztán beállított. Az automatizált drillek pontosan ezt állítják elő: dátumozott, aláírt rekordokat arról, mit állítottunk vissza, mennyi ideig tartott, és mit ellenőriztünk az eredményen.
Nyitott mag — és ami nyitott is marad
Szekció neve “Nyitott mag — és ami nyitott is marad”A teljes ellenőrzési hurok nyílt forráskódú, Apache-2.0 alatt, és az is marad: drillek és game-dayek, adapterek, sandbox-szolgáltatók, ellenőrzések, bizonyítékok előállítása, bizonyítékok ellenőrzése, a parancssor, a metrikák. Bárki bizonyíthatja, hogy a mentései visszaállíthatók, határidő nélkül, engedélykérés nélkül. A specifikációk és a független ellenőrző program ugyanezért nyilvánosak — az a bizonyíték, amit csak az előállítója tud ellenőrizni, nem bizonyíték.
A binárisban semmit nem old fel hálózati hívás. Ha valaha licenckulcsot kér, az ed25519-cel aláírt token, amit kapcsolat nélkül ellenőriz — egy termék, amely azt ígéri, hogy soha nem küld haza adatot, a saját számlázásával sem tehet kivételt.
Első lépések
Szekció neve “Első lépések”Egy drill egy fájl:
target: name: prod-orders-db adapter: postgres source: kind: pgdump path: /backups/orders/latest.dumpsandbox: provider: docker params: image: postgres:16 timeout: 30mchecks: - builtin: service_healthy - builtin: row_count table: orders min: 100000evidence: path: /var/lib/probavi/evidence.jsonl sign_key: /etc/probavi/ed25519.keyAzután drillenként egy parancs, és egy a napló ellenőrzésére:
$ probavi run --config drill.yaml{"outcome":"pass","seq":42,"evidence_path":"/var/lib/probavi/evidence.jsonl","checks_passed":3,"checks_total":3,"restore_ms":252400,"total_ms":318900}
$ probavi evidence verify --log /var/lib/probavi/evidence.jsonl --key probavi.key.pub{"status":"VALID","records":42,"damaged_lines":[],"failed_line":0,"reason":"","head":{"seq":42,"hash":"sha256:1a8f736d2f4350385693385d203799f88721db4f4fd5056d6ceb028088127268"}}A forráskódban ott a gyorsindító, a specifikációk és a fentiek manifestje.