Перейти к содержимому
Последнее обновление

Из MySQL в Doris

В этом руководстве MySQL JDBC Catalog используется для копирования стабильного снимка данных во внутреннюю таблицу Doris. Такой подход подходит для разовой или плановой пакетной миграции и не переносит автоматически последующие обновления, удаления или изменения DDL. Варианты CDC для непрерывной синхронизации описаны ниже.

Предварительные требования​

  • База данных MySQL с именем migration_source и учётная запись источника с правом SELECT для таблицы из примера.
  • Доступность источника со всех FE/BE Doris. Установите mysql-connector-j-8.3.0.jar по инструкциям в разделах MySQL Catalog и развёртывание драйверов. В примере используется имя файла драйвера, поэтому Jar должен находиться в jdbc_drivers_dir на всех узлах FE/BE.
  • Учётная запись Doris с правами на создание объектов Catalog, баз данных и таблиц, чтение внешней таблицы и загрузку данных в целевую таблицу. См. раздел Авторизация.
  • Выполните подготовку источника в базе данных migration_source; используйте пустую целевую таблицу. Замените приведённые в примере адреса хостов, имя пользователя и пароль.

Основное использование​

1. Подготовьте исходную таблицу​

Подготовьте этот пример в исходной базе данных, используя учётную запись с правами CREATE и INSERT. Для подключения Catalog используется описанная выше учётная запись с правами чтения источника.

CREATE TABLE migration_demo (
id BIGINT PRIMARY KEY,
amount DECIMAL(12,2),
note VARCHAR(100)
);
INSERT INTO migration_demo VALUES (1, 12.50, 'first'), (2, NULL, NULL);

Результат: создана таблица с 2 строками.

2. Создайте и проверьте Catalog в Doris​

CREATE CATALOG migration_mysql PROPERTIES (
'type' = 'jdbc',
'user' = 'migration_reader',
'password' = '<source_password>',
'jdbc_url' = 'jdbc:mysql://mysql-host:3306/migration_source',
'driver_url' = 'mysql-connector-j-8.3.0.jar',
'driver_class' = 'com.mysql.cj.jdbc.Driver'
);
DESC migration_mysql.migration_source.migration_demo;

Внешняя схема должна содержать id, amount и note. Перед созданием целевой таблицы проверьте, каким типам они фактически сопоставлены.

3. Создайте целевую таблицу и скопируйте данные​

CREATE DATABASE IF NOT EXISTS migration_target;
CREATE TABLE migration_target.mysql_demo (
id BIGINT NOT NULL,
amount DECIMAL(12,2),
note STRING
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ('replication_num' = '1');

INSERT INTO migration_target.mysql_demo (id, amount, note)
SELECT id, amount, note FROM migration_mysql.migration_source.migration_demo;

SELECT id, amount, note FROM migration_target.mysql_demo ORDER BY id;
+------+--------+-------+
| id | amount | note |
+------+--------+-------+
| 1 | 12.50 | first |
| 2 | NULL | NULL |
+------+--------+-------+

Одна реплика и один бакет позволяют использовать пример для локальной проверки. Выбирайте параметры таблиц в рабочей среде с учётом доступных узлов BE и требований к надёжности. Повторное выполнение INSERT добавляет дублирующиеся строки.

Параметры подключения​

ПараметрТипОбязательность / значение по умолчаниюОписание
typeSTRINGОбязательный, без значения по умолчаниюИспользуйте jdbc
user / passwordSTRINGОбязательные, без значения по умолчаниюУчётные данные исходной базы данных
jdbc_urlSTRINGОбязательный, без значения по умолчаниюURL подключения к источнику через JDBC, включая имя базы данных
driver_urlSTRINGОбязательный, без значения по умолчаниюJar, доступный всем FE/BE; в этом примере используется имя заранее установленного файла
driver_classSTRINGОбязательный, без значения по умолчаниюКласс Java для выбранного драйвера

Сведения о пулах подключений, сопоставлении имён и настройках расположения драйверов см. в полном справочнике по JDBC.

Типы и различия между версиями​

  • Используйте более широкие типы для беззнаковых целых чисел: например, INT UNSIGNED сопоставляется с BIGINT, а BIGINT UNSIGNED — с LARGEINT. Не переносите соответствующие знаковые типы без изменений.
  • MySQL JDBC Catalog сопоставляет JSON с STRING, а не автоматически с VARIANT. Для TIME, ENUM и SET следуйте правилам сопоставления Catalog; правила JDBC и CDC могут различаться.
  • Метаданные JDBC для TINYINT(1) зависят от настроек драйвера. Проверяйте DESC, а не считайте любой TINYINT типом Boolean.
  • В серии 4.1 начиная с 4.1.5 TIMESTAMP сопоставляется с TIMESTAMPTZ, а двоичные типы — с VARBINARY; DATETIME остаётся датой и временем без часового пояса. В более ранних версиях сопоставления и настройки отличаются. В Dev используется актуальное сопоставление.
  • Пакетный INSERT не переносит поведение первичного ключа, AUTO_INCREMENT, индексы и ограничения источника. Полные правила см. в справочнике по сопоставлению типов MySQL.

Непрерывная синхронизация​

Используйте синхронизацию через Flink CDC, если при миграции нужно передать начальный снимок и переносить последующие обновления и удаления. Выбирайте совместимые версии Flink, CDC и Doris Connector по справочнику коннектора, а не сочетайте отдельные утверждения о минимальных версиях.

Проверка и ошибки​

Для одного и того же снимка и ограниченного диапазона выполните COUNT(*), COUNT(amount) и SUM(amount) для исходной таблицы migration_mysql.migration_source.migration_demo и целевой таблицы migration_target.mysql_demo. В этом примере должны получиться 2, 1 и 12.50 соответственно. Также проверьте точные значения в выборке, значения NULL, точность и часовые пояса. Подробнее о полной проверке и переключении на новую систему см. в разделе Обзор миграции.

При сбоях подключения проверьте доступность источника со всех узлов FE/BE, файлы драйверов, права доступа к источнику и ограничения на расположение драйверов. Проверьте DESC и используйте явное преобразование для несовместимых типов. После неудачного импорта выясните, какие диапазоны были записаны, прежде чем повторять попытку; не выполняйте весь INSERT повторно вслепую.

Рекомендации​

Проверьте окружение на этой небольшой таблице, затем переносите большие объёмы данных пакетами, разбивая их по стабильным ключам или временным диапазонам. Для непрерывной репликации нужна модель целевых данных, поддерживающая обновления, удаления и повторное воспроизведение изменений; проектируйте таблицы для снимков и постоянно синхронизируемые копии отдельно.