将 MySQL 与 ClickHouse 集成
本页介绍将 MySQL 与 ClickHouse 集成的两种方法
- 使用
MySQL
表引擎,用于从 MySQL 表读取数据 - 使用
MaterializedMySQL
数据库引擎,用于将 MySQL 中的数据库与 ClickHouse 中的数据库同步
使用 MySQL 表引擎将 ClickHouse 连接到 MySQL
MySQL
表引擎允许您将 ClickHouse 连接到 MySQL。SELECT 和 INSERT 语句可以在 ClickHouse 或 MySQL 表中执行。本文介绍了如何使用 MySQL
表引擎的基本方法。
1. 配置 MySQL
在 MySQL 中创建一个数据库
CREATE DATABASE db1;
创建一个表
CREATE TABLE db1.table1 (
id INT,
column1 VARCHAR(255)
);插入示例行
INSERT INTO db1.table1
(id, column1)
VALUES
(1, 'abc'),
(2, 'def'),
(3, 'ghi');创建一个用户从 ClickHouse 连接
CREATE USER 'mysql_clickhouse'@'%' IDENTIFIED BY 'Password123!';
根据需要授予权限。(为了演示目的,
mysql_clickhouse
用户被授予管理员权限。)GRANT ALL PRIVILEGES ON *.* TO 'mysql_clickhouse'@'%';
如果您在 ClickHouse 云中使用此功能,您可能需要允许 ClickHouse 云 IP 地址访问您的 MySQL 实例。查看 ClickHouse 云端点 API 以获取出站流量详细信息。
2. 在 ClickHouse 中定义一个表
现在让我们创建一个使用
MySQL
表引擎的 ClickHouse 表CREATE TABLE mysql_table1 (
id UInt64,
column1 String
)
ENGINE = MySQL('mysql-host.domain.com','db1','table1','mysql_clickhouse','Password123!')最小参数是
参数 描述 示例 主机 主机名或 IP mysql-host.domain.com 数据库 MySQL 数据库名称 db1 表 MySQL 表名称 table1 用户 连接到 MySQL 的用户名 mysql_clickhouse 密码 连接到 MySQL 的密码 Password123! 注意查看 MySQL 表引擎 文档页面以获取完整的参数列表。
3. 测试集成
在 MySQL 中,插入一个示例行
INSERT INTO db1.table1
(id, column1)
VALUES
(4, 'jkl');请注意,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.让我们向 ClickHouse 表添加一行
INSERT INTO mysql_table1
(id, column1)
VALUES
(5,'mno')请注意,新行出现在 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
配置 MySQL 数据库以允许复制和本机身份验证。ClickHouse 仅适用于本机密码身份验证。将以下条目添加到
/etc/my.cnf
中default_authentication_plugin = mysql_native_password
gtid_mode = ON
enforce_gtid_consistency = ON创建一个用户从 ClickHouse 连接
CREATE USER clickhouse_user IDENTIFIED BY 'ClickHouse_123';
向新用户授予所需的权限。为了演示目的,这里已授予完全的管理员权限
GRANT ALL PRIVILEGES ON *.* TO 'clickhouse_user'@'%';
注意MySQL 用户需要的最小权限是 RELOAD、REPLICATION SLAVE、REPLICATION CLIENT 和 SELECT PRIVILEGE。
在 MySQL 中创建一个数据库
CREATE DATABASE db1;
创建一个表
CREATE TABLE db1.table_1 (
id INT,
column1 VARCHAR(10),
PRIMARY KEY (`id`)
) ENGINE = InnoDB;插入一些示例行
INSERT INTO db1.table_1
(id, column1)
VALUES
(1, 'abc'),
(2, 'def'),
(3, 'ghi');
2. 配置 ClickHouse
设置参数以允许使用实验性功能
set allow_experimental_database_materialized_mysql = 1;
创建一个使用
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 注意查看 MaterializedMySQL 数据库引擎 文档页面以获取完整的参数列表。
3. 测试集成
在 MySQL 中,插入一个示例行
INSERT INTO db1.table_1
(id, column1)
VALUES
(4, 'jkl');请注意,新行出现在 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.假设 MySQL 中的表已修改。让我们向 MySQL 中的
db1.table_1
添加一个列alter table db1.table_1 add column column2 varchar(10) after column1;
现在让我们将一行插入到修改后的表中
INSERT INTO db1.table_1
(id, column1, column2)
VALUES
(5, 'mno', 'pqr');请注意,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.
摘要
就是这样!MaterializedMySQL
数据库引擎将使 MySQL 数据库与 ClickHouse 同步。有一些细节和限制,因此请务必阅读 MaterializedMySQL 的文档页面 以获取更多详细信息。