全面介绍 Apache Doris 数据灾备恢复机制及使用示例

引言

Apache Doris 作为一款 OLAP 实时数据仓库,在越来越多的中大型企业中逐步占据着主数仓这样的重要位置,主数仓不同于 OLAP 查询引擎的场景定位,对于数据的灾备恢复机制有比较高的要求,本篇就让我们全面的介绍和示范如何利用这些特性能力构建集群数据的灾备恢复机制。

这里恢复备份机制除 Backup 和 Restore 语法以外,所有可以导出后再导入的方式,都可被视为备份恢复的特性能力。

本文中所有的机制,我都已挨个搭建环境测试了一遍,并给了示例,可放心使用!

话不多说,上干货~

更好的阅读体验可前往原文阅读:全面介绍 Apache Doris 数据灾备恢复机制及使用示例 | 巨人肩膀

机制概览

Apache Doris 的灾备恢复机制非常丰富,可满足各式各样数据容灾备份的应用场景,以下是所有机制的概览表。

特性名称适用场景存储位置吞吐速度
MySQL Dump/Source小数据量数据以及表结构语句导出MySQL Client 节点指定位置结果集数据量较小,数千条速度较快
Export/Import大批量原始数据导出导入HDFS、支持S3协议的对象存储、本地文件系统异步任务,速度中等
Outfile导出数据需要经过复杂计算逻辑的,如过滤、聚合、关联等HDFS、支持S3协议的对象存储、本地文件系统原始非压缩格式的数据导出,需要做行列转换,速度一般
ADBC数据科学大规模吞吐场景代码指定即可Pandas等高速数据吞吐场景,无需行列转换,相较传统JDBC快数十倍
Backup/Restore原生备份和恢复HDFS、支持S3协议的对象存储直接拷贝压缩后的数据文件备份,速度最快
冷热分层冷热数据不同存储介质SSD、HDD、HDFS、支持S3协议的对象存储数据自动Rebalance,速度取决于网卡带宽、介质IOPS、Balance线程数
CCR跨集群近实时数据同步主从集群本地盘介质同步速度主要取决于网卡带宽和网络带宽

在导出的三种机制 MySQL Dump、Export、OutFile 中,分别适用于不同的场景内,三种导出方式的异同点如下:

SELECT INTO OUTFILEEXPORTMySQL DUMP
同步/异步同步异步(提交 EXPORT 任务后通过 SHOW EXPORT 命令查看任务进度)同步
支持任意 SQL支持不支持不支持
导出指定分区支持支持不支持
导出指定 Tablets支持不支持不支持
并发导出支持且并发高(但取决于 SQL 语句是否有 ORDER BY 等需要单机处理的算子)支持且并发高(支持 Tablet 粒度的并发导出)不支持,只能单线程导出
支持导出的数据格式Parquet、ORC、CSVParquet、ORC、CSVMySQL Dump 专有格式
是否支持导出外表支持部分支持不支持
是否支持导出 View支持支持支持
支持的导出位置S3、HDFS、LOCALS3、HDFS、LOCALLOCAL

示例演示

1、MySQL Dump/Source

适用场景

数据量在数万条以内或更小的数据量,比如BI使用者将查询以后的报表结果集数据导出为CSV、或者将表结构语句导出至指定存储目录等场景比较适用,不可用于大规模数据导出和导入。

使用示例

①Dump 常见使用语法
# 1. 导出指定数据库中的指定表
mysqldump -h ${FE_IP}-P ${FE_QUERY_PORT}-u ${USERNAME}-p ${PASSWORD}--no-tablespaces --databases ${DATABASE_NAME} --tables ${TABLES_NAME}# 2. 仅导出指定数据库中的指定表结构
mysqldump -h ${FE_IP}-P ${FE_QUERY_PORT}-u ${USERNAME}-p ${PASSWORD}--no-tablespaces --databases ${DATABASE_NAME} --tables ${TABLES_NAME} --no-data# 3. 导出多个数据库中所有表数据结构
mysqldump -h ${FE_IP}-P ${FE_QUERY_PORT}-u ${USERNAME}-p ${PASSWORD}--no-tablespaces --databases ${DATABASE_NAME_1} ${DATABASE_NAME_2} ${DATABASE_NAME_3} --no-data# 4. 导出所有数据库的表结构
mysqldump -h ${FE_IP}-P ${FE_QUERY_PORT}-u ${USERNAME}-p ${PASSWORD}--no-tablespaces --all-databases --no-data# 将结果导出至指定位置,以示例2为例
mysqldump -h ${FE_IP}-P ${FE_QUERY_PORT}-u ${USERNAME}-p ${PASSWORD}--no-tablespaces --databases ${DATABASE_NAME} --tables ${TABLES_NAME} --no-data > ${RESULT_FILE_PATH}
参数说明FE_IP:Doris 的 FE 节点内网 IPFE_QUERY_PORT:默认值为9030USERNAME:Doris 用户名PASSWORD:Doris 用户密码DATABASE_NAME:数据库名TABLES_NAME:数据表名RESULT_FILE_PATH:导出文件路径同时请注意,由于 Doris 中没有 MySQL 里的 tablespace 概念,因此在使用 MySQL Dump 时要加上 --no-tablespaces 参数!



图片



②Source 使用语法

1.登入 Doris FE Client

   mysql -u ${USERNAME} -P ${FE_QUERY_PORT} -h ${FE_HOST_IP} -p ${PASSWORD}



图片



2.使用 Source 命令完成导入

   source ${SQL_FILE_PATH}



图片



2、Export/Import

适用场景

将大批量数据导出至远端存储系统中,如HDFS、支持S3协议的对象存储、本地文件系统等,这类导出会先将存储在 Doris 的压缩数据进行解压缩和列转行,然后再根据导出时候的参数定义转为指定的数据类型格式。

所以导出的数据量虽然可以相对较大,但是速度往往没有想象中的那么快,适合大数据量的单表导出、仅需简单的过滤条件和需要异步提交任务的场景。

底层导出函数调用为 Outfile。

使用示例

标准语法
EXPORT TABLE table_name
[PARTITION (p1[,p2])]
[WHERE]
TO export_path
[opt_properties]
WITH BROKER/S3/HDFS
[broker_properties];

详细参数说明请参照:

https://doris.apache.org/zh-CN/docs/dev/sql-manual/sql-statements/Data-Manipulation-Statements/Manipulation/EXPORT

①导出至本地文件系统

导出至本地文件系统必须在 fe.conf 配置文件中配置参数 enable_outfile_to_local=true,重启 FE 后生效。

EXPORT TABLE ${TABLE_NAME} TO ${LOCAL_FILE_PATH}
请注意,LOCAL_FILE_PATH 有以下限制:1. 格式前缀为 file://2. 仅可以指定至文件夹目录级3. 指定的文件夹目录必须为多个 BE 节点共有目录,如 /root/、/home 等,否则无法创建对应文件
示例

1.导出 demo 库中的 part 表,且放置在 /root 目录下

   EXPORT TABLE demo.part TO "file:///root/";



图片



2.查看异步导出任务

   SHOW EXPORT\G;



图片



3.根据指定 URL 查看导出文件数据

    # 切换登录至导出 BE 节点
ssh 192.168.31.163
# 查看导出文件
cat /root/7acf8d7494654119-bae09df41ccf23c9_0.csv



图片



若需要在导出过程中进行过滤、指定压缩格式等定制化能力,请参照本小节前的 EXPORT 命令说明链接内容,这里不做赘述。

②导出至 S3 对象存储
EXPORT TABLE ssb.port TO"s3://${BUCKET}/${S3_PATH}"
WITH s3 (
"s3.endpoint"="${S3_HTTP_API}",
"s3.region"="${S3_REGION}",
"s3.access_key"="${AK}",
"s3.secret_key"="${SK}"
);
若使用 MinIO,参数需要注意以下几点: 1. 需要添加 "use_path_style" = "true" 配置项 2. S3_REGION 值默认为 us-east-1 3. AK、SK 可以使用 USERNAME & PASSOWORD,也可以使用在 MinIO 内创建的 AK、SK
示例

导出数据至 MinIO



图片



导出后 MinIO Bucket 使用情况



图片



③导出至 HDFS
EXPORT TABLE ${TABLE_NAME} TO "hdfs://${NAMENODE_IP}:{PORT}/${PATH}"
with HDFS (
"fs.defaultFS"="hdfs://${NAMENODE_IP}:{PORT}",
"hadoop.username" = "${HADOOP_USERNAME}"
);
示例

1.创建导出任务



图片



2.导出任务执行成功



图片



3、Select Into Outfile

适用场景

Select Into Outfile 实则为 Export 的底层执行函数,作为同步导出任务,可执行较为复杂的逻辑查询后的结果集输出方式。

