clickhouse-mysql数据同步
clickhouse版本:22.1.2.2
1.Mysql引擎(不推荐)
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
引擎参数
host:port
— MySQL服务地址database
— MySQL数据库名称user
— MySQL用户名password
— MySQL用户密码
这个引擎非常不推荐使用,MySQL引擎将远程的MySQL服务器中的表映射到ClickHouse中,MySQL数据库引擎会将对其的查询转换为MySQL语法并发送到MySQL服务器中(吐槽:这跟直接用mysql有什么区别,无语)
2.MaterializedMySQL(不推荐)
这个引擎创建ClickHouse数据库,包含MySQL中所有的表,以及这些表中的所有数据。ClickHouse服务器作为MySQL副本工作。它读取binlog并执行DDL和DML查询。
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MaterializeMySQL('host:port', ['database' | database], 'user', 'password') [SETTINGS ...]
引擎参数
host:port
— MySQL服务地址database
— MySQL数据库名称user
— MySQL用户名password
— MySQL用户密码
引擎配置
max_rows_in_buffer
— 允许数据缓存到内存中的最大行数(对于单个表和无法查询的缓存数据)。当超过行数时,数据将被物化。默认值:65505
。max_bytes_in_buffer
— 允许在内存中缓存数据的最大字节数(对于单个表和无法查询的缓存数据)。当超过行数时,数据将被物化。默认值:1048576
.max_rows_in_buffers
— 允许数据缓存到内存中的最大行数(对于数据库和无法查询的缓存数据)。当超过行数时,数据将被物化。默认值:65505
.max_bytes_in_buffers
— 允许在内存中缓存数据的最大字节数(对于数据库和无法查询的缓存数据)。当超过行数时,数据将被物化。默认值:1048576
.max_flush_data_time
— 允许数据在内存中缓存的最大毫秒数(对于数据库和无法查询的缓存数据)。当超过这个时间时,数据将被物化。默认值:1000
.max_wait_time_when_mysql_unavailable
— 当MySQL不可用时重试间隔(毫秒)。负值禁止重试。默认值:1000
.allows_query_when_mysql_lost
— 当mysql丢失时,允许查询物化表。默认值:0
(false
).
eg:
CREATE DATABASE mysql ENGINE = MaterializeMySQL('localhost:3306', 'db', 'user', '***')
SETTINGS
allows_query_when_mysql_lost=true,
max_wait_time_when_mysql_unavailable=10000;
使用步骤:
1.修改mysql的配置,重启
gtid_mode=ON
enforce_gtid_consistency=1
binlog_format=ROW
log_bin=mysql-bin
expire_logs_days=7
max_binlog_size = 256m
binlog_cache_size = 4m
max_binlog_cache_size = 512m
server-id=1
2.使用以下命令即可
set allow_experimental_database_materialized_mysql = 1;
CREATE DATABASE test ENGINE = MaterializeMySQL('ip:端口', 'mysql的库', 'mysql账户', 'mysql密码');
问题:
1.此引擎大大方便了mysql导入数据到clickhouse,但是官方提示还在实验中,不要用在生产环境
2.本人测试过,大数据量情况下,效率仍然不高,比mysql好一些罢了
3.使用集群会有很多的局限
3.mysql表函数
clickhouse允许对存储在远程MySQL服务器上的数据执行SELECT
和INSERT
查询
mysql('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause']);
参数
host:port
— MySQL服务器地址.database
— 远程数据库名称.table
— 远程表名称.user
— MySQL用户.password
— 用户密码.replace_query
— 将INSERT INTO查询转换为
REPLACE INTO的标志。如果
replace_query=1`,查询被替换。on_duplicate_clause
— 添加ON DUPLICATE KEY on_duplicate_clause
表达式到INSERT
查询。明确规定只能使用replace_query = 0
,如果你同时设置replace_query = 1和
on_duplicate_clause`,ClickHouse将产生异常
将mysql的全部数据导入clickhouse
1.创建clickhouse的表
2.执行命令
INSERT INTO table SELECT * FROM mysql('ip:port', 'database', 'table', 'user', 'password') [where]
注意:1.如果这里直接使用*,clickhouse字段顺序要和mysql一致,不然会有问题,如果只需要部分字段可以手动指定
2.这里可以自己带查询条件导入
3.clickhouse是会出现数据重复的情况的,就算是ReplacingMergeTree也是可能会出现重复数据的
4.canal同步
1.准备好jar包(避免踩坑):https://mvnrepository.com/
clickhouse-jdbc-0.2.6.jar
httpclient-4.5.13.jar
httpcore-4.4.13.jar
lz4-1.5.0.jar
lz4-java-1.8.0.jar
druid-1.2.8.jar(这个版本不能太低,否则druid连接池不支持clickhouse)
2.docker安装Canal-Server
docker run --name canal-server -p 11111:11111 -d canal/canal-server:latest
3.进入容器
复制/home/admin/canal-server/conf/example
为你要创建的新数据库实例名称,这里使用example2
4.修改example2下的instance.properties配置
#MySQL地址
canal.instance.master.address=127.0.0.1:3306
#mysql账户
canal.instance.dbUsername=root
canal.instance.dbPassword=root
#过滤规则
canal.instance.filter.regex=example2\\*
5.修改/home/admin/canal-server/conf/canal.properties
配置
canal.serverMode = tcp
canal.destinations = example2
6.安装canal-adapter(你也可以用kafka)
docker run --name canal-adapter -p 8081:8081 -d slpcat/canal-adapter:v1.1.5
7.修改canal-adapter的/opt/canal-adapter/conf/application.yml配置文件(容器内)
canal.conf:
# 此处注意模式
mode: tcp
flatMessage: true
zookeeperHosts:
syncBatchSize: 1000
retries: 0
timeout:
accessKey:
secretKey:
consumerProperties:
# 此处注意canal服务的地址
canal.tcp.server.host: 127.0.0.1:11111
canal.tcp.zookeeper.hosts:
canal.tcp.batch.size: 500
canal.tcp.username:
canal.tcp.password:
srcDataSources:
# 此处注意mysql连接
defaultDS:
url: jdbc:mysql://127.0.0.1:3306/example2?useUnicode=true
username: root
password: root
canalAdapters:
- instance: example2
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: rdb
key: mysql1
# clickhouse的配置
properties:
jdbc.driverClassName: ru.yandex.clickhouse.ClickHouseDriver
jdbc.url: jdbc:clickhouse://127.0.0.1:8123
jdbc.username: default
jdbc.password: default
8.修改/opt/canal-adapter/conf/rdb下的mytest_user.yml
dataSourceKey: defaultDS
destination: example2
groupId: g1
outerAdapterKey: mysql
concurrent: true
dbMapping:
mirrorDb: true
database: example2
9.重启server和adapter
往mysql里插入数据查看是否有数据同步过来,如果没有查看日志排查问题
注意点
1.mysql要开启配置
gtid_mode=ON
enforce_gtid_consistency=1
binlog_format=ROW
log_bin=mysql-bin
expire_logs_days=7
max_binlog_size = 256m
binlog_cache_size = 4m
max_binlog_cache_size = 512m
server-id=1
2.mysql和clickhouse库和表要提前创建好
3.docker配置用127.0.0.1时要注意使用主机模式,否则容器之间时无法通信的
4.如果mysql或者clickhouse无法连接成功,检查一下驱动的版本和jdbc连接写得对不对
5.其他的方案:红帽的debezium
clickhouse-mysql数据同步的更多相关文章
- Mysql数据同步Elasticsearch方案总结
Mysql数据同步Elasticsearch方案总结 https://my.oschina.net/u/4000872/blog/2252620
- 几篇关于MySQL数据同步到Elasticsearch的文章---第一篇:Debezium实现Mysql到Elasticsearch高效实时同步
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484358&idx=1&sn=3a78347 ...
- ElasticSearch5+logstash的logstash-input-jdbc实现mysql数据同步
在实现的路上遇到了各种坑,再次验证官方文档只能产考不能全信! ElasticSearch安装就不说了上一篇有说! 安装logstash 官方:https://www.elastic.co/guide/ ...
- Elasticsearch和mysql数据同步(logstash)
1.版本介绍 Elasticsearch: https://www.elastic.co/products/elasticsearch 版本:2.4.0 Logstash: https://www ...
- Elasticsearch和mysql数据同步(elasticsearch-jdbc)
1.介绍 对mysql.oracle等数据库数据进行同步到ES有三种做法:一个是通过elasticsearch提供的API进行增删改查,一个就是通过中间件进行数据全量.增量的数据同步,另一个是通过收集 ...
- Kettle ETL 来进行mysql 数据同步——试验环境搭建(表中无索引,无约束,无外键连接的情况)
今天试验了如何在Kettle的图形界面(Spoon)下面来整合来mysql 数据库中位于不同数据库中的数据表中的数据. 试验用的数据表是customers: 第三方的数据集下载地址是:http://w ...
- Memcached与MySQL数据同步
1.介绍 在生产环境中,我们经常使用MySQL作为应用的数据库.但是随着用户的增多数据量的增大,我们将会自然而然的选择Memcached作为缓存数据库,从而减小MySQL的压力.但是memcached ...
- 高可用的并行MySQL数据同步及分布式
首先聊聊MySQL的数据分布式,目前最为常用的就是Replication(复制)技术.基于此技术外延开来有很多中架构,分类归结为如下: 1.树状结构(Master,Backup-Master ...
- 转载:mysql数据同步redis
from: http://www.cnblogs.com/zhxilin/archive/2016/09/30/5923671.html 在服务端开发过程中,一般会使用MySQL等关系型数据库作为最终 ...
- mysql数据同步
随着各行业信息化水平的不断提升,各种各样的信息管理系统都被广泛使用,各系统间数据完全独立,形成了大量的信息孤岛.出于管理及决策方面的需求,实现各平台的数据同步是一个很迫切的需求,TreeSoft数据库 ...
随机推荐
- 【LeetCode】729. My Calendar I 解题报告
[LeetCode]729. My Calendar I 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/my-calendar- ...
- 源码分析 SpringCloud 2020.0.4 版本 EurekaClient 的注册过程
1. 概述 老话说的好:要善于思考,有创新意识. 言归正传,之前聊了 Springboot 的启动过程,今天来聊聊 Eureka Client 的注册过程. 2. Eureka Client 的注册过 ...
- vue项目在ie浏览器下报语法错误
错误如下: 1.用vue 写的项目最多可以兼容到IE9 及以上版本 2.使用babel-polyfill做兼容npm install babel-polyfill --save-dev 安装之后如果发 ...
- playwright--自动化(二):过滑块验证码 验证码缺口识别
前两天需要自动化登录一个商城的后台 用的是playwright 没有用selenium 中间出了一个滑块验证 现阶段playwright教程不是太多,自己做移动的时候各种找,费劲巴拉的.现在自己整出来 ...
- Ranger-Yarn插件安装
Ranger-Yarn插件ranger-0.6.0-yarn-plugin安装到Yarn的所有ResourceManager节点, 其他的NodeManager节点不需要安装. 登陆hdfs安装的用户 ...
- Ranger开源流水线docker化实践案例
1.背景 开发部门决定在Apache Ranger开源社区贡献代码,目标是个人国内排名Top1,世界排名Top2,并且在已经成为Ranger项目的Committer情况下,争取成为Ranger项目的P ...
- CSS基础 transform属性的基本使用 移动 旋转 缩放
1.实现元素位移效果 语法:transform:translate(x轴水平移动距离,Y轴垂直移动距离) 取值:正负都可以 取值方式:数字+px 百分比 :参照自己本的盒子的百分比 比如:本身自己的宽 ...
- Oracle:使用PL-SQL登录时报ORA-12541:无监听程序的解决办法
背景: 在自己公司安装的Oracle,当时Oracle的监听地址都是写的公司的地址 后来由于项目需要,办公地点转移到了客户处, 大概有半年没有以sys用户登录数据库了. 最近在上下班途中学习Djang ...
- python的赋值、浅拷贝和深拷贝
""" 一.赋值在python中就是简单的对象引用 """ list_a = ["aaa", "bbb&quo ...
- c# - 按引用内存地址传参 和 按输出传参 的具体使用
1.前言 传递参数,不需要返回值,对懒人很舒服哟,缺点是不好定位数据 2.操作 using System; namespace ConsoleApp1.letVlaueGo { public clas ...