准确!!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.表名;
相关推荐
qq_348231851 小时前
MySQL 与 PostgreSQL PL/pgSQL 的对比详解
数据库·mysql·postgresql
cui_win2 小时前
Prometheus实战教程 - mysql监控
mysql·prometheus·压测
wsx_iot2 小时前
mysql的快照读和当前读
数据库·mysql
梁萌2 小时前
MySQL分区表使用保姆级教程
数据库·mysql·优化·分区表·分区·partitions
Logic1013 小时前
《数据库运维》 郭文明 实验4 数据库备份与恢复实验核心操作与思路解析
运维·数据库·sql·mysql·学习笔记·形考作业·国家开放大学
hssfscv3 小时前
Mysql学习笔记——多表查询
笔记·学习·mysql
肠胃炎3 小时前
Chrome扩展截图功能实现
前端·chrome
MC皮蛋侠客3 小时前
MySQL数据库迁移脚本及使用说明
数据库·mysql
soft20015254 小时前
《Rocky Linux 9.6 部署 MySQL 8.0 生产手册(含错误处理)》
linux·mysql·adb
波波仔864 小时前
clickhouse表存储引擎
clickhouse·表存储引擎