使用示例

标准语法
query_stmt
INTO OUTFILE "file_path"
[FORMAT_AS]
[PROPERTIES]

更详细的参数说明,请翻阅官方文档:

https://doris.apache.org/zh-CN/docs/dev/data-operate/export/outfile

以 SSB 测试集的标准查询 Q2.2 作为查询语句,以 limit 100 作为条数限制,SQL 如下:

SELECT SUM(lo_revenue), d_year, p_brand
FROM lineorder, dates, part, supplier
WHERE
lo_orderdate = d_datekey
AND lo_partkey = p_partkey
AND lo_suppkey = s_suppkey
AND p_brand BETWEEN'MFGR#2221'AND'MFGR#2228'
AND s_region ='ASIA'
GROUPBY d_year, p_brand
ORDERBY d_year, p_brand;
①导出至本地文件系统示例
SELECT SUM(lo_revenue), d_year, p_brand
FROM lineorder, dates, part, supplier
WHERE
lo_orderdate = d_datekey
AND lo_partkey = p_partkey
AND lo_suppkey = s_suppkey
AND p_brand BETWEEN'MFGR#2221'AND'MFGR#2228'
AND s_region ='ASIA'
GROUPBY d_year, p_brand
ORDERBY d_year, p_brand
LIMIT 100
INTO OUTFILE "s3://doris/"
PROPERTIES(
"use_path_style"="true",
"s3.endpoint"="http://192.168.31.198:19000",
"s3.region"="us-east-1",
"s3.access_key"="minioadmin",
"s3.secret_key"="minioadmin"
);

1.执行导出任务



图片



2.导出节点文件查看



图片



②导出至 S3 对象存储示例
SELECT SUM(lo_revenue), d_year, p_brand
FROM lineorder, dates, part, supplier
WHERE
lo_orderdate = d_datekey
AND lo_partkey = p_partkey
AND lo_suppkey = s_suppkey
AND p_brand BETWEEN'MFGR#2221'AND'MFGR#2228'
AND s_region ='ASIA'
GROUPBY d_year, p_brand
ORDERBY d_year, p_brand
LIMIT 100
INTO OUTFILE "hdfs://192.168.31.198:8020/doris/"
PROPERTIES(
"fs.defaultFS"="hdfs://192.168.31.198:8020",
"hadoop.username"="hadoop"
);

1.执行导出任务



图片



2.对象存储上的记录



图片



③导出至 HDFS 示例
SELECT SUM(lo_revenue), d_year, p_brandFROM lineorder, dates, part, supplierWHERE    lo_orderdate = d_datekeyAND lo_partkey = p_partkeyAND lo_suppkey = s_suppkeyAND p_brand BETWEEN'MFGR#2221'AND'MFGR#2228'AND s_region ='ASIA'GROUPBY d_year, p_brandORDERBY d_year, p_brandLIMIT 100INTO OUTFILE "hdfs://192.168.31.198:8020/doris/"PROPERTIES("fs.defaultFS"="hdfs://192.168.31.198:8020","hadoop.username"="hadoop");

1.使用 SelectDB Web UI 执行命令



图片



2.HDFS 文件系统界面查看是否上传成功



图片



3.查看文件内容是否正确



图片



4、ADBC

适用场景

ADBC 即 Arrow DataBase Connectivity,Doris 基于 Arrow Flight SQL 协议实现了高速数据链路,支持多种语言使用 SQL 从 Doris 高速读取大批量数据。

使用 ADBC 协议,可从 Doris 加载大批量数据到其他组件,如 Python/Java/Spark/Flink,可以使用基于 Arrow Flight SQL 的 ADBC/JDBC 替代过去的 JDBC/PyMySQL/Pandas 来获得更高的读取性能,这在数据科学、数据湖分析等场景中经常遇到。



图片



JDBC与ADBC数据流转原理简图

这里需要注意的是:ADBC不仅可以用于读,还可以用于其他常规语法操作,比如查询、写入。

使用示例

