更新时间:2024-07-24 GMT+08:00

配置ClickHouse对接RDS MySQL数据库

ClickHouse面向OLAP场景提供高效的数据分析能力,支持通过MySQL等数据库引擎将远程数据库服务器中的表映射到ClickHouse集群中,后续可以在ClickHouse中进行数据分析。以下操作通过ClickHouse集群和RDS服务下的MySQL数据库实例对接进行举例说明。

前提条件

  • 已提前准备好对接的RDS数据库实例及数据库用户名、密码。详细操作可以参考创建和连接RDS数据库实例
  • 已成功创建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')

MySQL数据库引擎参数说明:

  • host:port :RDS服务MySQL数据库实例IP地址和端口。
  • database :RDS服务MySQL数据库名。
  • user :RDS服务MySQL数据库用户名。
  • password:RDS服务MySQL数据库用户密码,命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。

MySQL引擎使用示例:

  1. 连接到RDS服务的MySQL数据库。详细操作可以参考RDS服务MySQL实例连接
  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. 登录ClickHouse客户端安装节点。执行以下命令,切换到客户端安装目录。

    cd /opt/client

  4. 执行以下命令配置环境变量。

    source bigdata_env

  5. 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建ClickHouse表的权限,具体请参见ClickHouse用户及权限管理章节,为用户绑定对应角色。如果当前集群未启用Kerberos认证,则无需执行本步骤。

    1. 如果是MRS 3.1.0版本集群,则需要先执行:export CLICKHOUSE_SECURITY_ENABLED=true
    2. kinit 组件业务用户

      例如,kinit clickhouseuser。

  6. 使用客户端命令连接ClickHouse。

    clickhouse client --host clickhouse实例IP --user 用户名 --password --port 端口号

    输入用户密码

  7. 在ClickHouse中创建MySQL引擎的数据库,创建成功后自动与MySQL服务器交换数据。

    CREATE DATABASE mysql_db ENGINE = MySQL('RDS服务MySQL数据库实例IP地址:MySQL数据库实例端口', 'MySQL数据库名', 'MySQL数据库用户名', 'MySQL数据库用户名密码');

  8. 切换到新建的数据库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 │
    └─────┴──── ┘