Как перенести базу данных MySQL в PostgreSQL с помощью pgLoader

Вступление

PostgreSQL, также известный как «Postgres», является системой управления реляционными базами данных с открытым исходным кодом (RDBMS). В последние годы он наблюдал drastic Популярность, и многие разработчики и компании переносили свои данные в Postgres из других решений для баз данных.

Перспектива миграции базы данных может быть пугающей, особенно при переходе с одной системы управления базами данных на другую. pgLoader - это инструмент миграции базы данных с открытым исходным кодом, целью которого является упрощение процесса миграции на PostgreSQL. Он поддерживает миграцию из нескольких типов файлов и RBDMS, включая MySQL и SQLite, в PostgreSQL.

В этом руководстве приведены инструкции по установке pgLoader и его использованию для переноса удаленной базы данных MySQL в PostgreSQL через соединение SSL. В конце учебника мы также кратко коснемся нескольких различных сценариев миграции, где pgLoader может быть полезен.

Предпосылки

Для завершения этого урока вам понадобится следующее:

  • Доступ к * двум * серверам, на каждом из которых работает Ubuntu 18.04. Оба сервера должны иметь брандмауэр и пользователя без полномочий root с настроенными привилегиями sudo. Чтобы настроить их, вы можете воспользоваться нашим Initial Руководством по установке сервера для Ubuntu 18.04.

  • MySQL установлен на * один из серверов *. Чтобы настроить это, выполните * Шаги 1, 2 и 3 * нашего руководства на How Установить MySQL на Ubuntu 18.04. Обратите внимание, что для завершения всех обязательных учебных пособий, указанных здесь, вам необходимо настроить пользователя * root * MySQL для аутентификации с паролем, как описано в https://www.digitalocean.com/community/tutorials/how- to-install-mysql-on-ubuntu-18-04 # step-3-% E2% 80% 94- (необязательно) -установка аутентификации пользователя-и-привилегий [Шаг 3] руководства по установке MySQL.

  • PostgreSQL установлен на * другом сервере *. Для этого выполните * Шаг 1 * нашего руководства Как установить и использовать PostgreSQL в Ubuntu 18.04.

  • Ваш * MySQL сервер * также должен быть настроен на прием зашифрованных соединений. Чтобы настроить это, выполните каждый шаг нашего учебного руководства на How To Настроить SSL / TLS для MySQL в Ubuntu 18.04, включая необязательный https://www.digitalocean.com/community/tutorials/how-to-configure-ssl-tls-for-mysql-on-ubuntu-18-04# step-6-% E2% 80% 94- (опционально) -configuring-validation-for-mysql-connections [* Шаг 6 *]. Следуя этому руководству, обязательно используйте ваш * сервер PostgreSQL * в качестве клиентского компьютера MySQL, поскольку вам нужно будет иметь возможность подключиться к вашему серверу MySQL с вашего компьютера Postgres, чтобы перенести данные с помощью pgLoader.

Обратите внимание, что в этом руководстве сервер, на котором вы установили MySQL, будет называться «* MySQL server *», а все команды, которые должны выполняться на этом компьютере, будут отображаться на синем фоне, например:

Аналогично, это руководство будет ссылаться на другой сервер как на «* PostgreSQL » или « Postgres» сервер *, и любые команды, которые должны быть запущены на этом компьютере, будут показаны на красном фоне:

Пожалуйста, имейте это в виду, когда будете следовать этому руководству, чтобы избежать путаницы.

Шаг 1 - (Необязательно) Создание образца базы данных и таблицы в MySQL

Этот шаг описывает процесс создания тестовой базы данных и заполнения ее фиктивными данными. Мы рекомендуем вам потренироваться в использовании pgLoader с этим тестовым примером, но если у вас уже есть база данных, которую вы хотите перенести, вы можете перейти на https://www.digitalocean.com/community/tutorials/how-to-migrate- mysql-database-to-postgres-using-pgloader # step-2-% E2% 80% 94-installation-pgloader [следующий шаг].

Начните с открытия приглашения MySQL на вашем сервере MySQL:

mysql -u root -p

После ввода пароля пользователя * root * MySQL вы увидите приглашение MySQL.

Оттуда создайте новую базу данных, выполнив следующую команду. Вы можете назвать свою базу данных как угодно, но в этом руководстве мы назовем ее ++:

CREATE DATABASE ;

Затем переключитесь на эту базу данных с помощью команды + USE +:

USE ;
OutputDatabase changed

В этой базе данных используйте следующую команду, чтобы создать образец таблицы. Здесь мы назовем эту таблицу ++, но не стесняйтесь дать ей другое имя:

CREATE TABLE  (
   employee_id INT PRIMARY KEY,
   first_name VARCHAR(50),
   last_name VARCHAR(50),
   start_date DATE,
   salary VARCHAR(50)
);

Затем заполните эту таблицу некоторыми примерами данных о сотрудниках с помощью следующей команды:

INSERT INTO  (employee_id, first_name, last_name, start_date, salary)
VALUES (1, 'Elizabeth', 'Cotten', '2007-11-11', '$105433.18'),
(2, 'Yanka', 'Dyagileva', '2017-10-30', '$107540.67'),
(3, 'Lee', 'Dorsey', '2013-06-04', '$118024.04'),
(4, 'Kasey', 'Chambers', '2010-08-18', '$116456.98'),
(5, 'Bram', 'Tchaikovsky', '2018-09-16', '$61989.50');

После этого вы можете закрыть приглашение MySQL:

exit

Теперь, когда у вас есть примерная база данных, загруженная фиктивными данными, вы можете перейти к следующему шагу, на котором вы установите pgLoader на свой сервер PostgreSQL.

Шаг 2 - Установка pgLoader

pgLoader - это программа, которая может загружать данные в базу данных PostgreSQL из различных источников. Он использует PostgreSQL команду + COPY + для копирования данных из исходной базы данных или файла, например https: // en. Файл wikipedia.org/wiki/Comma-separated_values[comma-separated values ​​(CSV)] - в целевую базу данных PostgreSQL.

pgLoader доступен из репозиториев Ubuntu APT по умолчанию, и вы можете установить его с помощью команды + apt +. Однако в этом руководстве мы воспользуемся опцией pgLoader + useSSL +, функцией, которая позволяет выполнять миграцию из MySQL через SSL-соединение. Эта функция доступна только в последней версии pgLoader, которая на момент написания этой статьи может быть установлена ​​только с использованием исходного кода из его репозитория GitHub.

Перед установкой pgLoader вам необходимо установить его зависимости. Если вы еще этого не сделали, обновите * индекс пакета * вашего сервера Postgres:

sudo apt update

Затем установите следующие пакеты:

  • + sbcl +: компилятор Common Lisp

  • + unzip +: де-архиватор для файлов + .zip +

  • + libsqlite3-dev +: коллекция файлов разработки для SQLite 3

  • + gawk +: сокращение от «GNU awk», языка сканирования и обработки паттернов.

  • + curl +: инструмент командной строки для передачи данных из URL

  • + make +: утилита для управления компиляцией пакетов

  • + freetds-dev +: клиентская библиотека для баз данных MS SQL и Sybase

  • + libzip-dev +: библиотека для чтения, создания и изменения zip-архивов

Используйте следующую команду для установки этих зависимостей:

sudo apt install sbcl unzip libsqlite3-dev gawk curl make freetds-dev libzip-dev

При появлении запроса подтвердите, что вы хотите установить эти пакеты, нажав + ENTER.

Затем перейдите на страницу Releases проекта pgLoader GitHub и найдите последнюю версию. Для этого руководства мы будем использовать последнюю версию на момент написания этой статьи: version 3.6.1. Прокрутите вниз до меню * Assets * и скопируйте ссылку на файл + tar.gz +, помеченный * Source code *. Затем вставьте ссылку в следующую команду + wget +. Это скачает архив на ваш сервер:

wget

Извлеките тарбол:

tar xvf

Это создаст ряд новых каталогов и файлов на вашем сервере. Перейдите в новый родительский каталог pgLoader:

cd pgloader-/

Затем используйте утилиту + make + для компиляции двоичного файла + pgloader +:

make pgloader

Эта команда займет некоторое время для сборки двоичного файла + pgloader +.

Переместите двоичный файл в каталог + / usr / local / bin, где Ubuntu ищет исполняемые файлы:

sudo mv ./build/bin/pgloader /usr/local/bin/

Вы можете проверить правильность установки pgLoader, проверив его версию, например:

pgloader --version
Outputpgloader version ""
compiled with SBCL 1.4.5.debian

Теперь pgLoader установлен, но прежде чем вы сможете начать миграцию, вам нужно будет внести некоторые изменения в конфигурацию ваших экземпляров PostgreSQL и MySQL. Сначала мы сосредоточимся на сервере PostgreSQL.

Шаг 3 - Создание роли и базы данных PostgreSQL

Команда + pgloader + работает, копируя исходные данные из файла или непосредственно из базы данных и вставляя их в базу данных PostgreSQL. По этой причине вы должны либо запустить pgLoader как пользователь Linux, у которого есть доступ к вашей базе данных Postgres, либо указать роль PostgreSQL с соответствующими разрешениями в вашей команде загрузки.

PostgreSQL управляет доступом к базе данных с помощью roles. В зависимости от того, как настроена роль, ее можно рассматривать как пользователя базы данных или группу пользователей базы данных. В большинстве РСУБД вы создаете пользователя с помощью команды SQL + CREATE USER. Postgres, однако, поставляется с удобным скриптом, называемым + createuser +. Этот скрипт служит оболочкой для SQL-команды + CREATE USER +, которую можно запустить непосредственно из командной строки.

Выполните следующую команду на своем сервере Postgres, чтобы создать новую роль. Обратите внимание на флаг + -P +, который сообщает + createuser +, чтобы вы предложили ввести пароль для новой роли:

sudo -u postgres createuser --interactive -P

Сначала вам может быть предложено ввести пароль + sudo +. Затем скрипт предложит вам ввести имя для новой роли. В этом руководстве мы назовем эту роль * pgloader_pg *:

OutputEnter name of role to add:

После этого + createuser + предложит вам ввести и подтвердить пароль для этой роли. Обязательно запомните этот пароль, так как он понадобится вам для выполнения миграции на шаге 5:

OutputEnter password for new role:
Enter it again:

Наконец, скрипт спросит вас, следует ли классифицировать новую роль как суперпользователя. В PostgreSQL подключение к базе данных с ролью суперпользователя позволяет обойти все проверки разрешений базы данных, за исключением права на вход в систему. Из-за этого привилегию суперпользователя не следует использовать легкомысленно, и документация PostgreSQL рекомендует выполнять большую часть работы с базой данных как не роль суперпользователя. Однако, поскольку pgLoader нужны широкие привилегии для доступа к данным и их загрузки в таблицы, вы можете безопасно предоставить этой новой роли привилегии суперпользователя. Сделайте это, набрав + y + и затем нажав + ENTER:

Output. . .
Shall the new role be a superuser? (y/n)

PostgreSQL поставляется с другим полезным скриптом, который позволяет вам создавать базу данных из командной строки. Поскольку pgLoader также нужна целевая база данных, в которую он может загружать исходные данные, выполните следующую команду, чтобы создать ее. Мы назовем эту базу данных ++, но вы можете изменить ее, если хотите:

sudo -u postgres createdb

Если ошибок нет, эта команда завершится без вывода.

Теперь, когда у вас есть выделенный пользователь PostgreSQL и пустая база данных, в которую вы можете загрузить свои данные MySQL, осталось выполнить еще несколько изменений перед выполнением миграции. Вам нужно создать выделенного пользователя MySQL с доступом к вашей исходной базе данных и добавить свои клиентские сертификаты в хранилище доверенных сертификатов Ubuntu.

Шаг 4 - Создание выделенного пользователя в MySQL и управление сертификатами

Защита данных от snoopers является одной из наиболее важных частей работы любого администратора базы данных. Перенос данных с одного компьютера на другой открывает злоумышленникам возможность sniff пакеты, передаваемые по сетевому соединению, если оно не зашифровано. На этом шаге вы создадите отдельного пользователя MySQL, который pgLoader будет использовать для выполнения миграции через SSL-соединение.

Начните с открытия строки MySQL:

mysql -u root -p

В командной строке MySQL используйте следующую команду + CREATE USER, чтобы создать нового пользователя MySQL. Мы назовем этого пользователя * pgloader_my *. Поскольку этот пользователь будет получать доступ к MySQL только с вашего сервера PostgreSQL, обязательно замените 'на публичный IP-адрес вашего сервера PostgreSQL. Кроме того, замените ` на безопасный пароль или фразу-пароль:

CREATE USER ''@'' IDENTIFIED BY '' REQUIRE SSL;

Обратите внимание на условие + REQUIRE SSL + в конце этой команды. Это ограничит пользователя * pgloader_my * доступом к базе данных только через безопасное соединение SSL.

Затем предоставьте пользователю * pgloader_my * доступ к целевой базе данных и всем ее таблицам. Здесь мы укажем базу данных, которую мы создали в необязательном шаге 1, но если у вас есть собственная база данных, которую вы хотите перенести, используйте ее имя вместо ++:

GRANT ALL ON .* TO ''@'';

Затем выполните команду + FLUSH PRIVILEGES +, чтобы перезагрузить таблицы разрешений, включив изменения привилегий:

FLUSH PRIVILEGES;

После этого вы можете закрыть приглашение MySQL:

exit

Теперь вернитесь на серверный терминал Postgres и попытайтесь войти на сервер MySQL как новый пользователь * pgloader_my *. Если вы следовали обязательному руководству на configuring SSL / TLS для MySQL тогда на вашем сервере PostgreSQL уже будет установлен + mysql-client +, и вы сможете подключиться с помощью следующей команды:

mysql -u  -p -h

Если команда выполнена успешно, вы увидите приглашение MySQL:

Убедившись, что ваш пользователь * pgloader_my * может успешно подключиться, продолжайте и закройте приглашение:

exit

На данный момент у вас есть выделенный пользователь MySQL, который может получить доступ к исходной базе данных с вашего компьютера Postgres. Однако, если вы попытаетесь перенести базу данных MySQL с использованием SSL, попытка будет неудачной.

Причина этого заключается в том, что pgLoader не может читать файлы конфигурации MySQL и, следовательно, не знает, где искать сертификат CA или сертификат клиента, который вы скопировали на сервер PostgreSQL в предварительном условии https: //www.digitalocean .com / community / tutorials / how-to-configure-ssl-tls-for-mysql-on-ubuntu-18-04 [Руководство по настройке SSL / TLS]. Однако вместо того, чтобы игнорировать требования SSL, pgLoader требует использования доверенных сертификатов в тех случаях, когда SSL необходим для подключения к MySQL. Соответственно, вы можете решить эту проблему, добавив файлы + ca.pem + и + client-cert.pem + в https://help.ubuntu.com/lts/serverguide/certificates-and-security.html.en Хранилище доверенных сертификатов Ubuntu.

Для этого скопируйте файлы + ca.pem + и + client-cert.pem + в каталог + / usr / local / share / ca-сертификаты / +. Обратите внимание, что вы также должны переименовать эти файлы, чтобы они имели расширение + .crt +. Если вы не переименуете их, ваша система не сможет распознать, что вы добавили эти новые сертификаты:

sudo cp ~/client-ssl/ca.pem /usr/local/share/ca-certificates/ca.pem.crt
sudo cp ~/client-ssl/client-cert.pem /usr/local/share/ca-certificates/client-cert.pem.crt

После этого выполните команду + update-ca-сертификаты +. Эта программа ищет сертификаты в + / usr / local / share / ca-сертификаты +, добавляет любые новые в каталог + / etc / ssl / certs / + и генерирует список доверенных сертификатов SSL - + ca-certificate.crt + `- в зависимости от содержимого каталога + / etc / ssl / certs / + `:

sudo update-ca-certificates
OutputUpdating certificates in /etc/ssl/certs...
2 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

Таким образом, вы готовы перенести базу данных MySQL в PostgreSQL.

Шаг 5 - Миграция данных

Теперь, когда вы настроили удаленный доступ со своего сервера PostgreSQL на сервер MySQL, вы готовы начать миграцию.

pgLoader позволяет пользователям переносить всю базу данных одной командой. Для перехода с базы данных MySQL на базу данных PostgreSQL на отдельном сервере команда должна иметь следующий синтаксис:

pgloader mysql://:@/?=&= postgresql://:@/?=&=

Сюда входит команда + pgloader + и две строки connection, первая для исходной базы данных и вторая для целевой базы данных. Обе эти строки подключения начинаются с объявления типа СУБД, на который указывает строка подключения, за которым следуют имя пользователя и пароль, которые имеют доступ к базе данных (разделенные двоеточием), адрес хоста сервера, на котором установлена ​​база данных, имя базы данных, на которую должен быть нацелен pgLoader, и various параметры, которые влияют на поведение pgLoader.

