MySQL与ClickHouse集成—官方原版

 本页介绍了将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主机名或 IPmysql-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 CLIENTSELECT 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,欢迎点赞和评论,您的鼓励是我们持续更新的动力!欢迎加微信进入技术群聊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值