
# 配置ClickHouse对接RDS for MySQL
#### 操作场景
ClickHouse面向OLAP场景提供高效的数据分析能力，支持通过兼容的数据库引擎（如MySQL）将远程数据库服务器中的表映射至ClickHouse集群中，从而可以在ClickHouse环境中直接执行高效的数据分析任务。
本章节通过以ClickHouse集群和RDS for MySQL实例对接进行举例说明。
#### 前提条件
- 已提前准备好对接的RDS数据库实例及数据库用户名、密码。详细操作可以参考[连接RDS for MySQL实例的方式概述](https://support.huaweicloud.com/qs-rds-mysql/rds_02_0047.html)。
- 已成功创建ClickHouse集群且集群和实例状态正常。
 
#### 约束与限制
- RDS数据库实例和ClickHouse集群在相同的VPC和子网内。
- 在进行数据同步操作时需要评估对源数据库和目标数据库性能的影响，建议您在业务低峰期执行数据同步。
- 当前ClickHouse支持和RDS for MySQL、RDS for PostgreSQL实例进行对接，不支持对接SQL Server实例。
 
#### ClickHouse通过MySQL引擎对接RDS服务
MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中，并允许您对表进行INSERT和SELECT查询，以方便您在ClickHouse与MySQL之间进行数据交换。
**MySQL引擎使用语法：**
```
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
```
表1MySQL数据库引擎参数说明 
| 参数        | 参数说明                                                                          |
|:---|:---|
| host:port | RDS for MySQL实例IP地址和端口。                                                       |
| database  | RDS for MySQL数据库名。                                                            |
| user      | RDS for MySQL数据库用户名。                                                          |
| password  | RDS for MySQL数据库用户密码，命令中如果携带认证密码信息可能存在安全风险，在执行命令前建议关闭系统的history命令记录功能，避免信息泄露。 |
   
**MySQL引擎** **使用示例：**
1. 连接到RDS for MySQL数据库。详细操作可以参考[连接RDS for MySQL实例的方式概述](https://support.huaweicloud.com/usermanual-rds-mysql/rds_mysql_connect_01.html)。
2. 在MySQL数据库上创建表，并插入数据。 
   创建表mysql_table：
   ```
   CREATE TABLE `mysql_table` (
   `int_id` INT NOT NULL AUTO_INCREMENT,
   `float` FLOAT NOT NULL,
   PRIMARY KEY (`int_id`));
   ```
   插入表数据：
   ```
   insert into mysql_table (`int_id`, `float`) VALUES (1,2);
   ```
   
   
3. 登录MRS集群ClickHouse客户端节点。 
   使用集群客户端连接到ClickHouse服务端，具体请参考[ClickHouse客户端使用实践](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2345.html)。
   
   
4. 在ClickHouse中创建MySQL引擎的数据库，创建成功后自动与MySQL服务器交换数据。 
   ```
   CREATE DATABASE mysql_db ENGINE = MySQL('RDS服务MySQL数据库实例IP地址:MySQL数据库实例端口', 'MySQL数据库名', 'MySQL数据库用户名', 'MySQL数据库用户名密码');
   ```
   
   
5. 切换到新建的数据库**mysql_db** ，并查询表数据**。**
   
   ```
   USE mysql_db;
   ```
   在ClickHouse中查询MySQL数据库表数据。
   ```
   SELECT * FROM mysql_table;
   ```
   执行结果如下：
   ```
   ┌─int_id─┬─float─┐
   │      1   │     2   │
   └─────┴──── ┘
   ```
   新增插入数据后也可以正常进行查询。
   ```
   INSERT INTO mysql_table VALUES (3,4);
   SELECT * FROM mysql_table;
   ```
   执行结果如下：
   ```
   ┌─int_id─┬─float─┐
   │      1   │       2 │
   │      3   │       4 │
   └─────┴──── ┘
   ```
   
   
 
