it-swarm-eu.dev

Způsobí spuštění pg_dump na live db konzistentní zálohy?

Mám 3GB databázi, která je neustále upravována a potřebuji zálohovat bez zastavení serveru (Postgres 8.3).

Můj pg_dump běží po dobu 5 minut. Co když se během procesu změní data? Dostanu konzistentní zálohy? Nechci zjistit, kdy dojde k katastrofě.

Dokumentace Postgres http://www.postgresql.org/docs/8.3/static/app-pgdump.html o tom nic neříká.

38
Roman

Z manuální :

Vytváří konzistentní zálohy, i když se databáze používá současně.

Ano, zálohování tedy můžete důvěřovat. Samozřejmě, že je to PostgreSQL, můžete věřit svým datům v PostgreSQL.

56
Frank Heikens

pg_dump zahajuje transakci, podobně jako jakýkoli jiný dlouhodobý dotaz bude fungovat. Záruky konzistence pocházejí z implementace MVCC . V rámci těchto pravidel bude výpis vždy shodný.

Všechny fuzzy části MVCC jsou kolem věcí, jako je pořadí objednávek transakcí UPDATE viditelné pro ostatní klienty a způsob získání zámků. pg_dump se přísně zabývá objednáváním a získává zámek čtení pro celou databázi, aby jej mohl vypsat. Pro většinu lidí to je to, co očekávají, a použitý mechanismus nikdy nezpůsobí žádné potíže. Hlavním rizikem souběhu je, že klienti, kteří se pokoušejí změnit strukturu databáze, budou blokováni, zatímco je výpis spuštěn. To však nemá vliv na kvalitu skládky.

12
Greg Smith

Výpis začíná nastavením TRANSACTION ISOLATION LEVEL SERIALIZABLE.

Přečtěte si prosím příručku o Transaction Isolation a například diskuze o tomto seznamu uživatelů .

Citát:

Záloha zobrazí pouze transakce, které byly provedeny před nastavením úrovně izolace.

V podstatě všechno po pg_dump nastavuje úroveň izolace transakce není součástí tohoto výpisu.

Operace čtení/zápisu nejsou během této doby ovlivněny (uzamčeny).

12
Dennis Nolte