Используя параметры, определенные ранее в этом руководстве, вы можете перенести базу данных MySQL с помощью команды со следующей структурой. Обязательно замените любые выделенные значения, чтобы они соответствовали вашим собственным настройкам:

pgloader mysql://:@/?useSSL=true postgresql://:@localhost/

Обратите внимание, что эта команда включает в себя параметр + useSSL + в строке подключения MySQL. Если установить для этой опции значение «+ true +», pgLoader будет подключаться к MySQL через SSL. Это необходимо, поскольку вы настроили свой сервер MySQL на прием только безопасных соединений.

Если эта команда выполнена успешно, вы увидите выходную таблицу, описывающую, как прошла миграция:

Output             table name     errors       rows      bytes      total time
-----------------------  ---------  ---------  ---------  --------------
       fetch meta data          0          2                     0.111s
        Create Schemas          0          0                     0.001s
      Create SQL Types          0          0                     0.005s
         Create tables          0          2                     0.017s
        Set Table OIDs          0          1                     0.010s
-----------------------  ---------  ---------  ---------  --------------
source_db.sample_table          0          5     0.2 kB          0.048s
-----------------------  ---------  ---------  ---------  --------------
COPY Threads Completion          0          4                     0.052s
Index Build Completion          0          1                     0.011s
        Create Indexes          0          1                     0.006s
       Reset Sequences          0          0                     0.014s
          Primary Keys          0          1                     0.001s
   Create Foreign Keys          0          0                     0.000s
       Create Triggers          0          0                     0.000s
      Install Comments          0          0                     0.000s
-----------------------  ---------  ---------  ---------  --------------
     Total import time          ✓          5     0.2 kB          0.084s

Чтобы проверить, что данные были перенесены правильно, откройте приглашение PostgreSQL:

sudo -i -u postgres psql

Оттуда подключитесь к базе данных, в которую вы загрузили данные:

\c

Затем выполните следующий запрос, чтобы проверить, хранятся ли перенесенные данные в вашей базе данных PostgreSQL:

SELECT * FROM .;

Если данные действительно были загружены правильно, вы увидите следующую таблицу в выводе запроса:

Output employee_id | first_name |  last_name  | start_date |   salary
-------------+------------+-------------+------------+------------
          1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
          2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
          3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
          4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
          5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

Чтобы закрыть приглашение Postgres, выполните следующую команду:

\q

Теперь, когда мы рассмотрели, как перенести базу данных MySQL по сети и загрузить ее в базу данных PostgreSQL, мы рассмотрим несколько других распространенных сценариев миграции, в которых может пригодиться pgLoader.

Шаг 6 - Изучение других вариантов миграции

pgLoader - очень гибкий инструмент, который может быть полезен в самых разных ситуациях. Здесь мы кратко рассмотрим несколько других способов использования pgLoader для переноса базы данных MySQL в PostgreSQL.

Миграция с помощью загрузочного файла pgLoader

В контексте pgLoader load file или command file, это файл, который сообщает pgLoader, как выполнить миграцию. Этот файл может содержать команды и параметры, которые влияют на поведение pgLoader, предоставляя вам более полный контроль над тем, как ваши данные загружаются в PostgreSQL, и позволяя выполнять сложные миграции.

pgLoader документация содержит подробные инструкции о том, как использовать и расширять эти файлы для поддержки ряда типов миграции, поэтому здесь мы будем работать через сравнительно элементарный пример. Мы выполним ту же миграцию, что и на шаге 5, но также включим команду + ALTER SCHEMA +, чтобы изменить схему базы данных + new_db + с + source_db + на + public +.

Для начала создайте новый файл загрузки на сервере Postgres, используя предпочитаемый текстовый редактор:

nano pgload_test.load

Затем добавьте следующий контент, обязательно обновив выделенные значения, чтобы они соответствовали вашей собственной конфигурации:

pgload_test.load

LOAD DATABASE
    FROM      mysql://:@/?useSSL=true
    INTO pgsql://:@localhost/

WITH include drop, create tables

ALTER SCHEMA 'source_db' RENAME TO 'public'
;

