Migracja bazy danych to proces migracji danych z jednej lub więcej źródłowych baz danych do jednej lub więcej docelowych baz danych za pomocą usługi lub narzędzia. Istnieją różne rodzaje migracji. Możesz przeprowadzić migrację z technologii do innej, do innego centrum danych lub do chmury, a nawet w tym samym miejscu i tej samej technologii na inną maszynę. Najlepsze narzędzie do migracji PostgreSQL zależy od rodzaju migracji i wymagań, takich jak dostępność lub tolerancja przestojów, a czasami trudno jest znaleźć najlepsze narzędzie do wykonania pracy.
W tym blogu wspomnimy o niektórych narzędziach typu open source do migracji PostgreSQL wraz z krótkim omówieniem każdej opcji.
Narzędzia migracji kopii zapasowych i przywracania
Może to być najłatwiejszy sposób przeprowadzenia migracji danych, ale także najwolniejszy pod względem docelowego czasu odzyskiwania (RTO). Korzystanie z tej metody oznacza, że wykonasz kopię zapasową z bieżącej bazy danych, najprawdopodobniej kopię logiczną, jeśli chcesz ją przywrócić w innej wersji lub innej infrastrukturze, skopiuj zrzut i przywróć go na nowym serwerze. W zależności od ilości danych może to zająć dużo czasu, ale jest to podstawowy sposób na migrację bazy danych. Zobaczmy kilka narzędzi do tego.
pgdump/pgdumpall
pg_dump to narzędzie do tworzenia kopii zapasowych pojedynczej bazy danych PostgreSQL. Tworzy spójne kopie zapasowe, nawet jeśli baza danych jest używana jednocześnie, ponieważ nie blokuje innych użytkowników. Aby wykonać kopię zapasową całego klastra lub utworzyć kopię zapasową obiektów globalnych, które są wspólne dla wszystkich baz danych w klastrze (takich jak role i obszary tabel), należy zamiast tego użyć pg_dumpall.
Zrzuty można wyprowadzać w formacie skryptu lub pliku archiwum. Zrzuty skryptów to zwykłe pliki tekstowe zawierające polecenia SQL wymagane do zrekonstruowania bazy danych do stanu, w jakim znajdowała się w momencie jej zapisania. Może być używany do rekonstrukcji bazy danych na innych komputerach, innych architekturach, a nawet na innych produktach bazodanowych SQL.
pg_basebackup
pg_basebackup służy do wykonania podstawowej kopii zapasowej działającego klastra bazy danych PostgreSQL. Kopia zapasowa jest wykonywana bez wpływu na innych klientów bazy danych i może być używana zarówno do odzyskiwania PITR (Point-In-Time-Recovery), jak i jako punkt początkowy serwera rezerwowego Streaming Replication. Tworzy dokładną kopię plików klastra bazy danych, jednocześnie upewniając się, że serwer jest automatycznie przełączany w tryb tworzenia kopii zapasowej i wyłączany z niego. Kopie zapasowe są zawsze wykonywane z całego klastra bazy danych; nie jest możliwe tworzenie kopii zapasowych pojedynczych baz danych lub obiektów baz danych.
pgBackRest
pgBackRest to narzędzie do tworzenia kopii zapasowych typu open source, które tworzy fizyczne kopie zapasowe z pewnymi ulepszeniami w porównaniu z klasycznym narzędziem pg_basebackup. Możesz użyć pgBackRest, aby wykonać początkową kopię bazy danych dla Streaming Replication przy użyciu istniejącej kopii zapasowej lub możesz użyć opcji delta, aby odbudować stary serwer rezerwowy.
Niektóre z najważniejszych funkcji pgBackRest to:
- Równoległe kopie zapasowe i przywracanie
- Obsługa lokalna lub zdalna
- Pełne, przyrostowe i różnicowe kopie zapasowe
- Obrót kopii zapasowych i wygaśnięcie archiwów
- Sprawdzenie integralności kopii zapasowej
- Wznowienie kopii zapasowej
- Przywracanie Delta
- Szyfrowanie
Narzędzia migracji PostgreSQL
Zamiast korzystania z narzędzia do tworzenia kopii zapasowych, istnieją różne narzędzia do szybszego wykonywania tej migracji przy użyciu różnych metod. Może wykorzystywać podejście ETL, a nawet konfigurować replikację między różnymi technologiami baz danych, korzystając z tej samej koncepcji wyodrębniania – przekształcania – ładowania. Zobaczmy niektóre z tych narzędzi.
pg_kameleon
pg_chameleon to system replikacji MySQL na PostgreSQL. Może łączyć się z protokołem replikacji MySQL i replikować zmiany danych w PostgreSQL. Niezależnie od tego, czy użytkownik musi skonfigurować trwałą replikę między MySQL a PostgreSQL, czy też przeprowadzić migrację silnika, pg_chameleon jest dobrą opcją do tego zadania.
Główne funkcje to:
- Odczytaj z wielu schematów MySQL i przywróć je do docelowej bazy danych PostgreSQL
- Skonfiguruj PostgreSQL, aby działał jako urządzenie podrzędne MySQL
- Podstawowa obsługa DDL (CREATE/DROP/ALTER TABLE, DROP PRIMARY KEY/UTNCATE, RENAME)
- Tabele generujące błędy są automatycznie wykluczane z repliki
- Możliwość odświeżenia pojedynczych tabel lub pojedynczych schematów
- Odłącz replikę od MySQL w celu obsługi migracji
- Zastąpienie typu danych
- Daemonizowany proces init_replica
- Demonizowany proces replikacji z dwoma oddzielnymi podprocesami, jednym do odczytu i jednym do odtwarzania
pgloader
pgloader ładuje dane z różnych źródeł do PostgreSQL. Może przekształcać dane, które czyta w locie i przesyła surowy kod SQL przed i po załadowaniu. Używa protokołu COPY PostgreSQL do przesyłania strumieniowego danych na serwer i zarządza błędami, wypełniając parę plików shutdown.dat i reject.log.
Dzięki możliwości ładowania danych bezpośrednio ze źródła bazy danych, pgloader obsługuje również migracje z innych produktów do PostgreSQL. W tym trybie działania pgloader obsługuje zarówno schemat, jak i dane migracji w jednym bezobsługowym poleceniu, co pozwala na zaimplementowanie ciągłej migracji.
Główne funkcje to:
- Obsługiwane jest wiele formatów źródłowych, takich jak pliki CSV, db3 i IBM IXF
- Transformacja danych w locie
- Projekcje w pełnym polu
- Czytanie ze skompresowanych plików (zip, tar i gzip)
- Obsługa HTTP(S)
- Wykrywanie schematu docelowego
- W przypadku błędu zatrzymaj/wznów następne opcje
- Polecenia przed/po SQL
- Migracja jednym poleceniem
- Wykrywanie schematu
- Reguły przesyłania zdefiniowane przez użytkownika
- Migracje częściowe zawierające/wykluczające tabele
- Tylko schemat lub dane
- Zmaterializowane widoki lub przepisywanie schematu w locie
- Ciągła migracja
Ora2Pg
Ora2Pg to bezpłatne narzędzie używane do migracji bazy danych Oracle lub MySQL do schematu zgodnego z PostgreSQL. Łączy bieżącą bazę danych, skanuje ją i wyodrębnia jej strukturę lub dane, a następnie generuje skrypty SQL, które można załadować do bazy danych PostgreSQL.
Główne funkcje to:
- Eksportuj pełny schemat bazy danych (tabele, widoki, sekwencje, indeksy) z unikalnym, podstawowym, obcym kluczem i ograniczeniami kontrolnymi
- Dotacje eksportowe/uprawnienia dla użytkowników i grup
- Eksportuj zakres/listę partycji i podpartycji
- Eksportuj wybrane tabele (poprzez określenie nazw tabel).
- Eksportuj predefiniowane funkcje, wyzwalacze, procedury, pakiety i treści pakietów
- Eksportuj pełne dane lub postępuj zgodnie z klauzulą WHERE
- Pełna obsługa obiektu Oracle BLOB jako PG BYTEA
- Eksportuj widoki Oracle jako tabele PG
- Eksportuj typy zdefiniowane przez użytkownika Oracle
- Zapewnij podstawową automatyczną konwersję kodu PLSQL do PLPGSQL
- Eksportuj tabele Oracle jako tabele opakowujące dane obce
- Eksportuj widok zmaterializowany
- Pokaż szczegółowy raport zawartości bazy danych Oracle
- Ocena kosztów migracji bazy danych Oracle
- Ocena poziomu trudności migracji bazy danych Oracle
- Ocena kosztów migracji kodu PL/SQL z pliku
- Ocena kosztów migracji zapytań Oracle SQL przechowywanych w pliku
- Generuj pliki XML ktr do użycia z Penthalo Data Integrator (Cettle)
- Eksportuj lokalizator Oracle i geometrie przestrzenne do PostGis
- Eksportuj DBLINK jako Oracle FDW
- Eksportuj SYNONIMY jako widoki
- Eksportuj KATALOG jako zewnętrzną tabelę lub katalog dla rozszerzenia external_file
- Pełny eksport MySQL, podobnie jak baza danych Oracle
Dostępnych jest więcej opcji ETL, takich jak Pentaho czy Talen, ale są one bardziej zorientowane na integrację danych lub zarządzanie danymi niż migrację, więc nie będziemy ich tutaj opisywać, aby uniknąć obszernego wpisu na blogu. Więcej informacji znajdziesz tutaj.
Replikacja logiczna PostgreSQL dla migracji
Replikacja logiczna to metoda replikacji obiektów danych i ich zmian w oparciu o ich tożsamość replikacji (zwykle klucz podstawowy). Opiera się na trybie publikowania i subskrybowania, w którym jeden lub więcej subskrybentów subskrybuje jedną lub więcej publikacji w węźle wydawcy.
Publikacja to zestaw zmian wygenerowany z tabeli lub grupy tabel (nazywany również zbiorem replikacji). Węzeł, w którym zdefiniowana jest publikacja, jest określany jako wydawca. Subskrypcja jest następną stroną replikacji logicznej. Węzeł, w którym zdefiniowana jest subskrypcja, określany jest mianem subskrybenta i określa on połączenie z inną bazą danych oraz zbiorem publikacji (jedną lub więcej), które chce subskrybować. Subskrybenci pobierają dane z publikacji, które subskrybują.
Tej metody można użyć do migracji lub aktualizacji bazy danych PostgreSQL.
Więcej informacji można znaleźć w odpowiednim wpisie na blogu dotyczącym aktualizacji PostgreSQL bez przestojów.
Wnioski
Migracje to trudne i ryzykowne zadanie, ponieważ przenosisz lub przekształcasz dane z jednego (lub więcej) źródła do celu (lub więcej niż jednego), a jest jeszcze gorzej, jeśli celem jest inny silnik. Musisz więc mieć dobry plan ze szczegółowymi krokami i oczywiście środowisko testowe do testowania wszystkich etapów migracji. W tym blogu wspomnieliśmy o niektórych narzędziach, które mogą pomóc w tym zadaniu, a najlepszy wybór będzie zależał od Twoich wymagań dotyczących dostępności systemu.