1.安装配置ClickHouse

1.1 安装 ClickHouse

  1. 安装 YUM 工具包

    sudo yum install -y yum-utils
    
  2. 添加 ClickHouse YUM 仓库

    sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
    
  3. 安装 ClickHouse 服务器和客户端

    sudo yum install -y clickhouse-server clickhouse-client
    
  4. 启用并启动 ClickHouse 服务

    sudo systemctl enable clickhouse-server 
    sudo systemctl start clickhouse-server 
    sudo systemctl status clickhouse-server
    
  5. 连接到 ClickHouse 客户端(如果未设置密码):

    clickhouse-client
    

1.2 配置 ClickHouse

1.2.1 修改默认用户密码

  • 使用 OpenSSL 生成密码的 SHA256 哈希。

    echo -n 123456789 | openssl dgst -sha256
    
  • 编辑 /etc/clickhouse-server/users.xml 文件,在 users.xml 文件中,将 <password_sha256_hex> 标签的值设置为生成的哈希值。之前的 <password> 标签需要注释掉。

    <password_sha256_hex>15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225</password_sha256_hex>
    
  • 完成密码设置后,需要重启 ClickHouse 服务以应用更改。

    systemctl restart clickhouse-server
    
  • 测试登录以验证密码是否正确设置。

    clickhouse-client --password
    
  • 其它用户连接,使用默认用户名 default 和配置的密码 XXXXXX 连接到 ClickHouse 客户端。

    clickhouse-client --user default --password XXXXX
    

1.2.2 配置远程登录:

  • 编辑 /etc/clickhouse-server/config.xml 文件。

    sudo nano /etc/clickhouse-server/config.xml
    
  • 找到并取消注释(或添加)以下行以允许远程连接:

    <listen_host>0.0.0.0</listen_host>
    
  • 完成设置后,需要重启 ClickHouse 服务以应用更改。

    systemctl restart clickhouse-server
    

1.2.3 修改数据目录

  1. 停止 ClickHouse 服务

    • 停止 ClickHouse 服务以确保在移动数据时不会发生损坏。

      sudo systemctl stop clickhouse-server
      
  2. 创建新的数据目录

    • 如果新目录 /app/clickhouse 还不存在,需要先创建它。

      sudo mkdir -p /app/clickhouse 
      sudo mkdir -p /app/clickhouse/tmp
      
  3. 编辑配置文件

    • 修改 /etc/clickhouse-server/config.xml 文件中的数据目录设置。

      sudo nano /etc/clickhouse-server/config.xml
      
    • 找到 <path><tmp_path> 标签,并更改为新的目录路径:

      <!-- Path to data directory, with trailing slash. --> <path>/app/clickhouse/</path> 
      <tmp_path>/app/clickhouse/tmp/</tmp_path>
      
    • 在 nano 中,按 Ctrl + O 保存更改,然后按 Ctrl + X 退出。

  4. 移动现有数据(如果适用):

    • 将数据从默认目录 /var/lib/clickhouse/ 移动到新目录 /app/clickhouse/

      sudo mv /var/lib/clickhouse/* /app/clickhouse/
      
  5. 设置正确的权限

    • 确保新目录具有正确的权限,以便 ClickHouse 可以访问。

      sudo chown -R clickhouse:clickhouse /app/clickhouse 
      sudo chmod -R 700 /app/clickhouse
      
  6. 重启 ClickHouse 服务

    • 重启 ClickHouse 服务,并检查是否一切正常。

      sudo systemctl start clickhouse-server
      

2.配置 MySQL和ClickHouse实时同步

2.1 配置MySQL

  • 确保 MySQL 实例已启用二进制日志(binlog),这是实现实时同步的必要条件。编辑 MySQL 的配置文件/etc/my.cnf:

    [mysqld] 
    server-id=1 
    log-bin=mysql-bin 
    binlog_format=ROW
    
  • 配置 gtid_modeenforce_gtid_consistency。编辑 MySQL 的配置文件/etc/my.cnf:

    gtid_mode = ON 
    enforce_gtid_consistency = ON
    
  • 重启 MySQL 服务以应用这些更改。
    systemctl restart mysqld

2.2 配置 ClickHouse

2.2.1 基本配置

  • 登录到 ClickHouse。这边使用的是默认用户和密码:

    clickhouse-client --host 192.168.197.128 --user default --password AAAaaa
    
  • 启用 MaterializedMySQL 引擎。在 ClickHouse 客户端中,执行以下命令:

    SET allow_experimental_database_materialized_mysql = 1;
    

2.2.2 同步整个库

  • 在 ClickHouse 中创建一个新的数据库,使用 MaterializedMySQL 引擎连接到 MySQL test 数据库(需提前创建好,而且表中必须要有主键,没有主键无法同步)。需要写上 MySQL 服务器的地址、数据库名称、用户和密码:

    CREATE DATABASE mysql_test ENGINE = MaterializedMySQL('192.168.197.128:3306', 'test', '数据库用户', '数据库密码');
    

    这将创建一个名为 mysql_test 的新数据库,它将映射到 MySQL test 数据库。可以是同名。

2.2.3 同步库中的部分表

  • 创建一个新的 MaterializedMySQL 数据库,但在创建时使用 TABLE OVERRIDE 语句来指定只同步 aaabbb

     CREATE DATABASE mysql_db ENGINE = MaterializedMySQL('192.168.197.128:3306', '数据库', '账号', '密码') SETTINGS materialized_mysql_tables_list = 'aaa,bbb';
    

2.3 验证同步

  • 使用 ClickHouse 客户端检查是否成功同步了数据。可以列出所有同步的表:

    use mysql_db
    SHOW TABLES FROM mysql_db;
    
  • 进行一些查询以确保数据同步正常:

    SELECT * FROM mysql_test.表名;
    
12-30 11:03