MySQL?遷移至?Doris?最佳實(shí)踐方案(最新整理)
在數(shù)據(jù)架構(gòu)不斷演進(jìn)的背景下,從 MySQL 遷移至 Doris 成為許多企業(yè)提升數(shù)據(jù)處理效率的關(guān)鍵選擇。本文將深入剖析三種經(jīng)過實(shí)踐驗(yàn)證的 MySQL 遷移至 Doris 的最佳方案,涵蓋全量遷移、增量同步、混合遷移以及基于 CDC(Change Data Capture)的實(shí)時(shí)遷移。每種方案都將從技術(shù)原理、實(shí)施步驟、適用場(chǎng)景、資源消耗等維度展開分析,并通過對(duì)比選型幫助讀者結(jié)合自身業(yè)務(wù)需求與技術(shù)棧,找到最契合的遷移路徑,實(shí)現(xiàn)數(shù)據(jù)平穩(wěn)過渡與性能躍升。
一、JDBC Catalog 聯(lián)邦查詢方案(適合跨庫實(shí)時(shí)查詢)
1. 方案概述
通過 Doris 1.2 + 引入的JDBC Catalog功能,直接通過標(biāo)準(zhǔn) JDBC 協(xié)議連接 MySQL 數(shù)據(jù)庫,實(shí)現(xiàn)跨庫聯(lián)邦查詢和數(shù)據(jù)寫入。相比 ODBC,JDBC 接口更統(tǒng)一、兼容性更強(qiáng),且無需復(fù)雜的驅(qū)動(dòng)安裝和版本匹配。
2. 環(huán)境要求
| 組件 | 版本要求 | 說明 |
|---|---|---|
| Doris | 1.2.0+ | 支持 JDBC Catalog 功能 |
| MySQL | MySQL 5.7, 8.0 或更高版本 | 需開啟遠(yuǎn)程訪問權(quán)限 |
| MySQL JDBC | 8.0.28+ | 驅(qū)動(dòng)下載:MySQL JDBC 驅(qū)動(dòng) |
3. 實(shí)施步驟
3.1 安裝 JDBC 驅(qū)動(dòng)(所有 FE/BE 節(jié)點(diǎn))
步驟 1:創(chuàng)建驅(qū)動(dòng)目錄
mkdir -p /your_path/doris/jdbc_drivers
步驟 2:上傳驅(qū)動(dòng)包下載 MySQL JDBC 驅(qū)動(dòng)(如mysql-connector-java-8.0.31.jar),并上傳至所有 FE/BE 節(jié)點(diǎn)的/your_path/doris/jdbc_drivers目錄。
步驟 3:配置驅(qū)動(dòng)路徑編輯fe.conf和be.conf,添加以下配置(如果你使用的是默認(rèn)的路徑就不需要修改這個(gè)了):
jdbc_drivers_dir = /opt/doris/jdbc_drivers
步驟 4:重啟服務(wù)
# 重啟FE cd /opt/doris/fe bin/stop_fe.sh && bin/start_fe.sh --daemon # 重啟BE cd /opt/doris/be bin/stop_be.sh && bin/start_be.sh --daemon
3.2 創(chuàng)建 JDBC Catalog
使用 MySQL 客戶端連接 Doris,執(zhí)行以下 SQL 創(chuàng)建 Catalog:
CREATE CATALOG mysql PROPERTIES (
"type"="jdbc",
"user"="root",
"password"="secret",
"jdbc_url" = "jdbc:mysql://example.net:3306",
"driver_url" = "mysql-connector-j-8.3.0.jar",
"driver_class" = "com.mysql.cj.jdbc.Driver"
)jdbc_url:MySQL 連接地址,可指定數(shù)據(jù)庫(如jdbc:mysql://host:port/dbname)。
driver_url:驅(qū)動(dòng)文件名,需與/opt/doris/jdbc_drivers目錄下的文件一致,默認(rèn)就是/your_path/doris/jdbc_drivers 。
3.3 創(chuàng)建查詢或者導(dǎo)入
執(zhí)行聯(lián)邦查詢
-- 直接查詢mysql表 SELECT * FROM mysql_catalog.mysql_db.user_table LIMIT 10; -- 與Doris表關(guān)聯(lián)查詢 SELECT a.id, a.name, b.sales FROM mysql_catalog.mysql_db.user_table a JOIN doris_table b ON a.id = b.user_id;
執(zhí)行數(shù)據(jù)導(dǎo)入
-- 建表 create table as select mysql_catalog.mysql_db.user_table -- 導(dǎo)入 insert into doris_table select * from mysql_catalog.mysql_db.user_table
4. 注意事項(xiàng)
數(shù)據(jù)類型映射:
MySQL 的BIT類型映射為 Doris 的STRING,需在查詢時(shí)轉(zhuǎn)換(如CAST(bit_col AS BOOLEAN))。
大字段類型(如BLOB)建議通過VARCHAR映射,避免查詢性能問題。
權(quán)限控制:
為 Doris 創(chuàng)建專用 MySQL 用戶,僅授予SELECT權(quán)限,避免數(shù)據(jù)泄露。
在 Doris 中通過GRANT語句限制外部表訪問權(quán)限。
連接安全
如果您使用數(shù)據(jù)源上安裝的全局信任證書配置了 TLS,則可以通過將參數(shù)附加到在 jdbc_url 屬性中設(shè)置的 JDBC 連接字符串來啟用集群和數(shù)據(jù)源之間的 TLS。
二、Binlog 實(shí)時(shí)同步方案(適合增量數(shù)據(jù)同步)
1. 方案概述
通過 Canal 解析 MySQL Binlog,實(shí)時(shí)同步增量數(shù)據(jù)至 Doris,支持 INSERT/UPDATE/DELETE 操作,適用于實(shí)時(shí)數(shù)據(jù)倉庫場(chǎng)景。
2. 環(huán)境要求
| 組件 | 版本要求 | 說明 |
|---|---|---|
| MySQL | 5.7+ | 需開啟 Binlog(ROW 模式) |
| Canal | 1.1.5+ | 下載地址:Canal 官網(wǎng) |
| Doris | 1.2.0+ | 支持 BATCH_DELETE 特性 |
3. 實(shí)施步驟
3.1 配置 MySQL 開啟 Binlog
步驟 1:編輯 my.cnf
[mysqld] log-bin=mysql-bin # 開啟Binlog binlog-format=ROW # 使用ROW模式 binlog-row-image=FULL # 記錄完整行數(shù)據(jù) server-id=1 # 唯一服務(wù)器ID
步驟 2:重啟 MySQL 服務(wù)
sudo systemctl restart mysqld
3.2 部署 Canal 服務(wù)
步驟 1:下載并解壓
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz tar -zxvf canal.deployer-1.1.5.tar.gz
步驟 2:創(chuàng)建 Instance 配置
mkdir conf/demo cp conf/example/instance.properties conf/demo/ vim conf/demo/instance.properties
關(guān)鍵配置:
canal.instance.master.address=192.168.1.100:3306 # MySQL地址 canal.instance.dbUsername=canal # 具有Binlog讀取權(quán)限的用戶 canal.instance.dbPassword=canal # 用戶密碼 canal.destination=demo # Instance名稱
步驟 3:啟動(dòng) Canal
sh bin/startup.sh # 驗(yàn)證日志:cat logs/demo/demo.log,顯示"start successful"表示啟動(dòng)成功
3.3 在 Doris 中創(chuàng)建同步任務(wù)
步驟 1:創(chuàng)建 Doris 目標(biāo)表(需開啟 BATCH_DELETE)
--create Mysql table CREATE TABLE `test.source_test` ( `id` int(11) NOT NULL COMMENT "", `name` int(11) NOT NULL COMMENT "" ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- create Doris table CREATE TABLE `target_test` ( `id` int(11) NOT NULL COMMENT "", `name` int(11) NOT NULL COMMENT "" ) ENGINE=OLAP UNIQUE KEY(`id`) COMMENT "OLAP" DISTRIBUTED BY HASH(`id`) BUCKETS 8 PROPERTIES ( "replication_allocation" = "tag.location.default: 3" );
步驟 2:創(chuàng)建同步作業(yè)
CREATE SYNC demo_job ( FROM mysql.test_table INTO target_test (id, name) ) FROM BINLOG ( "type" = "canal", "canal.server.ip" = "192.168.1.101", # Canal服務(wù)器IP "canal.server.port" = "11111", # Canal默認(rèn)端口 "canal.destination" = "demo", # Canal Instance名稱 "canal.username" = "canal", "canal.password" = "canal", "sync.mode" = "incremental" # 增量同步模式 );
4. 注意事項(xiàng)
權(quán)限要求:需為 Canal 創(chuàng)建專用用戶(如 canal),并授予REPLICATION SLAVE權(quán)限:
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal'; GRANT REPLICATION SLAVE ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES;
數(shù)據(jù)一致性:建議在 Doris 目標(biāo)表中使用UNIQUE KEY 模型,并確保 MySQL 源表與 Doris 表字段一一對(duì)應(yīng)。
三、Flink CDC 流式同步方案(適合高實(shí)時(shí)性場(chǎng)景)
1. 方案概述
基于 Flink CDC(Change Data Capture)實(shí)時(shí)捕獲 MySQL 變更數(shù)據(jù),通過 Flink-Doris 連接器寫入 Doris,支持秒級(jí)延遲,適用于實(shí)時(shí)分析、實(shí)時(shí)報(bào)表場(chǎng)景。
2. 環(huán)境要求
| 組件 | 版本要求 | 說明 |
|---|---|---|
| Flink | 1.13+ | 支持 Flink CDC 2.0+ |
| Doris | 1.2.0+ | 支持 Delete 操作 |
| 依賴庫 | flink-cdc-2.1.0, flink-doris-connector-1.1.0 | 需下載對(duì)應(yīng)版本 JAR 包 |
3. 實(shí)施步驟
3.1 構(gòu)建 Flink 作業(yè)
步驟 1:添加 Maven 依賴
<dependency> <groupId>org.apache.doris</groupId> <artifactId>flink-doris-connector-1.16</artifactId> <version>25.1.0</version> </dependency>
步驟 2:編寫 Flink SQL 腳本
-- enable checkpoint SET 'execution.checkpointing.interval' = '30s'; -- 創(chuàng)建MySQL CDC源表 CREATE TABLE mysql_cdc_source ( id INT PRIMARY KEY NOT ENFORCED, name STRING, age INT, ts TIMESTAMP(3) METADATA FROM 'source_ts' VIRTUAL ) WITH ( 'connector' = 'mysql-cdc', 'hostname' = '192.168.1.100', 'port' = '3306', 'username' = 'root', 'password' = 'your_mysql_password', 'database-name' = 'test', 'table-name' = 'user_table' ); -- 創(chuàng)建Doris目標(biāo)表 CREATE TABLE doris_sink ( id INT, name STRING, age INT, update_time TIMESTAMP(3) ) WITH ( 'connector' = 'doris', 'fenodes' = 'doris-fe:8030', 'table.identifier' = 'test.user_table', 'username' = 'root', 'password' = '', 'sink.properties.format' = 'json', 'sink.enable-delete' = 'true', 'sink.label-prefix' = 'flink_cdc_' ); -- 啟動(dòng)數(shù)據(jù)同步 INSERT INTO doris_sink SELECT id, name, age, ts FROM mysql_cdc_source;
3.2 提交 Flink 作業(yè)
<FLINK_HOME>bin/flink run \
-Dexecution.checkpointing.interval=10s \
-Dparallelism.default=1 \
-c org.apache.doris.flink.tools.cdc.CdcTools \
lib/flink-doris-connector-1.16-24.0.1.jar \
mysql-sync-database \
--database test_db \
--mysql-conf hostname=127.0.0.1 \
--mysql-conf port=3306 \
--mysql-conf username=root \
--mysql-conf password=123456 \
--mysql-conf database-name=mysql_db \
--including-tables "tbl1|test.*" \
--sink-conf fenodes=127.0.0.1:8030 \
--sink-conf username=root \
--sink-conf password=123456 \
--sink-conf jdbc-url=jdbc:mysql://127.0.0.1:9030 \
--sink-conf sink.label-prefix=label \
--table-conf replication_num=1 4. 注意事項(xiàng)
并行度優(yōu)化:根據(jù) MySQL 表數(shù)量和數(shù)據(jù)量調(diào)整 Flink 作業(yè)并行度,避免單任務(wù)壓力過大。
寫入機(jī)制:開啟 Flink Checkpoint,Doris Flink Connector 提供了兩種攢批模式,默認(rèn)使用基于 Flink Checkpoint 的流式寫入方式。
| 寫入方式 | 流式寫入 | 批量寫入 |
|---|---|---|
| 觸發(fā)條件 | 依賴 Flink 的 Checkpoint,跟隨 Flink 的 Checkpoint 周期寫入到 Doris 中 | 基于 Connector 內(nèi)的時(shí)間閾值、數(shù)據(jù)量閾值進(jìn)行周期性提交,寫入到 Doris 中 |
| 一致性 | Exactly-Once | At-Least-Once,基于主鍵模型可以保證 Exactly-Once |
| 延遲 | 受 Checkpoint 時(shí)間間隔限制,通常較高 | 獨(dú)立的批處理機(jī)制,靈活調(diào)整 |
| 容錯(cuò)與恢復(fù) | 與 Flink 狀態(tài)恢復(fù)完全一致 | 依賴外部去重邏輯(如 Doris 主鍵去重) |
四、Datax 同步方案(適合全量 / 批量數(shù)據(jù)遷移)
1. 方案概述
Datax 是一款異構(gòu)數(shù)據(jù)源之間數(shù)據(jù)同步工具,通過編寫 JSON 格式的配置文件,實(shí)現(xiàn) MySQL 與 Doris 之間的數(shù)據(jù)抽取、轉(zhuǎn)換和加載(ETL)。該方案適用于全量數(shù)據(jù)遷移、定期批量數(shù)據(jù)同步場(chǎng)景,對(duì)實(shí)時(shí)性要求不高,但配置靈活,可自定義數(shù)據(jù)處理邏輯。
2. 環(huán)境要求
| 組件 | 版本要求 | 說明 |
|---|---|---|
| Datax | 3.0+ | 下載地址:Datax 官網(wǎng) |
| MySQL | 5.6+ | 支持標(biāo)準(zhǔn) JDBC 協(xié)議 |
| Doris | 1.0+ | 支持通過 JDBC 或 Broker 導(dǎo)入數(shù)據(jù) |
3. 實(shí)施步驟
3.1 安裝 Datax
# 下載Datax壓縮包 wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz tar -zxvf datax.tar.gz
3.2 編寫同步配置文件
創(chuàng)建mysql_to_doris.json文件,示例配置如下:
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": [xxx],
"connection": [
{
"jdbcUrl": ["jdbc:mysql://localhost:3306/demo"],
"table": ["table_name"]
}
],
"username": "root",
"password": "xxxxx",
"where": ""
}
},
"writer": {
"name": "doriswriter",
"parameter": {
"loadUrl": ["127.0.0.1:8030"],
"column": [xxxx],
"username": "root",
"password": "xxxxxx",
"postSql": ["select count(1) from table_name"],
"preSql": [],
"flushInterval":30000,
"connection": [
{
"jdbcUrl": "jdbc:mysql://127.0.0.1:9030/demo",
"selectedDatabase": "demo",
"table": ["table_name"]
}
],
"loadProps": {
"format": "json",
"strip_outer_array":"true",
"line_delimiter": "\\x02"
}
}
}
}
],
"setting": {
"speed": {
"channel": "1"
}
}
}
}3.3 執(zhí)行同步任務(wù)
python bin/datax.py mysql_to_doris.json
4. 注意事項(xiàng)
數(shù)據(jù)類型映射:確保 MySQL 與 Doris 字段類型兼容,如 MySQL 的DATETIME對(duì)應(yīng) Doris 的DATETIME,避免類型轉(zhuǎn)換錯(cuò)誤。
性能調(diào)優(yōu):通過調(diào)整channel參數(shù)控制并發(fā)度,但過高的并發(fā)可能導(dǎo)致資源耗盡,建議根據(jù)數(shù)據(jù)庫負(fù)載測(cè)試后設(shè)置。
五、方案對(duì)比與選型建議
| 方案 | 適用場(chǎng)景 | 復(fù)雜度 | 資源依賴 |
|---|---|---|---|
| JDBC Catalog | 跨庫實(shí)時(shí)查詢、聯(lián)邦分析 | ★★☆☆☆ | 依賴 Doris JDBC 功能 |
| Binlog 同步 | 增量數(shù)據(jù)實(shí)時(shí)同步 | ★★★☆☆ | 需部署 Canal 及相關(guān)組件 |
| Flink CDC 同步 | 高實(shí)時(shí)性流式處理、復(fù)雜清洗 | ★★★★☆ | 依賴 Flink 集群 |
| Datax 同步 | 全量 / 批量數(shù)據(jù)遷移、離線同步 | ★★★☆☆ | 輕量級(jí)工具,獨(dú)立部署 |
優(yōu)先選擇 JDBC Catalog:當(dāng)需要快速驗(yàn)證跨庫查詢功能,或需要與 Doris 本地表進(jìn)行關(guān)聯(lián)分析時(shí)。
推薦 Binlog 同步:常規(guī)增量同步場(chǎng)景,兼顧實(shí)時(shí)性和部署復(fù)雜度。
選擇 Flink CDC:對(duì)實(shí)時(shí)性要求高(如實(shí)時(shí)看板),或需要復(fù)雜數(shù)據(jù)清洗(通過 Flink SQL 實(shí)現(xiàn))。
使用 Datax 同步:適合一次性全量遷移,或周期性批量同步歷史數(shù)據(jù)。
五、數(shù)據(jù)遷移最佳實(shí)踐要點(diǎn)
全量初始化與增量同步結(jié)合:
首次遷移時(shí),先通過DataX導(dǎo)入 MySQL 全量數(shù)據(jù),再啟動(dòng) Binlog 或 Flink CDC 同步增量數(shù)據(jù),避免歷史數(shù)據(jù)積壓。
數(shù)據(jù)類型兼容性測(cè)試:
重點(diǎn)驗(yàn)證 MySQL 的ENUM、SET、BIT等類型在 Doris 中的映射是否符合預(yù)期。
監(jiān)控與告警體系:
結(jié)合 Prometheus + Grafana 監(jiān)控或者Doris Manager工具觀察資源使用情況。
這份文檔已涵蓋多種遷移方式。若還想對(duì)某個(gè)遷移方式補(bǔ)充更多細(xì)節(jié),或增加其他方面的內(nèi)容,歡迎討論。
到此這篇關(guān)于MySQL 遷移至 Doris 最佳實(shí)踐方案的文章就介紹到這了,更多相關(guān)MySQL 遷移至 Doris內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql 操作總結(jié) INSERT和REPLACE
用于操作數(shù)據(jù)庫的SQL一般分為兩種,一種是查詢語句,也就是我們所說的SELECT語句,另外一種就是更新語句,也叫做數(shù)據(jù)操作語句。2009-07-07
linux環(huán)境下安裝mysql數(shù)據(jù)庫的詳細(xì)教程
這篇文章主要介紹了linux環(huán)境下安裝mysql數(shù)據(jù)庫的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
mysql5.7.18.zip免安裝版本配置教程(windows)
這篇文章主要為大家詳細(xì)介紹了mysql5.7.18.zip安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
mysql查找刪除表中重復(fù)數(shù)據(jù)方法總結(jié)
在本篇文章中小編給大家整理了關(guān)于mysql查找刪除表中重復(fù)數(shù)據(jù)方法和相關(guān)知識(shí)點(diǎn),需要的朋友們參考下。2019-05-05

