本页介绍了将MySQL与ClickHouse集成的两个选项:
- 使用表引擎,用于从 MySQL 表中读取
MySQL
- 使用数据库引擎,用于将 MySQL 中的数据库与 ClickHouse 中的数据库同步
MaterializedMySQL
一、使用MySQL表引擎将ClickHouse连接到MySQL
MySQL表引擎允许您将ClickHouse连接到MySQL。SELECT和INSERT语句可以在ClickHouse或MySQL表中生成。本文介绍了如何使用MySQL表引擎的基本方法。
1. 配置 MySQL
1.1 在 MySQL 中创建数据库:
CREATE DATABASE db1;
1.2 创建一个表:
CREATE TABLE db1.table1 (
id INT,
column1 VARCHAR(255)
);
1.3 插入示例行:
INSERT INTO db1.table1
(id, column1)
VALUES
(1, 'abc'),
(2, 'def'),
(3, 'ghi');
1.4 创建一个用户以从ClickHouse进行连接:
CREATE USER 'mysql_clickhouse'@'%' IDENTIFIED BY 'Password123!';
1.5 根据需要授予特权。(出于演示目的,mysql_clickhouse用户被授予管理员权限。)
GRANT ALL PRIVILEGES ON *.* TO 'mysql_clickhouse'@'%';
注意
如果您在 ClickHouse Cloud 中使用此 feaure,您可能需要允许 ClickHouse Cloud IP 地址访问您的 MySQL 实例。
2.在ClickHouse中定义表格
2.1 现在,让我们创建一个使用MySQL表引擎的ClickHouse表:
CREATE TABLE mysql_table1 (
id UInt64,
column1 String
)
ENGINE = MySQL('mysql-host.domain.com','db1','table1','mysql_clickhouse','Password123!')
最小参数为:
参数 | 描述 | 例 |
---|---|---|
host | 主机名或 IP | mysql-host.domain.com |
数据库 | MySQL 数据库名称 | db1 |
表 | MySQL 表名 | table1 |
用户 | 用于连接到 MySQL 的用户名 | mysql_clickhouse |
密码 | 用于连接到 MySQL 的密码 | Password123! |
3. 测试集成
3.1 在 MySQL 中,插入示例行:
INSERT INTO db1.table1
(id, column1)
VALUES
(4, 'jkl');
3.2 请注意,MySQL 表中的现有行以及您刚刚添加的新行都在 ClickHouse 表中:
SELECT
id,
column1
FROM mysql_table1
您应该看到 4 行:
Query id: 6d590083-841e-4e95-8715-ef37d3e95197
┌─id─┬─column1─┐
│ 1 │ abc │
│ 2 │ def │
│ 3 │ ghi │
│ 4 │ jkl │
└────┴─────────┘
4 rows in set. Elapsed: 0.044 sec.
3.3 让我们在 ClickHouse 表中添加一行:
INSERT INTO mysql_table1
(id, column1)
VALUES
(5,'mno')
3.4 请注意,新行出现在 MySQL 中:
mysql> select id,column1 from db1.table1;
您应该会看到新行:
+------+---------+
| id | column1 |
+------+---------+
| 1 | abc |
| 2 | def |
| 3 | ghi |
| 4 | jkl |
| 5 | mno |
+------+---------+
5 rows in set (0.01 sec)
总结
MySQL表引擎允许您将ClickHouse连接到MySQL,以便来回交换数据。有关更多详细信息,请务必查看MySQL表引擎的文档页面。
二、在ClickHouse中复制MySQL数据库
MaterializedMySQL数据库引擎允许您在ClickHouse中定义一个数据库,该数据库包含MySQL数据库中所有现有的表以及这些表中的所有数据。在MySQL方面,DDL和DML操作可以继续进行,ClickHouse检测到更改并充当MySQL数据库的副本。
本文演示了如何配置MySQL和ClickHouse来实现这种复制。
1. 配置 MySQL
1.1 配置MySQL数据库以允许复制和本机身份验证。ClickHouse仅适用于本机密码身份验证。将以下条目添加到/etc/my.cnf:
default-authentication-plugin = mysql_native_password
gtid-mode = ON
enforce-gtid-consistency = ON
1.2 创建一个用户以从ClickHouse进行连接
CREATE USER clickhouse_user IDENTIFIED BY 'ClickHouse_123';
1.3 向新用户授予所需的权限。出于演示目的,此处已授予完全管理员权限:
GRANT ALL PRIVILEGES ON *.* TO 'clickhouse_user'@'%';
注意
MySQL用户所需的最低权限是RELOAD,REPLICATION SLAVE,REPLICATION CLIENT和SELECT PRIVILEGE。
1.4 在 MySQL 中创建数据库:
CREATE DATABASE db1;
1.5 创建一个表:
CREATE TABLE db1.table_1 (
id INT,
column1 VARCHAR(10),
PRIMARY KEY (`id`)
) ENGINE = InnoDB;
1.6 插入几个示例行:
INSERT INTO db1.table_1
(id, column1)
VALUES
(1, 'abc'),
(2, 'def'),
(3, 'ghi');
2. 配置ClickHouse
2.1 设置参数以允许使用实验功能:
set allow_experimental_database_materialized_mysql = 1;
2.2 创建一个使用MaterializedMySQL数据库引擎的数据库:
CREATE DATABASE db1_mysql
ENGINE = MaterializedMySQL(
'mysql-host.domain.com:3306',
'db1',
'clickhouse_user',
'ClickHouse_123'
);
最小参数为:
参数 | 描述 | 例 |
---|---|---|
主机:端口 | 主机名或 IP 和端口 | mysql-host.domain.com |
数据库 | MySQL 数据库名称 | db1 |
用户 | 用于连接到 MySQL 的用户名 | clickhouse_user |
密码 | 用于连接到 MySQL 的密码 | ClickHouse_123 |
3. 测试集成
3.1 在 MySQL 中,插入示例行:
INSERT INTO db1.table_1
(id, column1)
VALUES
(4, 'jkl');
3.2 请注意,新行出现在 ClickHouse 表中:
SELECT
id,
column1
FROM db1_mysql.table_1
响应如下所示:
Query id: d61a5840-63ca-4a3d-8fac-c93235985654
┌─id─┬─column1─┐
│ 1 │ abc │
└────┴─────────┘
┌─id─┬─column1─┐
│ 4 │ jkl │
└────┴─────────┘
┌─id─┬─column1─┐
│ 2 │ def │
└────┴─────────┘
┌─id─┬─column1─┐
│ 3 │ ghi │
└────┴─────────┘
4 rows in set. Elapsed: 0.030 sec.
3.3 假设MySQL中的表被修改了。让我们来看看MySQL中db1.table_1的一列:
alter table db1.table_1 add column column2 varchar(10) after column1;
3.4 现在让我们在修改后的表中插入一行:
INSERT INTO db1.table_1
(id, column1, column2)
VALUES
(5, 'mno', 'pqr');
3.5 请注意,ClickHouse 中的表现在具有新列和新行:
SELECT
id,
column1,
column2
FROM db1_mysql.table_1
前几行的column2列将为NULL:
Query id: 2c32fd15-3c83-480b-9bfc-cba5d932d674
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 22.2.2 revision 54455.
┌─id─┬─column1─┬─column2─┐
│ 3 │ ghi │ ᴺᵁᴸᴸ │
└────┴─────────┴─────────┘
┌─id─┬─column1─┬─column2─┐
│ 2 │ def │ ᴺᵁᴸᴸ │
└────┴─────────┴─────────┘
┌─id─┬─column1─┬─column2─┐
│ 1 │ abc │ ᴺᵁᴸᴸ │
│ 5 │ mno │ pqr │
└────┴─────────┴─────────┘
┌─id─┬─column1─┬─column2─┐
│ 4 │ jkl │ ᴺᵁᴸᴸ │
└────┴─────────┴─────────┘
5 rows in set. Elapsed: 0.017 sec.
大家好,我是Doker品牌的Sinbad,欢迎点赞和评论,您的鼓励是我们持续更新的动力!欢迎加微信进入技术群聊!