logo
Блог Vinchin База данных Как мигрировать MySQL в PostgreSQL 2 способами?

Как мигрировать MySQL в PostgreSQL 2 способами?

2024-01-24 | Elena Zhang

Оглавление
  • Миграция MySQL на PostgreSQL с помощью Pgloader
  • Переход с MySQL на PostgreSQL с использованием Py-mysql2pgsql
  • Резервное копирование MySQL и PostgreSQL до и после миграции базы данных
  • Заключение

миграция mysql на postgresql

Системы управления реляционными базами данных (RDBMS) широко используются во многих отраслях, от электронной коммерции и веб-сайтов до финансовых услуг и географического дизайна. MySQL vs PostgreSQL - два популярных из них, открытые для свободного использования, и они занимают места в топ-5 баз данных, привлекающих мировое внимание.

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

Обычно MySQL часто используется как небольшая веб-база данных для организаций, которые тщательно настроили, просмотрели и относительно простые запросы, генерируемые приложением (особенно те, которые могут использовать PRIMARY KEYs). MySQL в таких случаях работает быстрее.

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

Если вы занимаетесь миграцией MySQL в PostgreSQL (см. преобразование PostgreSQL в MySQL), этот блог представит два метода преобразования.

Миграция MySQL на PostgreSQL с помощью Pgloader

Pgloader - это бесплатный инструмент для миграции баз данных, который позволяет пользователям осуществлять непрерывную миграцию из MySQL, SQLite и MS SQL Server в PostgreSQL.

Предпосылки:

  • Доступ к серверам, которые настраивают брандмауэр, и пользователю, не являющемуся root, с правами sudo.

  • Пользователь Root MySQL аутентифицируется с помощью пароля и принимает зашифрованные соединения.

  • Используйте сервер PostgreSQL в качестве клиентской машины MySQL.

1.     Установите Pgloader.

Вы можете установить Pgloader из репозиториев Ubuntu APT с использованием команды apt, но для использования опции useSSL в v3.5.1 и более поздних версиях, вам придется установить из репозитория GitHub с использованием исходного кода.

a.  Обновите индекс пакета сервера Postgres.

          postgres-server$ 

sudo apt update

b.     Введите следующие команды и нажмите Enter, чтобы установить зависимости Pgloader.

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

c.     Перейдите на страницу релизов проекта на GitHUb, найдите последнюю версию> Assets > скопируйте ссылку на исходный код (tar.gz), вставьте в команду curl и замените URL https.

postgres-server$ curl -fsSLO https://github.com/dimitri/pgloader/releases/download/v3.6.9/pgloader-bundle-3.6.9.tgz

d.     Извлеките tarball.

postgres-server$ tar xvf v3.6.9.tar.gz

e.     Перейдите в новый родительский каталог Pgloader.

postgres-server$ cd pgloader-3.6.9/

f.      Скомпилируйте бинарный файл Pgloader.

postgres-server$ сделать pgloader

g.     Переместите двоичный файл в каталог /usr/local/bin.

postgres-server$ sudo mv ./build/bin/pgloader /usr/local/bin/

h.     Проверьте версию Pgloader, чтобы подтвердить его установку.

postgres-server$ pgloader –version

2.     Создайте роль и базу данных PostgreSQL.

Пользователи базы данных PostgreSQL могут быть аутентифицированы через протокол идентификации/ident (по умолчанию) и пароль, в то время как вариант по умолчанию обеспечивает большую безопасность, он создает проблемы для внешнего подключения.

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

a.     Создайте новую роль. -P флаг запрашивает пароль для новой роли.

postgres-server$ sudo -u postgres createuser --interactive -P

b.     Затем скрипт запросит имя новой роли.

Enter name of role to add:

c.     Введите и подтвердите пароль для роли.

Enter password for new role:

Enter it again:

d.     Классифицируйте новую роль как суперпользователя для расширенных привилегий. Введите y и нажмите ENTER.

Output

. . .

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

e.     Создайте целевую базу данных для загрузки исходных данных.

postgres-server$ sudo -u postgres createdb xxx

3.     Создайте специального пользователя MySQL и управляйте сертификатами.

a.     Откройте приглашение MySQL.

mysql -u root -p

b.     Создайте нового пользователя MySQL. Замените your_postgres_server_ip на общедоступный IP-адрес PostgreSQL и password на безопасный пароль или парольную фразу.

mysql> CREATE USER 'new_mysql_name'@'your_postgres_server_ip' IDENTIFIED BY 'password' REQUIRE SSL;

с.     Предоставьте новосозданному пользователю MySQL доступ к цели.

GRANT ALL ON source_db.* TO ' new_mysql_name'@'your_postgresql_server_ip';

d.     Перезагрузите таблицы разрешений, чтобы включить изменения привилегий.

mysql> FLUSH PRIVILEGES;

e.     Закройте приглашение.

mysql> exit

f.      Добавьте файлы ca.pem и client-cert.pem в доверенное хранилище сертификатов Ubuntu, чтобы включить SSL для Pgloader. Не забудьте изменить имена этих файлов, чтобы включить расширение файла .crt.

postgres-server$ sudo cp ~/client-ssl/ca.pem /usr/local/share/ca-certificates/ca.pem.crt

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

h.     Ищите сертификаты.

postgres-server$ sudo update-ca-certificates

4.     Перенесите данные из MySQL в PostgreSQL.

$ pgloader mysql://mysql_username:password@mysql_server_ip_/source_database_name? useSSL=true postgresql:// postgresql://postgresql_role_name:password@postgresql_server_ip/target_database_name?option_1=value&option_n=value

5.     Проверьте миграцию.

a.     Запустите запрос PostgreSQL.

postgres-server$ sudo -i -u postgres psql

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

postgres-server$ c xxx

c.     Проверьте, содержит ли ваша база данных PostgreSQL перемещенные данные:

xxx=# SELECT * FROM source_db.sample_table;

6.     Перенесите MySQL на PostgreSQL на той же машине. Запустите команду от пользователя Linux, который может получить доступ к root MySQL пользователя.

$ pgloader mysql://root@localhost/source_dbpgsql://sammy:postgresql_password@localhost/target_db

7.     Выполните миграцию из CSV-файла.

$ pgloader load.csv pgsql://sammy:password@localhost/target_db

Переход с MySQL на PostgreSQL с использованием Py-mysql2pgsql

Py-mysql2pgsql - это инструмент для конвертации/миграции/экспорта данных из MySQL (только проверено на 5.x), записи совместимого с PostgreSQL (8.2 или выше) файла дампа или его передачи в ваш работающий сервер PostgreSQL (8.2 или выше). Сейчас он не может импортировать пространственные данные из MySQL.

Предпосылки:

  • Python 2.7

  • MySQL-python

  • psycopg2

  • PyYAML

  • termcolor (за исключением установки на Windows)

  • pytz

1.     Установите py-mysql2pgsql.

Windows: установите зависимости драйвера, затем инструмент.

psycopg2 для Windows: pip install psycopg2

MySQL-python для Windows

PyPI: автоматическая установка всех зависимостей.

> pip install py-mysql2pgsql

Источник:

> git clone git://github.com/philipsoutham/py-mysql2pgsql.git

> cd py-mysql2pgsql

> python setup.py install

2.  Проверьте правильность установки.

[root@xxx /data/aken/tools/py-mysql2pgsql-0.1.5]# py-mysql2pgsql -h

usage: py-mysql2pgsql [-h] [-v] [-f FILE] [-V]

     Инструмент для миграции/конвертации данных из mysql в postgresql.

     Необязательные аргументы:

-h, --help     Показать это сообщение помощи и выйти

-v, --verbose    Показать прогресс миграции данных.

-f FILE, --file FILE   Расположение файла конфигурации (по умолчанию: mysql2pgsql.yml). Если его там еще нет, он будет создан для вас.

-V, --version    Добавить версию и выйти.

