MySQL增量实时同步到StarRocks

go-mysql-starrocks是一个用Go编写的工具,用于将MySQL的数据实时同步到StarRocks,便于构建实时数据仓库。用户需要配置包含MySQL和StarRocks连接信息的toml文件,定义库表同步规则,然后启动工具进行数据迁移。日志默认输出到控制台,可指定日志文件路径。该工具支持后台运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

go-mysql-starrocks是一个用go语言开发的,用于mysql实时同步到starrocks的工具组件,方便构建实时数仓。

使用说明

1. 修改配置文件

mysql-to-starrocks.toml

# name 必填,多实例运行时需保证全局唯一
name = "mysql2starrocks"

[mysql] # mysql连接信息
host = "127.0.0.1"
port = 3306
username = "root"
password = ""

[starrocks] # starrocks连接信息
host = "127.0.0.1"
port = 8040
username = "root"
password = ""

[[rule]] # 库表同步映射1
source-schema = "mysql_test"
source-table = "tb1"
target-schema = "starrocks_test"
target-table = "tb1"

[[rule]] # 库表同步映射2
source-schema = "mysql_test"
source-table = "tb2"
target-schema = "starrocks_test"
target-table = "tb2"
2. 启动
[sr@ ~]$ ./go-mysql-starrocks-linux-xxxxxx -config mysql-to-starrocks.toml
3. 查看日志

默认输出到控制台

指定log-file参数运行

[sr@ ~]$ ./go-mysql-starrocks-linux-xxxxxx -config mysql-to-starrocks.toml -log-file mysql2starrocks.log
[sr@ ~]$ tail -f mysql2starrocks.log
4. 查看帮助
[sr@ ~]$ ./go-mysql-starrocks-linux-xxxxxx -h
5. 后台运行
[sr@ ~]$ ./go-mysql-starrocks-linux-xxxxxx -config mysql-to-starrocks.toml -log-file mysql2starrocks.log &
[sr@ ~]$ exit
### StarRocks 内置 MySQL 主从复制配置 #### 添加 BE 节点至 StarRocks 集群 为了确保集群有足够的资源处理来自 MySQL 的数据同步请求,可以通过 MySQL 客户端将 BE 节点添加至 StarRocks 集群。 ```sql ALTER SYSTEM ADD BACKEND "host:port"; ``` 此命令用于向现有的 StarRocks 集群中增加新的后端节点[^1]。 #### 启用持久化主键索引 对于需要高效读写性能以及稳定性的场景,在 StarRocks 中启用 `enable_persistent_index` 参数是非常重要的。这允许系统利用磁盘和内存共同维护主键索引,从而减少对内存的需求并提高稳定性。特别是当使用的磁盘为 SSD 时,推荐设置此选项为 `true`: ```sql SET GLOBAL enable_persistent_index=true; ``` 这一特性自版本 2.3.0 开始被支持,并有助于优化大规模数据集上的查询效率[^3]。 #### 设置 MySQL CDC 连接器 为了让 StarRocks 实现与 MySQL 数据库间的实时增量更新,需下载相应的连接器并将必要的 JAR 文件放置于 Flink 的 lib 目录下。具体来说,针对 MySQL-CDC-Inlong 接口,应放入 `mysql-connector-java:8.0.21.jar` 到 `$FLINK_HOME/lib/`路径内[^2]。 #### 创建表结构映射关系 接下来定义源数据库 (MySQL) 和目标存储 (StarRocks) 表之间的一致性映射。创建对应的外部表来表示 MySQL 中的数据源,并指定其变更捕获机制(CDC)。以下是简化版 SQL 示例: ```sql CREATE EXTERNAL TABLE IF NOT EXISTS mydb.mytable ( id BIGINT, name STRING, age INT ) PARTITIONED BY (`ds` string) WITH ( 'connector' = 'mysql-cdc', 'hostname' = 'localhost', 'port' = '3306', 'username' = 'root', 'password' = 'your_password', 'database-name' = 'source_db', 'table-name' = 'source_table' ); ``` 这段脚本会建立一个名为 `mytable` 的外部表,它能够监听 MySQL 上特定模式下的变化事件,并将其转发给下游消费者即 StarRocks。 #### 执行数据迁移任务 最后一步是提交包含上述 DDL 声明在内的 SQL 文件作为输入参数启动 InLong Sort 流程。通过运行如下 shell 命令即可触发整个过程: ```bash ./bin/flink run -c org.apache.inlong.sort.Entrance \ /path/to/inlong-sort/sort-dist-[version].jar \ --sql.script.file /path/to/sql_script.sql ``` 这里 `/path/to/sql_script.sql` 是指定了所有必要操作的 SQL 文档位置;而 `-c` 参数后面跟的是入口类名称,用来指示程序执行逻辑起点所在的位置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值