Вот что делает каждый из этих пунктов:

  • + LOAD DATABASE +: эта строка указывает pgLoader загружать данные из отдельной базы данных, а не из файла или архива данных.

  • + FROM: это предложение указывает исходную базу данных. В этом случае он указывает на строку подключения для базы данных MySQL, которую мы создали в https://www.digitalocean.com/community/tutorials/how-to-migrate-mysql-database-to-postgres-using-pgloader#step -1-% E2% 80% 94- (опционально) создание базы данных и таблицы в mysql [Шаг 1].

  • + INTO +: аналогично, эта строка указывает базу данных PostgreSQL, в которую pgLoader должен загружать данные.

  • + WITH +: это предложение позволяет вам определять специфическое поведение для pgLoader. Вы можете найти полный список параметров + WITH +, которые совместимы с миграциями MySQL. Https://pgloader.readthedocs.io/en/latest/ref/mysql.html#mysql-database-migration-options-with[here] , В этом примере мы включаем только два варианта:

  • + include drop +: при использовании этой опции pgLoader удалит все таблицы в целевой базе данных PostgreSQL, которые также появляются в исходной базе данных MySQL. Если вы используете эту опцию при переносе данных в существующую базу данных PostgreSQL, вы должны выполнить резервное копирование всей базы данных, чтобы избежать потери любых данных.

  • + create tables +: эта опция указывает pgLoader создавать новые таблицы в целевой базе данных PostgreSQL на основе метаданных, хранящихся в базе данных MySQL. Если используется противоположная опция + create no tables +, то целевые таблицы должны уже существовать в целевой базе данных Postgres до миграции.

  • + ALTER SCHEMA: следуя предложению` + WITH`, вы можете добавить конкретные команды SQL, подобные этой, чтобы инструктировать pgLoader для выполнения дополнительных действий. Здесь мы указываем pgLoader изменить схему новой базы данных Postgres с + source_db + на + public +, но только после того, как она создаст схему. Обратите внимание, что вы также можете вкладывать такие команды в другие пункты, такие как + BEFORE LOAD DO +, - чтобы pgLoader мог выполнять эти команды в определенных точках процесса миграции.

Это наглядный пример того, что вы можете включить в файл загрузки для изменения поведения pgLoader. Полный список предложений, которые можно добавить в загрузочный файл, и их действия можно найти в the официальной документации pgLoader.

Сохраните и закройте файл загрузки после того, как вы добавите этот контент. Чтобы использовать его, включите имя файла в качестве аргумента команды + pgloader +:

pgloader pgload_test.load

Чтобы проверить, что миграция прошла успешно, откройте приглашение Postgres:

sudo -u postgres psql

Затем подключитесь к базе данных:

\c

И выполните следующий запрос:

SELECT * FROM sample_table;
Output employee_id | first_name |  last_name  | start_date |   salary
-------------+------------+-------------+------------+------------
          1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
          2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
          3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
          4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
          5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

Эти выходные данные подтверждают, что pgLoader успешно перенес данные, а также что команда + ALTER SCHEMA +, которую мы добавили в загрузочный файл, работала как ожидалось, так как нам не нужно было указывать схему + source_db + в запросе для просмотра данные.

Обратите внимание, что если вы планируете использовать загрузочный файл для переноса данных, хранящихся в одной базе данных, в другую, расположенную на отдельном компьютере, вам все равно придется настроить все соответствующие правила сети и брандмауэра, чтобы миграция прошла успешно.

Миграция базы данных MySQL в PostgreSQL локально

Вы можете использовать pgLoader для переноса базы данных MySQL в базу данных PostgreSQL, расположенную на той же машине. Все, что вам нужно, это запустить команду миграции из профиля пользователя Linux с доступом к пользователю * root * MySQL:

pgloader mysql://root@localhost/ pgsql://:@localhost/

Выполнение локальной миграции таким образом означает, что вам не нужно вносить какие-либо изменения в сетевую конфигурацию MySQL по умолчанию или правила брандмауэра вашей системы.

Миграция из файла CSV

Вы также можете загрузить базу данных PostgreSQL с данными из файла CSV.

Предполагая, что у вас есть CSV-файл данных с именем + load.csv +, команда для его загрузки в базу данных Postgres может выглядеть так:

pgloader load.csv pgsql://:@localhost/