3.     Отредактируйте файл конфигурации миграции mysql2pgsql.yml.

# specify socket to choose a socket connection

# localhost is a special MySQL hostname overriding the port option

# choose tcp to c

Mysql:

hostname:

port:

socket:

username:

password:

database:

compress: false

destination:

# output goes to file if file is provided, otherwise postgres

file:

postgres:

hostname:

port:

username:

password:

database:

# Only the tables listed will be transformed. To convert all tables, leave empty.

#only_tables:

#- tablex

#- tablex

# if exclude_tables is given, the tables listed below will not be converted.

#exclude_tables:

#- tablex

#- tablex

#Only the schema definition will be exported or migrated if supress_data is true.

supress_data: false

#Only the schema definition will be exported or migrated if supress_ddl is true.

supress_ddl: false

# if force_truncate is true, a table is forced to be truncated before table loading

force_truncate: false

# if timezone is true, makes the tzinfo mysql data appendable or convertible to UTC

timezone: false

# If index prefix_is specified, indexes with that name prefix will be generated.

index_prefix:

4.     Перенесите данные из MySQL в PostgreSQL.

[root@xxx]# py-mysql2pgsql -v -f mysql2pgsql.yml

>>>>>>>>>> STARTING <<<<<<<<<<

START CREATING TABLES

START - CREATING TABLE tab_xxx

FINISH - CREATING TABLE tab_xxx

DONE CREATING TABLES

START WRITING TABLE DATA

START - WRITING DATA TO tab_xxx

FINISH - WRITING DATA TO tab_xxx

DONE WRITING TABLE DATA

START CREATING INDEXES AND CONSTRAINTS

START - ADDING INDEXES TO tab_xxx

FINISH - ADDING INDEXES TO tab_xxx

START - ADDING CONSTRAINTS ON tab_xxx

FINISH - ADDING CONSTRAINTS ON tab_xxx

DONE CREATING INDEXES AND CONSTRAINTS

>>>>>>>>>> FINISHED <<<<<<<<<<

Резервное копирование MySQL и PostgreSQL до и после миграции базы данных

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

На рынке существует много надежных решений для резервного копирования баз данных, и Vinchin Backup & Recovery - одно из них, которое автоматизирует резервное копирование баз данных и обеспечивает простое восстановление данных для нескольких баз данных, включая MySQL, PostgreSQL, Postgres Pro, SQL Server, Oracle DB и MariaDB.

С Vinchin Backup & Recovery вы можете настроить повторное резервное копирование базы данных из полного, дифференциального, инкрементного, архивного лога и резервного копирования транзакционного журнала, варианты которого различаются в зависимости от базы данных и уменьшают данные на 50% после дедупликации и сжатия.

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

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

Хотите попробовать Vinchin Backup & Recovery? Вот 60-дневная полная версия Enterprise-версии, доступная для тестирования.

 Вот обзор процесса резервного копирования MySQL с помощью Vinchin Backup & Recovery:

1.     Выберите источник резервного копирования из списка лицензированных баз данных.

Выберите источник резервного копирования

2.     Укажите желаемый узел резервного копирования и хранилище для вашего резервного копирования.

хранилище для резервного копирования

3.     Настройте настраиваемые стратегии резервного копирования.

Настройте стратегии резервного копирования

Настройте стратегии резервного копирования

4.     Просмотрите и нажмите Submit.

Выполнить резервное копирование

Заключение

Некоторые пользователи баз данных MySQL могут считать PostgreSQL более предпочтительным вариантом за его улучшенную производительность при сложных запросах, в этой статье я представляю два способа миграции с MySQL на PostgreSQL с использованием двух инструментов миграции данных с GitHub, Pgloader и Py-mysql2pgsql.

Обратите внимание, что резервное копирование базы данных до и после процесса преобразования необходимо для обеспечения безопасности данных. Используйте Vinchin Backup & Recovery для упрощения резервного копирования базы данных и управления несколькими базами данных через централизованную консоль.

поделиться:

Категории:Database Tips
Может быть, вам также понравится...