①Python 代码引用
ADBC Driver 安装步骤详见官网说明:https://doris.apache.org/zh-CN/docs/dev/db-connect/arrow-flight-sql-connect#adbc-driver这里不做详细赘述
# Import 引入
import adbc_driver_manager
import adbc_driver_flightsql.dbapi as flight_sql# 执行查询
cursor.execute("select k5, sum(k1), count(1), avg(k3) from arrow_flight_sql_test group by k5;")
print(cursor.fetchallarrow().to_pandas())
Java 代码引用
POM 依赖引入同上所述,不做详细介绍,可移步至官网了解
②ADBC 方式链接使用
// 1. new driver
finalBufferAllocatorallocator=newRootAllocator();
FlightSqlDriverdriver=newFlightSqlDriver(allocator);
Map<String,Object> parameters =newHashMap<>();
AdbcDriver.PARAM_URI.set(parameters,Location.forGrpcInsecure("0.0.0.0",9090).getUri().toString());
AdbcDriver.PARAM_USERNAME.set(parameters,"root");
AdbcDriver.PARAM_PASSWORD.set(parameters,"");
AdbcDatabaseadbcDatabase= driver.open(parameters);// 2. new connection
AdbcConnectionconnection= adbcDatabase.connect();
AdbcStatementstmt= connection.createStatement();// 3. execute query
stmt.setSqlQuery("select * from information_schema.tables;");
QueryResultqueryResult= stmt.executeQuery();
ArrowReaderreader= queryResult.getReader();// 4. load result
List<String> result =newArrayList<>();
while(reader.loadNextBatch()){
VectorSchemaRootroot= reader.getVectorSchemaRoot();
StringtsvString= root.contentToTSVString();
result.add(tsvString);
}
System.out.printf("batchs %d\n", result.size());// 5. close
reader.close();
queryResult.close();
stmt.close();
connection.close();
③JDBC 方式链接使用
final Map<String,Object> parameters =newHashMap<>();
AdbcDriver.PARAM_URI.set(
parameters,"jdbc:arrow-flight-sql://0.0.0.0:9090?useServerPrepStmts=false&cachePrepStmts=true&useSSL=false&useEncryption=false");
AdbcDriver.PARAM_USERNAME.set(parameters,"root");
AdbcDriver.PARAM_PASSWORD.set(parameters,"");
try(
BufferAllocatorallocator=newRootAllocator();
AdbcDatabasedb=newJdbcDriver(allocator).open(parameters);
AdbcConnectionconnection= db.connect();
AdbcStatementstmt= connection.createStatement()
){
stmt.setSqlQuery("select * from information_schema.tables;");
AdbcStatement.QueryResultqueryResult= stmt.executeQuery();
ArrowReaderreader= queryResult.getReader();
List<String> result =newArrayList<>();
while(reader.loadNextBatch()){
VectorSchemaRootroot= reader.getVectorSchemaRoot();
StringtsvString= root.contentToTSVString();
result.add(tsvString);
}
longetime=System.currentTimeMillis();
System.out.printf("batchs %d\n", result.size());reader.close();
queryResult.close();
stmt.close();
}catch(Exception e){
e.printStackTrace();
}
性能对比



图片



从实际测试对比来看,ADBC在查询数据吞吐方面,比传统 JDBC 能力超百倍左右,所以在诸如 Pandas 等科学计算框架应用方面,有非常明显的效率提升。

5、Backup/Restore

适用场景

正宗的库表级的数据备份/恢复能力,可选择整库备份,也可选择某些表进行备份,粒度有库、表、分区三个级别。

其备份原理是将已有的库表 Tablet 整理出一份完整、可靠的单副本,然后拷贝至 HDFS 或 S3 之上,中间不处理任何数据转换,所以速度是最快的。

同时增量备份能力现在也在研发阶段了。

使用示例

①备份至 HDFS

1.创建 HDFS repository

CREATE REPOSITORY `hdfs_repo`
WITH hdfs
ON LOCATION "hdfs://192.168.31.198:8020/doris-repo"
PROPERTIES
(
"fs.defaultFS"="hdfs://192.168.31.198:8020",
"hadoop.username"="user",
"dfs.replication"="1"
);

2.备份单表至 HDFS

标准语法:

BACKUP SNAPSHOT [db_name].{snapshot_name}
TO`repository_name`
[ON|EXCLUDE](
`table_name`[PARTITION(`p1`,...)],
...
)
PROPERTIES ("key"="value", ...);

备份 ssb 仓库的 lineorder 明细表的 p1 分区:

   BACKUP SNAPSHOT ssb.back01
TO `hdfs_repo`
ON (
`lineorder` PARTITION(`p1`)
);



图片



3.查看已备份数据



图片



②备份至 S3

1.创建 S3 Repository

