记一次:Clickhouse同步mysql数据库

news/2024/11/6 3:38:52 标签: 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.niftyadmin.cn/n/5740121.html

相关文章

三维测量与建模笔记 - 3.1 相机标定基本概念

成像领域有多个标定概念 笔记所说的相机标定主要是指几何标定。 相机几何模型基于小孔成像原理,相关文章很多,上图中R t矩阵是外参矩阵(和相机在世界空间中的位姿相关),K矩阵是内参矩阵(和相机本身参数相关…

【Android】Gradle 7.0+ 渠道打包配置

声明 该配置主要解决打包apk/aab需要动态修改渠道字段,方便区分渠道上架国内商店。 暂不支持批量打包(7.4版本无法通过只修改outputFileName的形式批量处理) 因为构建时需要拷贝/创建Output,然后修改outputFileName才能处理批量打包,但拷贝/创建在高版本中失效了。 目前的…

【UML】- 用例图(结合银行案例解释其中的奥义)

目录 一、相关介绍 作用: 组成: 关系 二、使用具体银行案例解释各组成部分的含义 1、系统 2、参与者 3、用例 4、关联关系 5、扩展关系 6、泛化(继承)关系 三、成品 一、相关介绍 作用: 用例图可以描述一个…

【学习日记】Anaconda的安装与使用-小白大学生

目录 日记说明 解压安装: 配置 使用 日记说明 作者是个大学生 这个专栏主要收集课时常用的软件 以及女朋友上课用的软件的教程 所有安装包可以私聊我获取 免费 提前清除已有python环境 windows11 Anaconda-2024.02 垃圾话: Anaconda 是全球领先的数…

高阶函数--python

高阶函数应当满足至少下面一个条件: 接受一个或多个函数参数 输出一个函数 下面用一个例子来理解高阶函数。 一、高阶函数 先看一个简单的函数 例一: 例二: 是高阶函数,因为满足条件,返回一个函数 并且有闭包&a…

Python self

在Python中,self 不是类本身,而是类的实例对象本身。当你定义一个实例方法时,Python 会自动将调用该方法的实例对象作为第一个参数传递给这个方法,按照惯例,这个参数被命名为 self。 这里有一个简单的例子来说明 self…

【自用】fastapi 学习记录 --请求和参数部分

fastai个人学习笔记 一、模块化结构框架 设置了默认请求头shop之后就无需再app0x里接口函数前全部写上/shop/xxx,或者/user/xxx,他会同意添加~如果都写了就会出现以下的情况(重复shop): 二、请求与响应 关于参数&a…

2024年专业的10款数据恢复工具你都用过哪些?

数据丢失是很多人在生活中都会出现的问题,但想真多情况下都不是什么难题。因为有很多的数据恢复软件可以进行数据恢复。于是我根据工具的恢复成功率, 工具的兼容性、易用性以及恢复数据的种类和安全性这些因素,在网上搜罗了一些好用的数据恢复…