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

记一次:Clickhouse同步mysql数据库

ClickHouse可以通过使用MaterializeMySQL引擎来实现与MySQL的数据同步。

前言:因为数据量比较大,既然要分库,为何不让clickhouse同步一下mysql数据库呢?

零、前期准备--mysql的查询和配置

1 查询mysql的配置状态

查询以下语句进行验证

show variables like '%gtid_mode%';

show variables like '%enforce_gtid_consistency%';

show variables like '%binlog_format%';

# 结果如下:

gtid_mode    ON

enforce_gtid_consistency    ON

binlog_format    ROW

2 设置mysql的配置

如果不是的查询状态的话设置:

在MySQL配置文件/etc/my.cnf中加入

server-id=1

log-bin=mysqlbin.log

binlog_format=ROW

3 强一致性-暂定

开启GTID模式(在MySQL配置文件/etc/my.cnf中加入)

gtid-mode=on

enforce-gtid-consistency=1  # 设置为主从强一致性

log-slave-updates=1 # 记录日志

default_authentication_plugin=mysql_native_password # 没有这个CK建库会失败

最后这个很重要,踩了一个坑

4 clickhouse库的安装过程就略-这里默认你安装好了

一、案例教程开始

1、准备 MySQL 表和数据

(0)创建授权用户

需要创建,不然后面查询的时候进制使用root用户的错误了---踩得第二个坑

创建用户:CREATE USER 'click'@'%' IDENTIFIED BY '123456';

授权:GRANT ALL PRIVILEGES ON *.* TO 'click'@'%';

(1)在 MySQL 中创建数据表并写入数据

CREATE DATABASE testck;

CREATE TABLE `testck`.`t_organization` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`code` int NOT NULL,

`name` text DEFAULT NULL,

`updatetime` datetime DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY (`code`)

) ENGINE=InnoDB;

INSERT INTO testck.t_organization (code, name,updatetime)

VALUES(1000,'Realinsight',NOW());

INSERT INTO testck.t_organization (code, name,updatetime)

VALUES(1001, 'Realindex',NOW());

INSERT INTO testck.t_organization (code, name,updatetime)

VALUES(1002,'EDT',NOW());

(2)创建第二张表

CREATE TABLE `testck`.`t_user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`code` int,

PRIMARY KEY (`id`)

) ENGINE=InnoDB;

INSERT INTO testck.t_user (code) VALUES(1);

2、开启 ClickHouse 物化引擎

1登录clickhouse-client

set allow_experimental_database_materialize_mysql=1;

2) 创建复制管道

ClickHouse 中创建 MaterializeMySQL 数据库

CREATE DATABASE test_binlog ENGINE =

MaterializeMySQL('192.168.3.26:3306','testck','click','123456');

其中 4 个参数分别是 MySQL 地址、databse、username 和 password。

抛错:Code: 537. DB::Exception: Received from localhost:9000. DB::Exception: Illegal MySQL variables, the MaterializeMySQL engine requires default_authentication_plugin='mysql_native_password'.

失败了,为啥呢?

原来:mysql没配置这个default_authentication_plugin=mysql_native_password # 没有这个CK建库会失败---就是上面说的踩得坑

终于成功了

3)查看 ClickHouse 的数据

use test_binlog;

show tables;

select * from t_organization;

select * from t_user;

终于可以了

4)其它操作

修改数据

(1)在 MySQL 中修改数据:

update t_organization set name = CONCAT(name,'-v1') where id = 1

(2)查看 clickhouse 日志可以看到 binlog 监听事件,查询 clickhouse

select * from t_organization;

删除数据

(1)MySQL 删除数据:

DELETE FROM t_organization where id = 2;

(2)ClicKHouse,日志有 DeleteRows 的 binlog 监听事件,查看数据:

select * from t_organization;

(3)在刚才的查询中增加 _sign 和 _version 虚拟字段

select *,_sign,_version from t_organization order by _sign

desc,_version desc;


http://www.kler.cn/a/374416.html

相关文章:

  • Scala 的trait
  • netty之bootstrap源码分析
  • 数据结构模拟题[二]
  • vscode摸鱼学习插件开发
  • 论文翻译 | PROMPTAGATOR : FEW-SHOT DENSE RETRIEVAL FROM 8 EXAMPLES
  • 深入了解 美国高防 CN2 :如何提升全球化业务的网络安全与性能
  • 基于Spring Boot的医疗陪护系统设计与实现(源码+定制+开发)病患陪护管理平台、医疗服务管理系统、医疗陪护信息平台
  • 【PCL】vs2022配置PCL环境
  • RHCE第三次实验
  • 强大的文本编辑器Notepad++8.4.6 最新版
  • 【回溯】力扣 77.组合
  • [数组基础] 0238. 除自身以外数组的乘积
  • 「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text 和 Button 组件详解
  • 音频剪辑怎么做?盘点10款高效的音频剪辑工具
  • Android 利用socket 来实现 自动升级apk
  • linux 中文实用型手册 基于RHEL(红帽系)
  • 三网折扣话费充值接口对接详细步骤?
  • 速盾:海外CDN高防解析.提升网站安全与速度
  • 在 .NET 8 Web API 中实现 Entity Framework 的 Code First 方法
  • 【算法系列-二叉树】对称翻转二叉树
  • docker安装、设置非sudo执行、卸载
  • CesiumJS 案例 P15:检测标记、鼠标点击移动标记、鼠标拖动标记
  • CSS Text(文本)
  • HTML CSS
  • JavaEE初阶---网络原理/UDP服务器客户端程序
  • C# 第一阶段(桌面软件)