Миграцията на база данни е процесът на мигриране на данни от една или повече бази данни източник към една или повече целеви бази данни чрез използване на услуга или инструмент. Има различни видове миграции. Можете да мигрирате от технология към друга, към различен център за данни или в облака, или дори на същото място и същата технология към друга машина. Най-добрият инструмент за миграция на PostgreSQL зависи от типа миграция и изисквания като наличност или толерантност към престой и понякога е трудно да се намери най-добрият инструмент за извършване на работата.
В този блог ще споменем някои инструменти с отворен код за миграции на PostgreSQL с кратък преглед на всяка опция.
Инструменти за мигриране за архивиране и възстановяване
Това може да е най-лесният начин за извършване на миграция на данни, но и най-бавният по отношение на целта за време за възстановяване (RTO). Използването на този метод означава, че ще вземете резервно копие от текущата си база данни, най-вероятно логическо архивиране, ако искате да го възстановите в различна версия или инфраструктура, да копирате дъмпа и да го възстановите на новия сървър. В зависимост от количеството данни, това може да отнеме много време, но това е основният начин за мигриране на вашата база данни. Нека видим някои инструменти за това.
pgdump/pgdumpall
pg_dump е помощна програма за архивиране на една база данни PostgreSQL. Той прави последователни архиви, дори ако базата данни се използва едновременно, тъй като не блокира други потребители. За да архивирате цял клъстер или да архивирате глобални обекти, които са общи за всички бази данни в клъстер (като роли и пространства за таблици), трябва да използвате pg_dumpall вместо това.
Дъмповете могат да се извеждат в скриптови или архивни файлови формати. Изхвърлянията на скриптове са файлове с обикновен текст, съдържащи SQL командите, необходими за реконструкция на базата данни до състоянието, в което е била по времето, когато е била записана. Може да се използва за реконструкция на базата данни на други машини, други архитектури или дори на други продукти на SQL база данни.
pg_basebackup
pg_basebackup се използва за вземане на базов архив на работещ клъстер от база данни PostgreSQL. Архивът се прави, без да се засягат други клиенти на базата данни и може да се използва както за PITR (Point-In-Time-Recovery), така и като отправна точка на резервен сървър за поточно репликация. Той прави точно копие на файловете на клъстера на базата данни, като същевременно се уверява, че сървърът автоматично се поставя в и извън режим на архивиране. Винаги се правят резервни копия на целия клъстер на базата данни; не е възможно да се архивират отделни бази данни или обекти на база данни.
pgBackRest
pgBackRest е инструмент за архивиране с отворен код, който създава физически архиви с някои подобрения в сравнение с класическия инструмент pg_basebackup. Можете да използвате pgBackRest, за да изпълните първоначално копие на база данни за поточно репликация, като използвате съществуващо архивно копие, или можете да използвате опцията делта, за да изградите отново стар резервен сървър.
Някои от най-важните функции на pgBackRest са:
- Паралелно архивиране и възстановяване
- Локална или отдалечена работа
- Пълно, инкрементално и диференциално архивиране
- Завъртане на резервно копие и изтичане на архива
- Проверка на целостта на резервното копие
- Резервно резюме
- Delta Restore
- Шифроване
Инструменти за миграция на PostgreSQL
Вместо да използвате инструмент за архивиране, има различни помощни програми за извършване на тази миграция по по-бърз начин, с различни методи. Той може да използва ETL подход или дори да конфигурира репликация между различни технологии за бази данни, използвайки същата концепция за Extract - Transform - Load. Нека видим някои от тези инструменти.
pg_chameleon
pg_chameleon е реплика на MySQL към PostgreSQL система. Може да се свърже с протокола за репликация на MySQL и да репликира промените в данните в PostgreSQL. Независимо дали потребителят трябва да настрои постоянна реплика между MySQL и PostgreSQL, или да извърши миграция на двигателя, pg_chameleon е добра опция за задачата.
Основните характеристики са:
- Прочетете от множество MySQL схеми и ги възстановете в целева PostgreSQL база данни
- Настройте PostgreSQL да действа като подчинен MySQL
- Основна поддръжка на DDL (СЪЗДАВАНЕ/ИЗПУСКАНЕ/ПРОМЕНЯ ТАБЛИЦА, ИЗПУСКАНЕ НА ПЪРВИЧНИЯ КЛЮЧ/ОТРЕЖАВАНЕ, ПРЕИМЕНУВАНЕ)
- Таблици, които генерират грешки, автоматично се изключват от репликата
- Възможност за опресняване на единични таблици или единични схеми
- Отделете репликата от MySQL за поддръжка на миграция
- Замяна на типа данни
- Демонизиран процес init_replica
- Демонизиран процес на реплика с два отделни подпроцеса, един за четене и един за възпроизвеждане
ploader
ploader зарежда данни от различни източници в PostgreSQL. Той може да трансформира данните, които чете в движение, и да изпраща необработен SQL преди и след зареждането. Той използва протокола COPY PostgreSQL за поточно предаване на данните в сървъра и управлява грешки чрез попълване на двойка файлове reject.dat и reject.log.
Благодарение на възможността да зарежда данни директно от източник на база данни, pgloader поддържа и миграции от други продукти към PostgreSQL. В този режим на работа pgloader обработва както схемата, така и частите с данни на миграцията, в една безпилотна команда, което позволява да се реализира непрекъсната миграция.
Основните характеристики са:
- Поддържат се много изходни формати, като CSV, db3 и IBM IXF файлове
- Преобразуване на данни в движение
- Прожекции на пълно поле
- Четене от компресирани файлове (zip, tar и gzip)
- Поддръжка на HTTP(S)
- Откриване на целева схема
- При грешка спиране/възобновяване на следващите опции
- Предварителни/следващи SQL команди
- Миграция с една команда
- Откриване на схема
- Дефинирани от потребителя правила за предаване
- Частични миграции, включително/с изключение на таблици
- Само схема или данни
- Материализирани изгледи или пренаписване на схема в движение
- Непрекъснато мигриране
Ora2Pg
Ora2Pg е безплатен инструмент, използван за мигриране на Oracle или MySQL база данни към PostgreSQL съвместима схема. Той свързва текущата ви база данни, сканира я и извлича нейната структура или данни, след което генерира SQL скриптове, които можете да заредите във вашата PostgreSQL база данни.
Основните характеристики са:
- Експортиране на пълна схема на база данни (таблици, изгледи, последователности, индекси) с уникален, първичен, външен ключ и ограничения за проверка
- Експортиране на разрешения/привилегии за потребители и групи
- Експортиране на дялове и подраздели на диапазон/списък
- Експортирайте селекция от таблица (като посочите имената на таблицата).
- Експортиране на предварително дефинирани функции, тригери, процедури, пакети и тела на пакети
- Експортирайте пълни данни или следвайте клауза WHERE
- Пълна поддръжка на Oracle BLOB обект като PG BYTEA
- Експортиране на изгледи на Oracle като PG таблици
- Експортиране на потребителски дефинирани от Oracle типове
- Осигурете някакво основно автоматично преобразуване на PLSQL кода в PLPGSQL
- Експортирайте таблици на Oracle като таблици за обвивка на чужди данни
- Експортиране на материализиран изглед
- Показване на подробен отчет за съдържанието на база данни на Oracle
- Оценка на разходите за миграция на база данни на Oracle
- Оценка на нивото на трудност при мигриране на база данни на Oracle
- Оценка на разходите за миграция на PL/SQL код от файл
- Оценка на разходите за миграция на Oracle SQL заявки, съхранени във файл
- Генерирайте XML ktr файлове, които да се използват с Penthalo Data Integrator (Kettle)
- Експортиране на Oracle локатор и пространствени геометрии в PostGis
- Експортирайте DBLINK като Oracle FDW
- Експортиране на СИНОНИМИ като изгледи
- Експортиране на DIRECTORY като външна таблица или директория за разширение external_file
- Пълен експорт на MySQL точно като базата данни на Oracle
Има повече налични опции за ETL, като Pentaho или Talen, но те са по-ориентирани към интегриране на данни или управление на данни, отколкото миграция, така че няма да ги описваме тук, за да избегнем обширна публикация в блога. Можете да намерите повече информация тук.
Логическа репликация на PostgreSQL за миграции
Логическата репликация е метод за репликиране на обекти с данни и техните промени, въз основа на тяхната идентичност на репликация (обикновено първичен ключ). Базира се на режим на публикуване и абонамент, при който един или повече абонати се абонират за една или повече публикации на възел на издател.
Публикацията е набор от промени, генерирани от таблица или група таблици (наричани още набор за репликация). Възелът, където е дефинирана публикация, се нарича издател. Абонаментът е долната страна на логическата репликация. Възелът, където е дефиниран абонаментът, се нарича абонат и той дефинира връзката с друга база данни и набор от публикации (една или повече), за които иска да се абонира. Абонатите изтеглят данни от публикациите, за които се абонират.
Този метод може да се използва за мигриране или надграждане на вашата PostgreSQL база данни.
За повече информация можете да се обърнете към съответната публикация в блога относно надграждането на PostgreSQL с нулев престой.
Заключение
Миграциите са трудна и рискована задача, тъй като премествате или преобразувате данни от един (или повече) източник към цел (или повече от един) и е още по-лошо, ако целта ви е различен двигател. Така че ще трябва да имате добър план, с подробни стъпки и, разбира се, тестова среда за тестване на всички етапи на миграцията. В този блог споменахме някои инструменти, които да помогнат с тази задача и най-добрият избор ще зависи от вашите изисквания относно наличността на вашата система.