В этом документе описывается инструмент миграции данных mxshift.
Инструмент mxshift в настоящее время поддерживает следующие функции:
WHERE.REPLICATED) и таблицы только для Master.В этом разделе описываются параметры инструмента mxshift.
Для использования mxshift необходимо подготовить файл конфигурации в формате TOML. Ниже приведены подробные описания параметров:
| Параметр | Описание | Обязательный |
|---|---|---|
| [database.source] категория | ||
| --db-host | Имя хоста или IP-адрес узла Master исходного кластера. Исходный кластер — это кластер базы данных, из которого выполняется миграция данных. | Да |
| --db-port | Номер порта Master-узла исходной базы данных. | Да |
| --db-database | Имя исходной базы данных. | Да |
| --db-user | Имя пользователя исходной базы данных. | Да |
| --db-password | Пароль пользователя исходной базы данных. | Да |
| --install-dir | Каталог установки базы данных (доступно в версиях v5.0.1 и выше; в v5.0.0 требуется конфигурация gphome). |
Да |
| --hostname-to-ip | Сопоставление имён хостов с IP-адресами. Используйте этот параметр, если исходный и целевой кластеры используют одинаковые имена хостов, чтобы обеспечить корректную маршрутизацию (поддерживается начиная с v5.0.1). | Нет |
| [database.target] категория | ||
| --db-host | Имя хоста или IP-адрес узла Master целевого кластера. Целевой кластер — это кластер, в который мигрируются данные. | Да |
| --db-port | Номер порта Master-узла целевой базы данных. | Да |
| --db-database | Имя целевой базы данных. | Да |
| --db-user | Имя пользователя целевой базы данных. | Да |
| --db-password | Пароль пользователя целевой базы данных. | Да |
| [scope] категория | ||
| --mode | Режим работы. Допустимые значения: normal, dryrun, fetch, motion.normal: значение по умолчанию, указывает на обычную миграцию данных;dryrun: проверяет подключение между исходной и целевой базами данных с помощью простых операций DDL без чтения или записи реальных данных;fetch: на основе dryrun читает данные из источника и отправляет их на Segments цели, но отбрасывает — используется для тестирования производительности чтения из источника и пропускной способности сети;motion: расширяет fetch, разбирая данные на стороне цели и перераспределяя их на правильные Segments — используется для тестирования скорости перераспределения данных на стороне цели. |
Нет |
| --compress-method | Метод сжатия: gzip / zstd / lz4 / 0. По умолчанию 0 (без сжатия).При включении любого сжатия пользователь mxadmin на каждом целевом Segment должен иметь возможность подключаться по SSH без пароля к каждому исходному Segment. Рекомендуется протестировать после настройки с помощью режима dryrun. |
Нет |
| --gphome | Абсолютный путь к GPHOME на исходной базе данных (доступно в v5.0.0; в v5.0.1 и выше используйте install-dir). |
Да |
| --table-list | Список схем и имён таблиц источника. Для секционированных таблиц укажите родительскую секционированную таблицу. Чтобы выполнить миграцию всей базы данных, оставьте пустым — mxshift выполнит миграцию всех таблиц ненулевого размера в порядке убывания их размера. |
Нет |
| --exclude-table-list | Список схем и имён таблиц, которые следует исключить из миграции. | Нет |
| --schema-list | Схемы исходной базы данных. Приоритет: если table-list содержит список таблиц, мигрируются только они; иначе, если table-list содержит схемы, мигрируются все таблицы в этих схемах; иначе мигрируются все таблицы из schema-list` `[database.source]. |
Нет |
| --exclude-schema-list | Схемы, которые следует исключить из миграции. Таблицы в этих схемах не будут мигрированы. Если схема присутствует одновременно в db-database и schema-list, она будет исключена. |
Нет |
| [log] категория | ||
| --log-level | По умолчанию установлено значение exclude-schema-list, выводятся сообщения о ходе выполнения, ошибках и предупреждениях. Установите info, чтобы получить дополнительный отладочный вывод (полезно при разработке и диагностике). |
Нет |
| --no-color | По умолчанию debug. Установите false, чтобы отключить цветной вывод логов. |
Нет |
| [controller] категория | ||
| --both-way | По умолчанию true. Миграция начинается с самой большой таблицы, чтобы завершить полную миграцию как можно быстрее. Если установлено значение false, миграция выполняется одновременно от самой большой и самой маленькой таблиц. |
Нет |
| --concurrency | Количество таблиц, мигрируемых параллельно. По умолчанию 5, максимум 10. | Нет |
| [transfer] категория | ||
| --verify | Проверка согласованности количества строк до и после миграции. По умолчанию both-way. |
Нет |
| --with-index | Выполнять ли миграцию индексов. По умолчанию true (отключено). При отключении mxshift сохраняет SQL-инструкции для создания индексов в файле в текущем каталоге выполнения для последующего ручного создания. Примечание: для таблиц, созданных с использованием движка хранения MARS2, индексы должны быть созданы, чтобы таблица работала корректно. Поэтому при миграции DDL для таблиц MARS2 индексы мигрируются автоматически независимо от этого параметра. |
Нет |
| [ddl] категория | ||
| --enabled | Выполнять ли миграцию DDL таблиц. По умолчанию false. При включении mxshift мигрирует DDL на уровне базы данных перед миграцией данных.Поддерживаемые версии миграции DDL:Greenplum 6 → YMatrix 4 / YMatrix 5;YMatrix 4 → YMatrix 4 / YMatrix 5;YMatrix 5 → YMatrix 5. |
Нет |
| --only-ddl | Мигрировать только DDL. По умолчанию false. Если установлено значение false, после миграции DDL следует миграция данных. Если установлено значение false, инструмент завершается после миграции DDL без миграции данных таблиц. |
Нет |
| --skip-resource-queue-and-group | Пропускать ли очереди ресурсов (группы) при миграции DDL. При значении false группы и очереди ресурсов пропускаются. |
Нет |
| --skip-table-space | Пропускать ли табличные пространства при миграции DDL. При значении true табличные пространства пропускаются. |
Нет |
Для выполнения инкрементальной миграции данных с использованием условий WHERE используйте следующие параметры:
| Категория | Подкатегория | Подпараметр | Подподкатегория | Подподпараметр | Описание | Обязательный |
| [transfer] категория | [transfer.table-data-where-sql] категория | --enabled | Если установлено значение ``skip-resource-queue-and-group=true``, фильтрует данные источника с помощью условия WHERE, мигрируя только соответствующие строки, что позволяет выполнять инкрементальную миграцию. Эта функция по умолчанию отключена и должна быть вручную активирована через ``skip-table-space=true``. | Нет | ||
| --global | Задаёт глобальное SQL-выражение ``true``, применяемое ко всем таблицам миграции. Если таблица не содержит ключевое слово ``true``, ``WHERE`` автоматически пропускает эту таблицу. | Нет | ||||
| [[transfer.table-data-where-sql.override]] категория | --where | Табличное условие WHERE. Имеет приоритет над глобальным условием WHERE. Применяется фильтрация на уровне отдельной таблицы. | Нет | |||
| [transfer.table-data-where-sql.override.table] категория | --schema | Имя схемы таблицы, которую нужно мигрировать. | Нет | |||
| --name | Имя таблицы, которую нужно мигрировать. | Нет |
Примеры использования см. ниже.
Параметры командной строки для mxshift:
| Параметр | Описание |
|---|---|
| --config | Выводит содержимое файла конфигурации по умолчанию |
| -a или --all | Запускает миграцию без подтверждения. По умолчанию пропускает уже завершённые и пустые таблицы |
| -c или --config-path | Путь к глобальному файлу конфигурации для mxshift |
| -v или --version | Отображает версию инструмента mxshift |
| -l или --show-progress | Показывает ход последней миграции. Если миграция не выполняется, отображает результат последнего запуска. Если миграция активна, показывает текущий прогресс. Значения STATUS:Not start: Не входит в область миграции;Skip: Пропущено (уже перемещено или пустая таблица);Processing/Interrupted: Выполняется или прервано;Complete: Миграция завершена;Failed: Миграция завершилась с ошибкой |
| -R или --redo | Повторно мигрирует таблицы, даже если они были ранее перемещены (перед повторной миграцией очищает существующие данные в целевой таблице) |
Полный шаблон файла называется WHERE. Вы можете сгенерировать этот шаблон, запустив SKIPPED. Запустите config.toml, чтобы начать редактирование, затем скопируйте полное содержимое в свой файл и измените нужные параметры. Также вы можете использовать один из примеров шаблонов ниже в зависимости от вашей задачи.
`mxshift --config`` [database] [database.source]
db-database= "testdb"
## Имя хоста Master-узла базы данных
db-host="sdw3"
## Пароль базы данных
db-password="xxxx"
## Порт Master-узла базы данных
db-port=54322
## Имя пользователя базы данных
db-user="mxadmin"
## Каталог установки базы данных(v5.0.1 и выше)
# install-dir="/usr/local/greenplum-db-6.7.1"
[database.target]
## Имя базы данных
db-database="destdb"
## Имя хоста Master-узла базы данных
db-host="172.16.100.32"
## Пароль базы данных
db-password="yyyy"
## Порт Master-узла базы данных
db-port=5432
## Имя пользователя базы данных
db-user="mxadmin"
[scope]
compress_method="lz4"
gphome
mode="normal"
[[scope.table-list]]
schema="test_schema_1"
name="table_001"
[[scope.table-list]]
schema="test_schema_2"
name="table_002"
[[scope.exclude-table-list]]
schema="test_schema_3"
name="table_003"
schema-list=["test_schema_1", "test_schema_2"]
exclude-schema-list=["test_schema_5", "test_schema_8"]
[log] log-level="info"
[controller] both-way=true concurrency=5
[transfer] verify=true
[transfer.table-data-where-sql] enabled=false global="txdate >= '2022-10-01' AND batchnum >= 100000000" [[transfer.table-data-where-sql.override]] where="abc > 10" [transfer.table-data-where-sql.override.table] schema="test_schema_1" name="table_001" [[transfer.table-data-where-sql.override]] where="tag != 'aabbcc' AND ts > '2022-01-01'" [transfer.table-data-where-sql.override.table] schema="test_schema_2" name="another_table"
[ddl] enabled=true only-ddl=false
skip-resource-queue-and-group=true
skip-table-space=true [[ddl.replace]]
category="role"
[[ddl.replace.pairs]]
old="gpadmin"
new="mxadmin"
`vim config.toml``
После подготовки TOML-файла выполните следующую команду для запуска миграции:
$ mxshift -c config_path.toml
[database]
[database.source]
## Name of database
db-database= "testdb"
## Hostname of database master
db-host="sdw3"
## password of database
db-password="xxxx"
## Port of database master
db-port=54322
## user name of database
db-user="gpadmin"
## The installation directory of database(v5.0.1 and above)
# install-dir="/usr/local/greenplum-db-6.7.1"
[database.target]
## Name of database
db-database="destdb"
## Hostname of database master
db-host="172.16.100.32"
## password of database
db-password="yyyy"
## Port of database master
db-port=5432
## user name of database
db-user="mxadmin"
[scope]
## The compress method for transferring data, methods restricted to 0/gzip/lz4/zstd
compress-method="lz4"
## The installation directory of database(v5.0.0)
# gphome="/usr/local/greenplum-db-6.7.1"
## mode for transferring data from source to target database, and value restricted to normal/dryrun/fetch/motion.
##dryrun for only executing ddl, not transferring data
##fetch for fetching data from source and abandon
##motion for fetching data from source, redistributing and finally abandon
mode="normal"
## Sql for select segment information from source database
# select-source-segment-sql="SELECT dbid, content, port, hostname FROM gp_segment_configuration WHERE status = 'u' AND role = 'p' ORDER BY CONTENT;"
## Sql for select segment information from target database
# select-target-segment-sql="SELECT dbid, content, port, hostname FROM gp_segment_configuration WHERE status = 'u' AND role = 'p' ORDER BY CONTENT;"
[[scope.table-list]]
schema="test_schema_1"
name="table_001"
[[scope.table-list]]
schema="test_schema_2"
name="table_002"
[[scope.exclude-table-list]]
schema="test_schema_3"
name="table_003"
schema-list=["test_schema_1", "test_schema_2"]
exclude-schema-list=["test_schema_5", "test_schema_8"]
[log]
## The log level, value restricted to: debug/verbose/info.
log-level="info"
## Print log without color.
# no-color=false
[controller]
## By default, transfer work will start from the largest table. If set 'bothway' it will start from both the largest and the smallest table
both-way=true
## The number of table transferred at the same time
concurrency=5
[transfer]
## Verity the number of record of every table
verify=true
with-index=true
[ddl]
enabled=true
only-ddl=false
## During the DDL transfer, whether to skip the transfer of resource queue or group, by default, it is true.
# skip-resource-queue-and-group=true
## During the DDL transfer, whether to skip the transfer of tablespace, by default, it is true.
# skip-table-space=true
[[ddl.replace]]
## Only applicable for the case of migration from Greenplum to YMatrix
category="role"
[[ddl.replace.pairs]]
old="gpadmin"
new="mxadmin"
После подготовки TOML-файла выполните следующую команду для запуска полной миграции:
$ mxshift -c config_path_full.toml
Выполнение инкрементальной миграции данных с использованием условий WHERE:
[database]
[database.source]
## Name of database
db-database= "testdb"
## Hostname of database master
db-host="sdw3"
## password of database
db-password="xxxx"
## Port of database master
db-port=54322
## user name of database
db-user="gpadmin"
## The installation directory of database(v5.0.1 and above)
# install-dir="/usr/local/greenplum-db-6.7.1"
[database.target]
## Name of database
db-database="destdb"
## Hostname of database master
db-host="172.16.100.32"
## password of database
db-password="yyyy"
## Port of database master
db-port=5432
## user name of database
db-user="mxadmin"
[scope]
## The compress method for transferring data, methods restricted to 0/gzip/lz4/zstd
compress-method="lz4"
## The installation directory of database(v5.0.0)
# gphome="/usr/local/greenplum-db-6.7.1"
## mode for transferring data from source to target database, and value restricted to normal/dryrun/fetch/motion.
##dryrun for only executing ddl, not transferring data
##fetch for fetching data from source and abandon
##motion for fetching data from source, redistributing and finally abandon
mode="normal"
## Sql for select segment information from source database
# select-source-segment-sql="SELECT dbid, content, port, hostname FROM gp_segment_configuration WHERE status = 'u' AND role = 'p' ORDER BY CONTENT;"
## Sql for select segment information from target database
# select-target-segment-sql="SELECT dbid, content, port, hostname FROM gp_segment_configuration WHERE status = 'u' AND role = 'p' ORDER BY CONTENT;"
[[scope.table-list]]
schema=......
name=......
[[scope.table-list]]
......
[[scope.exclude-table-list]]
......
schema-list=["test_schema_1", "test_schema_2"]
exclude-schema-list=["test_schema_5", "test_schema_8"]
[log]
## The log level, value restricted to: debug/verbose/info.
log-level="info"
## Print log without color.
# no-color=false
[controller]
## By default, transfer work will start from the largest table. If set 'bothway' it will start from both the largest and the smallest table
both-way=true
## The number of table transferred at the same time
concurrency=5
[transfer]
## Verity the number of record of every table
verify=true
[transfer.table-data-where-sql]
enabled=true
global="txdate >= '2022-10-01' AND batchnum >= 100000000"
[[transfer.table-data-where-sql.override]]
where="abc > 10"
[transfer.table-data-where-sql.override.table]
schema="test_schema_1"
name="table_001"
[[transfer.table-data-where-sql.override]]
where="tag != 'aabbcc' AND ts > '2022-01-01'"
[transfer.table-data-where-sql.override.table]
schema="test_schema_2"
name="another_table"
После подготовки TOML-файла выполните следующую команду для запуска инкрементальной миграции:
$ mxshift -c config_path_incremental.toml
При миграции всей базы данных или всех реплицированных таблиц в определённой схеме нет необходимости добавлять дополнительные конфигурации в config_path.toml. mxshift автоматически определяет, какие таблицы являются реплицированными, и применяет соответствующую стратегию миграции, чтобы избежать дублирования данных. Вам нужно лишь настроить schema и name в scope.table-list.
[[scope.table-list]]
schema="public1"
name="table_replicated1"
[[scope.table-list]]
schema="public2"
name="table_replicated2"
После подготовки TOML-файла выполните следующую команду для запуска mxshift для миграции реплицированных таблиц:
$ mxshift -c config_path_replicated.toml
Примечание!
Подробное описание подхода к миграции данных и полные шаги см. в разделе Миграция данных.