clickhouse 同步mysql資料

leihongnu發表於2024-06-06

1、mysql端

1.1、配置mysql啟動二進位制複製

vim /etc/my.conf

在[mysqld]下新增

[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=ROW

gtid_mode = ON
enforce_gtid_consistency = ON

default_authentication_plugin=mysql_native_password

修改配置需要重啟mysql服務

1.2、建立SLAVE賬戶

登入mysql,使用mysql資料庫新增replica使用者給clickhouse複製資料

>use mysql;

>CREATE USER 'replica'@'%' IDENTIFIED BY '密碼';

>ALTER user 'replica'@'%' IDENTIFIED BY '密碼' PASSWORD EXPIRE NEVER;(可以不執行)

>ALTER user 'replica'@'%' IDENTIFIED WITH mysql_native_password BY '密碼';(可以不執行)

>GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SELECT ON *.* TO 'replica'@'%';(GRANT 是全域性設定,不能設定單個資料庫,一定要寫 *.* ,要只給replica複製一個資料庫只能去my.conf中設定)

>FLUSH PRIVILEGES;

以上是mysql的配置

2、clickhouse端

2.1、設定資料儲存目錄(只有一個磁碟或者a盤夠大的可直接跳過)

建立一個存放資料的目錄

mkdir -p /data/clickhouse/tmp

chown -R clickhouse:clickhouse /data/clickhouse

修改/etc/clickhouse-server/config.xml 檔案中的資料目錄設定,找到 <path><tmp_path> 標籤,並更改為新的目錄路徑

<!-- Path to data directory, with trailing slash. --> <path>/app/clickhouse/</path>
<tmp_path>/data/clickhouse/tmp/</tmp_path>

如果預設資料儲存的目錄下有檔案也要一併遷走: mv /var/lib/clickhouse/* /data/clickhouse/

修改配置檔案記得重啟clickhouse-server服務:/etc/init.d/clickhouse-server restart

2.2、clickhouse連線mysql

登入clickhouse-client

啟用 MaterializedMySQL 引擎:SET allow_experimental_database_materialized_mysql = 1;(一次性的?設定過一次重新登入就要重新設定)

2.2.1 同步整個庫

CREATE DATABASE 新建的clickhouse資料庫名 ENGINE = MaterializedMySQL('mysql的IP:3306', '要同步的mysql資料庫名', 'mysql中配置的可以複製資料的SLAVE使用者', '資料庫密碼');

2.2.2 同步一張表

CREATE DATABASE 新建的clickhouse資料庫名 ENGINE = MaterializedMySQL('mysql的IP:3306', '要同步的mysql資料庫名, 'mysql中配置的可以複製資料的SLAVE使用者', '資料庫密碼') SETTINGS materialized_mysql_tables_list = '單個表名';

3、驗證是否成功

還是在clickhouse-client下檢視

檢視是否建立新的資料庫:show datatables;

使用新建立的資料庫:use 資料庫名;

檢視資料庫中的表名:SHOW TABLES FROM 資料庫名;

檢視單張表的資料:select count(*) from 表名;(使用clickhouse都是千萬級別的資料,建議直接檢視資料量,否則刷屏容易當機)

參考:https://blog.csdn.net/u011197085/article/details/135227736

相關文章