一、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