Druid数据迁移小计

摘要:
Druid数据迁移小计Druid官方网站上讲了相关的DumpSegment和InsertSegment相关的功能,但是经过测试这些功能都不好用,报Guice的依赖错误,懒得找具体原因了,换一种方式:冷迁移。Druid的数据存储主要是以segment为单位进行的,Druid不仅要把segment保存到文件目录下,还需要在metadata里面把该segment相关的信息记录下来好进行管理。metadataDruid不管是用什么数据库做元数据存储表肯定都一样,记录segment位置的就是druid_segments表了。
Druid数据迁移小计

Druid 官方网站上讲了相关的 Dump SegmentInsert Segment 相关的功能,但是经过测试这些功能都不好用,报 Guice 的依赖错误,懒得找具体原因了,换一种方式: 冷迁移

Druid 的数据存储

既然要冷迁移就需要了解一下 Druid 的存储相关的知识了。Druid 的数据存储主要是以 segment 为单位进行的,Druid 不仅要把 segment 保存到文件目录下,还需要在 metadata 里面把该 segment 相关的信息记录下来好进行管理。

# get druid deep storage directory
cat $DRUID_HOME/conf/druid/_common/common.runtime.properties | grep druid.storage
# ger druid metadata storage 
cat $DRUID_HOME/conf/druid/_common/common.runtime.properties | grep metadata.storage

根据上面配置文件我们就可以分别拿到 segment 的路径和 metadata 中的 segment 配置。

Deep Storage

Druid 的 Deep Storage 目录组织得还是非常清晰的:{dataSourceName}/{timeRangeStart}_{timeRangeEnd}/{time} 所以我们的数据迁移可以只迁移指定时间范围内的。既然连目录都知道了,那就很简单了,把想要迁移的数据按目录复制出来就行了。

metadata

Druid 不管是用什么数据库做元数据存储表肯定都一样,记录 segment 位置的就是 druid_segments 表了。

字段解释
dataSource数据集名称
created_date创建日期
start开始日期
end结束日期
payload配置信息(此列为二进制存储,内容为一个 JSON需要进行转换后才能看到)

注意事项: payload 中的配置息写死了 segment 的位置,如果你迁移数据后不能在新服务器中的数据目录与原服务器一致则需要修改这个 payload 内容,下方代码即为数据转换代码可以把数据解析并修改后再通过下方在代码生成回 HEX String 并更新到数据库表中。

import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;

import java.util.Scanner;

/**
 * @author sunzq
 */
public class HexConvert {
    public static void main(String[] args) throws DecoderException {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            String s = scanner.nextLine();
            if (s.equals("q")) {
                return;
            }
            // maven dependency: commons-codec
            if (s.startsWith("{")) {
                System.out.println(Hex.encodeHexString(s.getBytes()));
            } else {
                System.out.println(new String(Hex.decodeHex(s)));
            }
        }
    }
}

迁移到新服务器

拿到导出的 segment 文件放到新服务器的指定位置,再去数据库里面插入此 segment 对应的记录就完成了数据的迁移,还是很简单的。

验证

用浏览器访问 coornidator 节点的 API http://ip:port/druid/v2/datasources 看看 datasource 添加了没有,如果没有更新上可以试试重启 coordinator 节点和 historical 节点。

免责声明:文章转载自《Druid数据迁移小计》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇开发者自述:我是这样学习 GAN 的Mac下安装证书fiddlerRoot.cer下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

canal部署启动的时候报错com.alibaba.druid.pool.DruidDataSource

报错信息:com.alibaba.druid.pool.DruidDataSource - testWhileIdle is true, validationQuery not set 解决方法: 找到conf/canal.properties 文件里面的 canal.instance.tsdb.spring.xml=classpath:spring/ts...

简单粗暴将sqlserver表以及数据迁移到oracle

1.利用sqlserver工具查询出表中所有数据,全选,右键 -连同标题一起复制。 2.将数据保存到excel文件,数据 时间类型(yyyy--MM--dd HH:mm:ss)最好处理一下,需要将id这列复制一份作为oracle中的序列 3.在oracle创建相同表。全选excel数据(不要标题,前面复制可以不要标题的)粘贴到plsql中...

致远oa漏洞payload分析

————背景说明———— 致远 OA 系统中,A8的一些版本存在任意文件写入漏洞。攻击者在无需登录的情况下可通过向 URL /seeyon/htmlofficeservlet 以POST方式上传特殊构造的数据,以此向目标服务器写入任意文件,包括webshell,目前大多数使用某payload上传cmd马,写入成功后可执行任意系统命令进而控制目标服务器。 由...

JSON WEB TOKEN(JWT)的分析

JSON WEB TOKEN(JWT)的分析 一般情况下,客户的会话数据会存在文件中,或者引入redis来存储,实现session的管理,但是这样操作会存在一些问题,使用文件来存储的时候,在多台机器上,比较难实现共享,使用redis来存储的时候,则需要引入多一个集群,这样会增加管理的工作量,也不方便。有一个直观的办法,就是将session数据,存储在客户端...

springboot整合nacos动态获取druid配置

前言 是不是还有好多小伙伴不知道nacos是啥?其实,我也是从上一次nacos爆出漏洞,才知道还有nacos这个组件,而且目前这个组件应用很广泛,很多项目都用它来做配置中心和注册中心,今天我们分享的内容就是nacos作为配置中心使用的一个小demo。 在完成这个小demo之前,我查了好多示例和博客,但是都没有找到符合我需求的,所以走了好多弯路,才让这个de...

ipa 解压 包含了 Payload 和 Symbols 文件夹

1. 原因     利用Xcode 打包时 勾选 了 "Include app symbols for your application to receive symbolicated crash logs from Apple." 2. 解决方案    打包时去掉勾选,就不会生成 Symbols 文件夹。...