ClickHouse MaterializeMySQL 數據庫引擎


ClickHouse 20.8將新增 MaterializeMySQL引擎 ,可通過binlog日志實時物化mysql數據,極大提升了數倉的查詢性能和數據同步的時效性;原有mysql中承擔的數據分析工作 可交由clickhouse去做,這么做可顯著降低線上mysql的負載,從此OLTP與OLAP業務實現完美融合。

 

MaterializeMySQL database engine 支持的情況:
 1.支持mysql 庫級別的數據同步,暫不支持表級別的。
 2.MySQL 庫映射到clickhouse中自動創建為ReplacingMergeTree 引擎的表
 3.支持全量和增量同步,首次創建數據庫引擎時進行一次全量復制,之后通過監控binlog變化進行增量數據同步
 4.支持的MySQL版本:5.6 、5.7、8.0
 5.支持的操作:insert,update,delete,alter,create,drop,truncate等大部分DDL操作
 6.支持的MySQL復制為GTID復制

我的環境:

RedHat 7

ClickHouse 20.8.3.18

Mysql  5.7(window上安裝的mysql服務)

1)查看當前mysql配置情況

show variables like '%log%bin%';  

 

 show variables like '%binlog_format%';

 

 show variables like 'server_id';

 

 select version();

 

 2)設置mysql配置參數

需要的配置為:

log-bin=mysqlbin.log
binlog_format=ROW
server-id=1

我這邊需要配置的是開啟binlog

編輯my.ini   (linux下是my.conf文件)

 

 重啟mysql服務

 

 重啟之后:show variables like '%log%bin%';可以看到已經開啟binlog.

 

3)設置clickhouse配置參數,開啟mysql物理化引擎

 查看clickhouse的版本

select version()

 

查看allow_experimental_database_materialize_mysql的值

select * from system.settings where name ='allow_experimental_database_materialize_mysql';

 

 

 

 設置allow_experimental_database_materialize_mysql=1 (# 因為該功能目前還處於實驗階段,在使用之前需要開啟)

 set allow_experimental_database_materialize_mysql=1

 

 

 4)在mysql中創建clickhouse_test數據庫,並創建user表,添加了2條數據,如下圖

 

 

 5)在clickhouse中創建mysql的復制管道

先查看下clickhouse中的數據庫信息

 

 

 創建clickhouse_mysql數據庫,關聯到本地的clickhouse_test數據庫

CREATE DATABASE clickhouse_mysql ENGINE = MaterializeMySQL('192.168.31.250:3306', 'clickhouse_test', 'root', '123456')

 

 

 上圖可以看到clickhouse_mysql數據庫創建好了

現在進入到clickhouse_mysql,查看user表

 

 

報錯:需要在MySQL端開啟GTID模式

確保MySQL版本在5.6. 以上,在MySQL 5.7版本支持熱部署,即不停止服務的情況下開啟GTID模式

查看mysql的gtid_mode值

 

 

 查看mysql的 enforce_gtid_consistency值

 

 

 

開啟enforce_gtid_consistency和gtid_mode:

 SET GLOBAL ENFORCE_GTID_CONSISTENCY = 'WARN';
 SET GLOBAL ENFORCE_GTID_CONSISTENCY = 'ON';
 SET GLOBAL GTID_MODE = 'OFF_PERMISSIVE';
 SET GLOBAL GTID_MODE = 'ON_PERMISSIVE';
 SET GLOBAL GTID_MODE = 'ON';

驗證:

 

 開啟之后,刪除剛才在clickhouse中創建的clickhouse_mysql數據庫,重新創建

 

 進入到clickhouse_mysql數據庫,查看user表,可以看到我們剛才插入的數據,而是是全量數據

 

 

 現在測試下增量數據:

在mysql端插入了一條數據,id=3

 

 在clickhouse中查看數據

 

 同步過來了!!!

20201226日繼續.......

現在user表的數據情況如下:

 

 1)測試在mysql中添加字段,並添加對應字段的數據

 

 

 

 clickhouse中:

 

 可以看到新增的字段和數據都加進來了

2)刪除mysql表中的一條數據

刪除前user表數據

 

 刪除id=4后user表的數據

 

 clickhouse中表數據情況:

 

 可以看到數據同步刪除了

3)刪除mysql中user表的sex字段

刪除前:

刪除后:

 clickhouse中數據情況

 

 可以看到sex字段已經不存在了

4)在mysql中新增加一張表user2

 clickhouse中的情況:

 

可以看到相應的增加了user2表

5)在mysql中刪除user2表

 

 clickhouse中,同樣刪除了哦,很不錯!

 

 6)更改mysql中user表字段類型,將id_card更改為bigint

更改前:

 

更改后:

 

 

看看clickhouse中的情況,

更改前:

 

 

更改后:

 

 

nice!!!!

 

參考: https://blog.csdn.net/weixin_42993799/article/details/109020316


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM