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