CREATE REPOSITORY `minio_repo`
WITH S3
ON LOCATION "s3://doris-repo"
PROPERTIES
(
"use_path_style"="true",
"s3.endpoint"="http://192.168.31.198:19000",
"s3.region"="us-east-1",
"s3.access_key"="minioadmin",
"s3.secret_key"="minioadmin"
);



图片



2.备份 ssb 仓库的 supplier 整表:

BACKUP SNAPSHOT ssb.back02
TO `minio_repo`
ON (
`supplier`
);



图片



3.查看已备份的数据



图片



这里需要注意的是,同一数据库下只能有一个正在执行的 BACKUP 或 RESTORE 任务!
③从 HDFS 还原快照

1.删除 ssb 仓库的 lineorder 明细表的 p1 分区

DELETE FROM lineorder PARTITION p1 WHERE lo_orderkey is not null;
SELECT COUNT(*) FROM lineorder PARTITION p1;



图片



2.从 HDFS 恢复数据

标准语法:

RESTORE SNAPSHOT [db_name].{snapshot_name}
FROM`repository_name`
[ON|EXCLUDE](
`table_name`[PARTITION(`p1`,...)][AS`tbl_alias`],
...
)
PROPERTIES ("key"="value", ...);

查看快照版本的时间:

   SHOW SNAPSHOT ON repo;



图片



恢复 HDFS 数据:

RESTORE SNAPSHOT ssb.back01
FROM`hdfs_repo`
ON(
`lineorder`PARTITION(p1)
)
PROPERTIES(
"backup_timestamp"="2024-08-07-19-36-31",
"replication_num"="1"
);



图片



3.查看恢复结果

   SELECT COUNT(*) FROM lineorder PARTITION p1;



图片



④从 S3 还原快照

1.删除 supplier 表数据

   DELETE FROM `supplier` WHERE s_suppkey is not null;
SELECT COUNT(*) FROM supplier;



图片



2.从 S3 备份恢复 supplier 表数据

RESTORE SNAPSHOT ssb.back02
FROM`minio_repo`
ON(
supplier
)
PROPERTIES(
"backup_timestamp"="2024-08-07-20-18-09",
"replication_num"="1"
);

查看快照时间



图片



3.查看恢复结果

   SELECT COUNT(*) FROM supplier;



图片



6、冷热分层

适用场景

在存算一体架构下,希望将存储周期比较长的数据冷备至存储成本较低的介质中,比如某明细表,日增1TB,业务查询经常会用到30天内的数据,为了保证查询效率,这些热数据用 SSD 存储介质来存储,30天以前的数据希望用更便宜的存储介质来存储,以此降低整体架构成本。

这里需要说明的一点是,冷热分层不会改变查询使用习惯

冷热数据是通过表配置来决定啥时候进行冷备,以及冷备到什么位置。

查询的数据会自动完成迁移,不需要任何人为干预。

使用示例

冷备至HDFS

1.创建 hdfs_resource Resource 资源

CREATE RESOURCE hdfs_resource
PROPERTIES (
"type"="hdfs",
"fs.defaultFS"="hdfs://192.168.31.198:8020",
"hadoop.username"="hadoop",
"dfs.namenode.rpc-address"="192.168.31.198:8020",
"dfs.replication"="1"
);



图片



2.创建冷备策略,设置冷备资源为 HDFS_RESOURCE,冷备时间为存储后 60 秒。

CREATE STORAGE POLICY hdfs_policy PROPERTIES (
"storage_resource" = "hdfs_resource",
"cooldown_ttl" = "60"
)

3.创建 customer_hdfs_cold 表,表结构使用 customer 的表结构,冷备策略设置为 hdfs_policy

  CREATE TABLE
`customer_hdfs_cold`(
`c_custkey`INTNOTNULL,
`c_name`VARCHAR(26)NOTNULL,
`c_address`VARCHAR(41)NOTNULL,
`c_city`VARCHAR(11)NOTNULL,
`c_nation`VARCHAR(16)NOTNULL,
`c_region`VARCHAR(13)NOTNULL,
`c_phone`VARCHAR(16)NOTNULL,
`c_mktsegment`VARCHAR(11)NOTNULL
) ENGINE = OLAP DUPLICATE KEY(`c_custkey`) COMMENT 'OLAP' DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 12 PROPERTIES (
"replication_allocation"="tag.location.default: 1",
"storage_policy"="hdfs_policy"
);

4.插入customer 的数据至 customer_hdfs_cold 表中,60秒后观察数据冷备情况。

