Из 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 добавляет дублирующиеся строки.
Параметры подключения
| Параметр | Тип | Обязательность / значение по умолчанию | Описание |
|---|---|---|---|
type | STRING | Обязательный, без значения по умолчанию | Используйте jdbc |
user / password | STRING | Обязательные, без значения по умолчанию | Учётные данные исходной базы данных |
jdbc_url | STRING | Обязательный, без значения по умолчанию | URL подключения к источнику через JDBC, включая имя базы данных |
driver_url | STRING | Обязательный, без значения по умолчанию | Jar, доступный всем FE/BE; в этом примере используется имя заранее установленного файла |
driver_class | STRING | Обязательный, без значения по умолчанию | Класс 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 повторно вслепую.
Рекомендации
Проверьте окружение на этой небольшой таблице, затем переносите большие объёмы данных пакетами, разбивая их по стабильным ключам или временным диапазонам. Для непрерывной репликации нужна модель целевых данных, поддерживающая обновления, удаления и повторное воспроизведение изменений; проектируйте таблицы для снимков и постоянно синхронизируемые копии отдельно.