准确!!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.表名;
相关推荐
鱼儿也有烦恼18 分钟前
MySQL最新安装、连接、卸载教程(Windows下)
mysql·navicat
Chrome深度玩家31 分钟前
如何下载Google Chrome适用于AI语音交互的特制版
前端·人工智能·chrome
浏览器爱好者2 小时前
如何删除Google Chrome中的所有历史记录【一键清除】
前端·chrome
异常君3 小时前
MySQL 查询优化:JOIN 操作背后的性能代价与更优选择
后端·mysql·性能优化
LG.YDX3 小时前
MySQL:13.用户管理
数据库·mysql
JHC0000003 小时前
DrissionPage 请求一次换一个代理(不重启chrome)
前端·chrome
一只栖枝6 小时前
关于OCP认证:有Oracle和MySQL两种
数据库·mysql·oracle·开闭原则·数据管理·ocp认证
爱编程的小新☆7 小时前
【MySQL】数据类型和表的操作
java·数据库·mysql
Ten peaches8 小时前
苍穹外卖(缓存商品、购物车)
spring boot·redis·mysql·缓存