INSERT INTO customer_hdfs_cold
SELECT * FROM customer;



图片



5.查看冷备数据情况

   show tablets from customer_hdfs_cold;



图片



执行查询:

   SELECT * FROM customer_hdfs_cold LIMIT 10;



图片



6.查看远端存储情况



图片



冷备至 S3

1.创建 remote_s3 Resource 资源

CREATE RESOURCE "remote_s3"
PROPERTIES
(
"type"="s3",
"use_path_style"="true",
"s3.endpoint"="http://192.168.31.198:19000",
"s3.region"="us-east-1",
"s3.access_key"="minioadmin",
"s3.secret_key"="minioadmin",
-- required by cooldown
"s3.root.path"="/cold",
"s3.bucket"="doris-repo"
);

2.创建冷备策略,设置冷备资源为 S3_RESOURCE,冷备时间为存储后 60 秒。

   CREATE STORAGE POLICY s3_policy PROPERTIES (
"storage_resource" = "remote_s3",
"cooldown_ttl" = "60"
)



图片



3.创建 customer_s3_cold 表,表结构使用 customer 的表结构,冷备策略设置为 hdfs_policy

   CREATE TABLE`customer_s3_cold`(`c_custkey`INTNOTNULL,`c_name`VARCHAR(26)NOTNULL,`c_address`VARCHAR(41)NOTNULL,`c_city`VARCHAR(11)NOTNULL,`c_nation`VARCHAR(16)NOTNULL,`c_region`VARCHAR(13)NOTNULL,`c_phone`VARCHAR(16)NOTNULL,`c_mktsegment`VARCHAR(11)NOTNULL) ENGINE = OLAP DUPLICATE KEY(`c_custkey`) COMMENT 'OLAP' DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 12 PROPERTIES ("replication_allocation"="tag.location.default: 1","storage_policy"="s3_policy"     );

4.插入customer 的数据至 customer_s3_cold 表中,60秒后观察数据冷备情况。

   INSERT INTO customer_s3_cold   SELECT * FROM customer;



图片



5.查看冷备数据情况

   show tablets from customer_s3_cold;



图片



执行查询:

   SELECT * FROM customer_hdfs_cold LIMIT 10;



图片



6.查看远端存储情况



图片



7、CCR

适用场景

CCR(Cross Cluster Replication) 是跨集群数据同步,能够在库/表级别将源集群的数据变更同步到目标集群,可用于在线服务的数据可用性、隔离在离线负载、建设两地三中心。



图片



使用示例

使用非常简单,只需把Syncers服务启动,给他发一个命令,剩下的交个Syncers完成就行。

1.1. 部署源doris集群

2.2. 部署目标doris集群

3.3. 首先源集群和目标集群都需要打开binlog,在源集群和目标集群的fe.conf和be.conf中配置如下信息,这是大前提:

enable_feature_binlog=true

1.1. 部署 syncers 获取CCR包

# 联系 SelectDB 同学即可免费获取 CCR 二进制包

2.启动和停止syncer

# 启动
cd bin && sh start_syncer.sh --daemon
# 停止
sh stop_syncer.sh

3.打开源集群中同步库/表的 binlog

-- 如果是整库同步,可以执行如下脚本,使得该库下面所有的表都要打开binlog.enable
vim shell/enable_db_binlog.sh
修改源集群的host、port、user、password、db-- 如果是单表同步,则只需要打开table的binlog.enable,在源集群上执行:
ALTER TABLE enable_binlog SET ("binlog.enable" = "true");

4.向syncer发起同步任务

curl -X POST -H "Content-Type: application/json" -d '{
"name": "ccr_test",
"src": {
"host": "localhost",
"port": "9030",
"thrift_port": "9020",
"user": "root",
"password": "",
"database": "your_db_name",
"table": "your_table_name"
},
"dest": {
"host": "localhost",
"port": "9030",
"thrift_port": "9020",
"user": "root",
"password": "",
"database": "your_db_name",
"table": "your_table_name"
}
}' http://127.0.0.1:9190/create_ccr

同步任务的参数说明:

name: CCR同步任务的名称,唯一即可
host、port:对应集群master FE的host和mysql(jdbc) 的端口
user、password:syncer以何种身份去开启事务、拉取数据等
database、table:
如果是db级别的同步,则填入your_db_name,your_table_name为空
如果是表级别同步,则需要填入your_db_name,your_table_name
向syncer发起同步任务中的name只能使用一次

