Clickhouse MaterializeMySQL 引擎


一、MaterializeMySQL database engine 支持的情況

使用MaterializeMySQL存儲引擎,需要一下先決條件

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操作

二、使用MaterializeMySQL  引擎的先決條件

1、MySQL部分

1)開啟binlog並設置為row格式:

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

log-bin=mysqlbin.log

binlog_format=ROW

2)開啟GTID模式

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

gtid_mode=on

enforce_gtid_consistency=1

不開啟GTID模式則會報錯

ch查詢創建MaterializeMySQL引擎的表

Code: 1002. DB::Exception: Received from localhost:9000. DB::Exception: The replication sender thread cannot start in AUTO_POSITION mode: this server has GTID_MODE = OFF_PERMISSIVE instead of ON..

3)localhost連接

如果只是自己在一台服務器做測試,使用localhost來創建MaterializeMySQL,那么默認去找/tmp/mysql.sock,而不是MySQL配置文件中的sock

 MySQL配置文件中的sock配置如下

 解決辦法:修改MySQL sock配置,重啟MySQL

 

重啟MySQL后,不能再用localhost登錄,直接用127.0.0.1

 在創建MaterializeMySQL

4)MySQL表必須要有主鍵,否則無法同步到Clickhouse中

 

 2、Clickhouse部分

users.xml配置文件添加

<allow_experimental_database_materialize_mysql>1</allow_experimental_database_materialize_mysql>

並重啟clickhouse

 

否則報錯

Code: 336. DB::Exception: Received from localhost:9000. DB::Exception: MaterializeMySQL is an experimental database engine. Enable allow_experimental_database_materialize_mysql to use it..

 三、clickhouse創建MaterializeMySQL 

1、MySQL創建測試DB與表,並插入數據(表必須有主鍵)

mysql> use mych;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql>
mysql>
mysql> create table chtomysql(id int auto_increment primary key,name varchar(30));
Query OK, 0 rows affected (0.02 sec)

mysql>
mysql>
mysql> insert into chtomysql values (1,'xxa'),(2,'acscas');
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql>
mysql>
mysql> select * from chtomysql;
+----+--------+
| id | name |
+----+--------+
| 1 | xxa |
| 2 | acscas |
+----+--------+
2 rows in set (0.00 sec)

mysql>

2、Clickhouse創建MaterializeMySQL引擎的DB

ch01 :) create database mych ENGINE = MaterializeMySQL('192.168.88.128:3306', 'mych', 'root', 'VoracletestA@1');

CREATE DATABASE mych
ENGINE = MaterializeMySQL('192.168.88.128:3306', 'mych', 'root', 'VoracletestA@1')

Ok.

0 rows in set. Elapsed: 0.014 sec.

ch01 :) use mych;

USE mych

Ok.

0 rows in set. Elapsed: 0.001 sec.

ch01 :) show tables;

SHOW TABLES

┌─name──────┐
│ chtomysql │
└───────────┘

1 rows in set. Elapsed: 0.005 sec.

ch01 :) select * from chtomysql;

SELECT *
FROM chtomysql

┌─id─┬─name───┐
│ 1 │ xxa │
│ 2 │ acscas │
└────┴────────┘

2 rows in set. Elapsed: 0.009 sec.

ch01 :)

四、Clickhouse相關測試

支持的操作:insert,update,delete,alter,create,drop,truncate等大部分DDL操作

1、insert測試

MySQL insert 數據

 

 clickhouse查看響應數據

2、update測試

mysql update數據

 

 clickhouse查看響應數據

3、delete測試

mysql delete數據

 

clickhouse查看響應數據

4、 alter測試

1)增加字段、帶默認值

 

 

 

 2)增加字段、無默認值

 

 

 

 3)刪除字段

 

 

5、create測試

MySQL creaet 表

 

 clickhouse查看響應:MySQL新創建的表mytab,並未同步過來,看網上文章有的可以同步過來

6、drop測試

mysql drop table

 

clickhouse 查看表響應:表已被刪除

 

7、truncate測試

MySQL truncate 表

 clickhouse查看響應:ch的表數據也被truncate

 


免責聲明!

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



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