准确!!ClickHouse同步MySQL详细步骤

1.安装配置ClickHouse

1.1 安装 ClickHouse

  1. 安装 YUM 工具包

    bash 复制代码
    sudo yum install -y yum-utils
  2. 添加 ClickHouse YUM 仓库

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

    bash 复制代码
    sudo yum install -y clickhouse-server clickhouse-client
  4. 启用并启动 ClickHouse 服务

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

    bash 复制代码
    clickhouse-client

1.2 配置 ClickHouse

1.2.1 修改默认用户密码

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

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

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

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

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

    bash 复制代码
    clickhouse-client --user default --password XXXXX

1.2.2 配置远程登录:

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

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

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

    bash 复制代码
    systemctl restart clickhouse-server

1.2.3 修改数据目录

  1. 停止 ClickHouse 服务

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

      bash 复制代码
      sudo systemctl stop clickhouse-server
  2. 创建新的数据目录

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

      bash 复制代码
      sudo mkdir -p /app/clickhouse 
      sudo mkdir -p /app/clickhouse/tmp
  3. 编辑配置文件

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

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

      xml 复制代码
      <!-- 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/

      bash 复制代码
      sudo mv /var/lib/clickhouse/* /app/clickhouse/
  5. 设置正确的权限

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

      bash 复制代码
      sudo chown -R clickhouse:clickhouse /app/clickhouse 
      sudo chmod -R 700 /app/clickhouse
  6. 重启 ClickHouse 服务

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

      bash 复制代码
      sudo systemctl start clickhouse-server

2.配置 MySQL和ClickHouse实时同步

2.1 配置MySQL

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

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

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

2.2 配置 ClickHouse

2.2.1 基本配置

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

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

    sql 复制代码
    SET allow_experimental_database_materialized_mysql = 1;

2.2.2 同步整个库

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

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

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

2.2.3 同步库中的部分表

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

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

2.3 验证同步

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

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

    sql 复制代码
    SELECT * FROM mysql_test.表名;
相关推荐
C吴新科38 分钟前
MySQL入门操作详解
mysql
Ai 编码助手3 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
白云如幻3 小时前
MySQL排序查询
数据库·mysql
苹果醋34 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
stars_User5 小时前
MySQL数据库面试题(下)
数据库·mysql
Yaml45 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
yanwushu5 小时前
Xserver v1.4.2发布,支持自动重载 nginx 配置
mysql·nginx·php·个人开发·composer
贩卖纯净水.5 小时前
Chrome调试工具(查看CSS属性)
前端·chrome
蓝眸少年CY5 小时前
MySQL 【流程控制】函数
mysql
掘金-我是哪吒7 小时前
微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka
redis·mysql·mongodb·elasticsearch·微服务