小结

本篇延续了个人的实操习惯,边搭环境边写文档,所以速度比较慢,基本上消耗了十天左右的工作后休息时间。

不过返回来在从头阅读时,感觉整体篇幅还是过于长了,其实每个机制都可以掰开揉碎了讲,比如底层机制,比如一些局限性和适用性,本篇文章希望能起一个提纲要领的引子作用,在各位看官老爷看完后,某天希望使用 Doris 完成各种场景下的备份恢复的话,大可收藏来翻阅。

看到这里,就别吝啬各位的点赞在看以及评论转发啦!

每次良好的数据都是下次努力更新的绝对动力!



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/399403.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch 基础学习(3) - 张量的数学操作

下面是关于PyTorch中常见数学操作的概述和教程&#xff0c;包括逐点运算、比较操作、线性代数操作等&#xff0c;突出每个操作的重点用法和示例。 逐点操作 (Pointwise Operations) 1. torch.abs 功能: 计算输入张量的每个元素的绝对值。用法: torch.abs(input)示例:import …

c++继承(二)

一、友元函数的继承 友元函数不能被继承&#xff0c;就像爸爸的朋友不是你的朋友&#xff0c;如果要有友元函数&#xff0c;在子类重新定义一个。 二、静态成员的继承 静态成员的继承仍然是那个成员&#xff0c;普通成员的继承是不同的。 父类的静态成员属于当前类&#xf…

20240813 每日AI必读资讯

Flux生成网红博主因太逼真爆火&#xff01;有人用Claude写代码识破“AI美女” - Flux生成的情侣合照逼真程度达到恐怖级别&#xff0c;挑战人类视觉辨识能力。 - 网友发现Flux生成的照片几乎完美&#xff0c;但仍有细微瑕疵可供识别。 - 有人利用Flux等工具制作逼真的YouTub…

[upload]-[GXYCTF2019]BabyUpload1-笔记

尝试上传.htaccess和图片和一句话木马提示 php文件提示 响应头可以看到 构造一句话图片木马如下&#xff1a; <script languagephp>eval($_POST[cmd]);</script> 上传成功 必须增加文件夹下jpg后缀解析php .htaccess如下 <FilesMatch "jpg">Set…

浙大数据结构慕课课后题(06-图2 Saving James Bond - Easy Version)(拯救007)

题目要求&#xff1a; This time let us consider the situation in the movie "Live and Let Die" in which James Bond, the worlds most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake fi…

LabVIEW中CANopen 读取程序解读

这段程序用于创建 CANopen 接口&#xff0c;并读取 CANopen CAN 帧消息。以下是详细的解读&#xff1a; 左侧部分 node-ID (U8): 指定节点 ID&#xff0c;用于标识 CANopen 网络中的设备。CANopen interface (U32): 指定 CANopen 接口。baud rate (U32): 设置波特率&#xff0…

vulnhub系列:sp eric

vulnhub系列&#xff1a;sp eric 靶机下载 一、信息收集 nmap扫描存活&#xff0c;根据mac地址寻找IP nmap 192.168.23.0/24nmap扫描端口&#xff0c;开放端口&#xff1a;22、80 nmap 192.168.23.189 -p- -A -sV -Pndirb 扫描目录&#xff0c;.git 源码&#xff0c;admin…

向上or向下调整建堆 的时间复杂度的本质区别的讲解

知识点&#xff1a;&#xff08;N代表节点数&#xff0c;h代表高度&#xff09; 1&#xff1a;高度为h的满二叉树节点个数N为 2^&#xff08;h&#xff09;-1 即N 2^&#xff08;h&#xff09;-1 2&#xff1a;所以h log&#xff08;N1&#xff09; 一&#xff1a;向上…

C++STL详解(四)——vector类的具体实现

在上篇文章中&#xff0c;我们已经学习了vector的具体接口使用方法&#xff0c;在本篇文章中&#xff0c;我们将学习实现一个vector容器。 目录 一.vector各函数接口总览 二.vector当中的私有成员 三.默认成员函数 3.1构造函数 3.1.1构造函数1 3.1.2构造函数2 3.1.3构造…

百数移动端重大更新:全面优化,用户体验再升级!

本次发布的优化更新的功能&#xff0c;主要是为了提升用户的移动端使用体验。此次改版不仅优化了控件样式&#xff0c;提升视觉与交互体验&#xff0c;还在子表单功能上实现了重大突破&#xff0c;如新增复制、插入行功能等。 同时&#xff0c;新增功能——数据加载&#xff0…

