当前位置: 首页 > news >正文

将 mysql 数据迁移到 clickhouse (最新版)

一、前驱知识

已经在mysql中插入了海量的数据了,这个时候mysql 承载不了这么大的数据,并且数据只需要查询,修改和删除非常少,并且不需要支持事务,这个时候需要换一个底层存储,这里选用的是 clickhouse 来进行存储。

演示方便这里使用的数据量很小,其实很大的话也很快。

本文迁移示例表

  • mysql安装在docker中,迁移的表结构
CREATE TABLE `change_handler1` (`client_id` int NOT NULL COMMENT '网关id',`equipment` varchar(48) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '设备编码',`point_id` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '测点id',`value_last` decimal(18,6) DEFAULT NULL COMMENT '上值',`value_latest` decimal(18,6) DEFAULT NULL COMMENT '下值',`value_change` decimal(18,6) DEFAULT NULL COMMENT '电量',`window_end_time_last` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最新封窗时间',`window_end_time_latest` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上个封窗时间',`window_end_time_msg_time` datetime DEFAULT NULL COMMENT '窗口网关发送时间',`window_size` bigint DEFAULT NULL COMMENT '窗口时间长度秒',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',`electricity_value` decimal(18,6) DEFAULT NULL COMMENT '电费',`price_type` bigint DEFAULT NULL COMMENT '峰谷平尖类型',PRIMARY KEY (`client_id`,`equipment`,`point_id`,`window_end_time_last`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='电量清洗';
  • clickhouse 安装在docker中,映射后的表结构
CREATE TABLE history_db.change_handler(`client_id` int  COMMENT '网关id',`equipment` String  COMMENT '设备编码',`point_id`  String COMMENT '测点id',`value_last` Decimal(18,6)  COMMENT '上值',`value_latest` Decimal(18,6)  COMMENT '下值',`value_change` Decimal(18,6)  COMMENT '电量',`window_end_time_last` DateTime  COMMENT '最新封窗时间',`window_end_time_latest` DateTime  COMMENT '上个封窗时间',`window_end_time_msg_time` DateTime  COMMENT '窗口网关发送时间',`window_size` Int32  COMMENT '窗口时间长度秒',`create_time` DateTime  COMMENT '创建时间',`update_time` DateTime  COMMENT '更新时间',`electricity_value` Decimal(18,6)  COMMENT '电费',`price_type` Int32  COMMENT '峰谷平尖类型') ENGINE = MergeTree()order by (client_id,equipment,point_id,window_end_time_last)PRIMARY KEY (client_id,equipment,point_id,window_end_time_last);

二、数据迁移

我看了网上的几种方式,几种都是在clickhouse 这边来做的,我觉得没必要,因为表非常大的话,网络开销是非常大的,所以我这里采用的是从mysql 那里将数据迁移出来,然后导入clickhouse 用 clickhouse-client 来导入

2.1 mysql 数据导出

首先进到mysql的机器里面执行命令

select change_handler1.* into outfile '/var/lib/mysql-files/change_handler1.txt' from change_handler1;

ps: 注意这里的导出路径,如果不是这个(/var/lib/mysql-files)路径下会报错,最好写这个路径,反正只是一个临时存储路径

然后我们将导出的文件拷贝到clickhouse的机器上,我这里是容器,直接用 docker cp 拷贝的,如果不是容器,用FTP之类的拷贝过去
mysql容器拷贝出来

拷贝到 clickhouse 容器中
拷贝到clickhouse容器中

2.2 clickhouse 导入

先进入clickhouse容器,这里使用的是 clickhouse-client 来导入的,如果没有的话可以直接安装

sudo apt-get install clickhouse-client

执行导入命令,如果设置了密码的话用 --password 来指定

cat change_handler1.txt | clickhouse-client -u 用户 --password 密码 --query="INSERT INTO history_db.change_handler FORMAT TabSeparated"

FORMAT 后面跟的是格式,如果导入的是CSV格式的话 写CSV

2.3 结果

执行完成之后就可以连接clickhouse 看数据了,数据已经过去了
完成后的数据

http://www.lryc.cn/news/189370.html

相关文章:

  • LeetCode 69.x的平方
  • 【小白入门】ASP.NET Core 创建 Web API
  • 如何使用摩尔信使MThings连接网络设备
  • 2023自动驾驶 车道线检测数据集
  • 排序算法-冒泡排序法(BubbleSort)
  • 3d tiles规范boundingVolume属性学习
  • 【开题报告】如何借助chatgpt完成毕业论文开题报告
  • 微信小程序通过 movable-area 做一个与vuedraggable相似的上下拖动排序控件
  • Ceph入门到精通-Nginx超时参数分析设置
  • TCP/IP(十)TCP的连接管理(七)CLOSE_WAIT和TCP保活机制
  • LeetCode 面试题 08.10. 颜色填充
  • 内排序算法
  • options.html 页面设计成聊天框,左侧是功能列表,右侧是根据左侧的功能切换成不同的内容。--chatGpt
  • 排序算法-选择排序法(SelectionSort)
  • Java-集合框架
  • 联想携中国移动打造车路协同方案 助力重庆实现32类车联网场景
  • Rust入门基础
  • 民族民俗景区3d智慧旅游系统提升游客旅游体验和质量
  • Webpack 解决:Error: error:0308010C:digital envelope routines::unsupported 的问题
  • JAVA操作Json的ObjectMapper类
  • Docker--harbor
  • Flink中的时间和窗口
  • Ultra-Fast-Lane-Detection 车道线学习资料整理
  • 【Ubuntu】Ubuntu18.04终端卡顿问题
  • k8s强制删除pod、svc、namespace(Terminating)
  • froeach迭代删除和List迭代删除问题
  • chromedriver下载地址
  • 2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器
  • 什么是Fetch API?与传统的AJAX相比,有什么优势?
  • 43.241.18.123哪些问题会导致服务器里面时间错误