
# ClickHouse访问RDS MySQL服务
ClickHouse面向OLAP场景提供高效的数据分析能力，支持通过MySQL等数据库引擎将远程数据库服务器中的表映射到ClickHouse集群中，后续可以在ClickHouse中进行数据分析。以下操作通过ClickHouse集群和RDS服务下的MySQL数据库实例对接进行举例说明。
#### 前提条件
- 已提前准备好对接的RDS数据库实例及数据库用户名、密码。详细操作可以参考[创建和连接RDS数据库实例](https://support.huaweicloud.com/qs-rds-mysql/rds_02_0047.html)。
- 已成功创建ClickHouse集群且集群状态正常。
 
#### 约束限制
- RDS数据库实例和ClickHouse集群在相同的VPC和子网内。
- 在进行数据同步操作时需要评估对源数据库和目标数据库性能的影响，同时建议您在业务低峰期执行数据同步。
- 当前ClickHouse支持和RDS服务下的MySQL、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数据库引擎参数说明 
  | 参数       | 描述                      |
  |:---|:---|
  | hostport | RDS服务MySQL数据库实例IP地址和端口。 |
  | database | RDS服务MySQL数据库名。         |
  | user     | RDS服务MySQL数据库用户名。       |
  | password | RDS服务MySQL数据库用户密码。      |
     
  MySQL引擎使用示例：
  1. 连接到RDS服务的MySQL数据库。详细操作可以参考[RDS服务MySQL实例连接](https://support.huaweicloud.com/qs-rds-mysql/rds_02_0047.html)。
  
  2. 在MySQL数据库上创建表，并插入数据。
  
  3. 使用客户端命令连接ClickHouse。
     非安全集群连接命令
     ```
     ./clickhouse client --host 集群内网地址   --port 9000 --user admin --password password
     ```
     安全集群连接命令，详细操作请参见[使用客户端连接ClickHouse安全集群](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0381.html)章节。
     ```
     ./clickhouse client --host 集群内网地址   --port 9440 --user admin --password password --secure --config-file /root/config.xml
     ```
     ![](https://support.huaweicloud.com/usermanual-cloudtable/public_sys-resources/note_3.0-zh-cn.png)
     集群内网地址：集群详情页面中集群访问地址，这里替换成您自己购买的集群的访问地址。
     
  
  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 │
     └─────┴──── ┘
     ```
     
   
 