Python之简单了解pylab绘图工具和汇编语言

《Python入门经典以解决计算问题为导向的Python编程实践》89-93页的笔记。 用pylab对数据绘图最小的通用计算 用pylab对数据绘图 PyLab是Matplotlib面向对象绘图库的过程界面。Matplotlib是整个软件包&#xff1b; matplotlib.pyplot是Matplotlib中的一个模块&#xff1b;而P…

【物联网】(蓝牙篇)微信小程序ios如何自动打开蓝牙

微信小程序打开蓝牙的便捷之道——微信小程序ios如何自动打开蓝牙 随着智能手机蓝牙技术和物联网产品的普及&#xff0c;很多人在使用微信小程序时&#xff0c;都希望能够更便捷地打开蓝牙功能。 在iOS系统上&#xff0c;由于其封闭性和权限控制严格&#xff0c;使得自动打开蓝…

扩散模型理论与公式推导——详细过程速览与理解加深

参考&#xff1a; [1] Ho J, Jain A, Abbeel P. Denoising diffusion probabilistic models[J]. Advances in neural information processing systems, 2020, 33: 6840-6851. [2] 扩散模型/Diffusion Model原理讲解_哔哩哔哩_bilibili [3] 扩散模型公式推导_扩散模型数学推导-C…

10、java程序流程控制之二:分支语句(switch-case结构)、循环结构(for循环)(经典案例)

java程序流程控制之二&#xff1a; Ⅰ、分支语句&#xff1a;switch-case1、switch-case 分支结构&#xff1a;其一、描述&#xff1a;其二、代码为&#xff1a;其三、截图为&#xff1a; 2、switch-case 分支结构的案例1&#xff1a;判断是否合格其一、描述&#xff1a;其二、…

Docker数据管理和网络管理

文章目录 一、Docker数据管理Docker容器的分层哪些数据需要持久化容器数据持久保存方式数据卷&#xff08;data volume&#xff09;数据卷的使用场景数据卷的特点数据卷使用方法实际例子 二、网络管理Docker安装完成后默认的网络设置创建容器后的网络配置修改默认网络设置容器名…

“南禾”女士包网站的设计与实现----附源码17160

摘 要 随着社会经济的发展和人们生活水平的提高&#xff0c;女士包市场逐渐成为一个庞大的产业。女性消费者对于时尚、品质和个性化的追求&#xff0c;对于高品质、款式新颖的女士包需求不断增加。南禾作为中高端女士包品牌&#xff0c;为抓住了这一市场需求&#xff0c;为女性…

再见,Midjourney | FLUX 彻底改变了 AI 图像游戏

Flux 刚发布一周&#xff0c;大家都疯了&#xff01; 因为真的是分不清是AI还是真实啊&#x1f3f4;‍☠️ Flux生成 Flux生成 FLUX 彻底改变了 AI 图像游戏。 02 黑深林 Black Forest Labs由Stable Diffusion模型的原班人马创立&#xff0c;旨在开发并开源高质量的图像和…

AI技术加速落地 港科广联手思谋打开智能缺陷检测新纪元

AI 技术应用落地的元年&#xff0c;工业是主战场&#xff0c;尤其是工业缺陷检测。 在“生产制造-缺陷检测-工艺优化-生产制造”的智能制造闭环链条中&#xff0c;基于AI的智能缺陷检测扮演着“把关者”的角色。但这个把关者长期以来却缺少一个称手的工具——样本量大、精度高…

【Cadence22】将别人发的原理图和PCB库修改为自己的库,进而继续制图

【转载】Cadence Design Entry HDL 使用教程 【Cadence01】Cadence PCB Edit相对延迟与绝对延迟的显示问题 【Cadence02】Allegro引脚焊盘Pin设置为透明 【Cadence03】cadence不小心删掉钢网层怎么办&#xff1f; 【Cadence04】一般情况下Allegro PCB设计时的约束规则设置&a…

Firefox滚动条在Win10和Win11下表现不一致问题?

文章目录 前言总结解决方法 前言 最近在写页面的时候发现一个非常有意思的事。Firefox滚动条在Win10和Win11下表现居然不一致。在网上几经查找资料&#xff0c; 终于找到原因所在。总结成下面的文章&#xff0c;加深印象也防止下次遇到。 总结 参考文章&#xff1a; Firefox…