Поскольку формат CSV не полностью стандартизирован, существует вероятность возникновения проблем при загрузке данных непосредственно из файла CSV таким образом. К счастью, вы можете исправить ошибки, включив различные параметры в pgLoader параметры командной строки или указав их в файле загрузки. См. Https://pgloader.readthedocs.io/en/latest/ref/csv.html[the документацию pgLoader] для получения более подробной информации.

Миграция в управляемую базу данных PostgreSQL

Также возможно выполнить миграцию из самоуправляемой базы данных в управляемую базу данных PostgreSQL. Чтобы проиллюстрировать, как может выглядеть этот вид миграции, мы будем использовать сервер MySQL и базу данных PostgreSQL, управляемую DigitalOcean. Мы также будем использовать пример базы данных, которую мы создали в https://www.digitalocean.com/community/tutorials/how-to-migrate-mysql-database-to-postgres-using-pgloader#step-1-%E2% 80% 94- (необязательно) -creating-a-sample-database-and-table-in-mysql [Шаг 1], но если вы пропустили этот шаг и у вас есть собственная база данных, которую вы хотите перенести, вы можете указать на этот вместо этого.

Для этой миграции нам не понадобится опция pgLoader + useSSL +, поскольку она работает только с удаленными базами данных MySQL, и мы запустим эту миграцию из локальной базы данных MySQL. Однако мы будем использовать параметр + sslmode = require + при загрузке и подключении к базе данных DigitalOcean Managed PostgreSQL, что обеспечит защиту ваших данных.

Поскольку на этот раз мы не используем + useSSL +, вы можете использовать + apt + для установки pgLoader вместе с пакетом + postgresql-client +, который позволит вам получить доступ к управляемой базе данных PostgreSQL с вашего сервера MySQL. :

sudo apt install pgloader postgresql-client

После этого вы можете запустить команду + pgloader + для переноса базы данных. Для этого вам понадобится строка подключения для управляемой базы данных.

Для управляемых баз данных DigitalOcean вы можете скопировать строку подключения из панели управления облаком. Сначала нажмите * Базы данных * в меню левой боковой панели и выберите базу данных, в которую вы хотите перенести данные. Затем прокрутите вниз до раздела * Сведения о соединении *. Нажмите на выпадающее меню и выберите * Строка подключения *. Затем нажмите кнопку * Копировать *, чтобы скопировать строку в буфер обмена и вставить ее в следующую команду миграции, заменив пример строки подключения PostgreSQL, показанной здесь. Это перенесет вашу базу данных MySQL в базу данных + defaultdb + PostgreSQL как роль * doadmin * PostgreSQL:

pgloader mysql://root:@localhost/ postgres://doadmin:@/defaultdb?sslmode=require

После этого вы можете использовать ту же строку подключения в качестве аргумента + psql + для подключения к управляемой базе данных PostgreSQL и https: // http: //www.digitalocean.com/community/tutorials/how-to-migrate-mysql -database к Postgres-с использованием-pgloader # шаг 1-% E2% 80% 94- (факультативно) -Создание-а-образец-БД-и-таблицы-в-MySQL [www.digitalocean.com/community/ учебные пособия / как к мигрирует-MySQL-базы данных к Postgres-с использованием-pgloader # шаг 1-% E2% 80% 94- (факультативно) -Создание-а-образца базы данных и стол-в-MySQL ] подтвердите, что миграция прошла успешно:

psql postgres://doadmin:@/defaultdb?sslmode=require

Затем выполните следующий запрос, чтобы убедиться, что pgLoader правильно перенес данные:

SELECT * FROM source_db.sample_table;
Output employee_id | first_name |  last_name  | start_date |   salary
-------------+------------+-------------+------------+------------
          1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
          2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
          3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
          4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
          5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

Это подтверждает, что pgLoader успешно перенес вашу базу данных MySQL в ваш управляемый экземпляр PostgreSQL.

Заключение

pgLoader - это гибкий инструмент, который может выполнять миграцию базы данных за одну команду. С помощью нескольких настроек, он может мигрировать всю базу данных с одного физического компьютера на другой, используя безопасное соединение SSL / TLS. Мы надеемся, что, следуя этому руководству, вы получите более четкое представление о возможностях pgLoader и возможных вариантах использования.

После переноса ваших данных в PostgreSQL могут оказаться интересными следующие учебные пособия:

Related