Guia completo para sincronização de dados do MySQL para ClickHouse

  1. Instalação e configuração do ClickHouse

1.1 Instalação do ClickHouse

Para instalar o ClickHouse em sistemas baseados em RHEL, siga estes passos:

  1. Instale as ferramentas do YUM com o comando: ``` sudo yum install -y yum-utils
  2. Adicione o repositório YUM do ClickHouse: ``` sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/stable/clickhouse.repo
  3. Instale os pacotes do servidor e cliente: ``` sudo yum install -y clickhouse-server clickhouse-client
  4. Ative e inicie o serviço: ``` sudo systemctl enable clickhouse-server sudo systemctl start clickhouse-server sudo systemctl status clickhouse-server
  5. Conecte-se ao cliente, assumindo autenticação padrão: ``` clickhouse-client --user default
    
    

1.2 Configuração do ClickHouse

1.2.1 Definição de senha para o usuário padrão

Gere um hash SHA256 para a nova senha e atualize a configuração:

echo -n "minhaSenhaSegura" | openssl dgst -sha256

Edite o arquivo /etc/clickhouse-server/users.xml, substituindo a tag <password> por <password_sha256_hex> com o valor gerado. Exemplo:

<password_sha256_hex>e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855</password_sha256_hex>

Reinicie o serviço para aplicar as mudanças e teste a autenticação:

sudo systemctl restart clickhouse-server
clickhouse-client --user default --password minhaSenhaSegura

1.2.2 Habilitar acesso remoto

No arquivo /etc/clickhouse-server/config.xml, localize ou adicione a seguinte linha para aceitar conexões de qualquer IP:

<listen_host>0.0.0.0</listen_host>

Reinicie o serviço após a alteração:

sudo systemctl restart clickhouse-server

1.2.3 Alterar o diretório de dados

Siga estes passos para mover os dados para um novo local:

  1. Pare o serviço ClickHouse: ``` sudo systemctl stop clickhouse-server
  2. Crie o novo diretório e subpastas temporárias: ``` sudo mkdir -p /mnt/dados_ch/tmp
  3. Atualize os caminhos no arquivo /etc/clickhouse-server/config.xml: ``` /mnt/dados_ch/ <tmp_path>/mnt/dados_ch/tmp/</tmp_path>
  4. Mova os dados existentes, se necessário: ``` sudo rsync -av /var/lib/clickhouse/ /mnt/dados_ch/
  5. Ajuste as permissões: ``` sudo chown -R clickhouse:clickhouse /mnt/dados_ch sudo chmod -R 750 /mnt/dados_ch
  6. Inicie o serviço novamente: ``` sudo systemctl start clickhouse-server
    
    
  7. Configuração da sincronização em tempo real com MySQL

2.1 Preparar o MySQL

Ative os logs binários e o modo GTID editando /etc/my.cnf ou /etc/mysql/mysql.conf.d/mysqld.cnf:

[mysqld]
server-id=100
log-bin=binlog_mysql
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON

Reinicie o MySQL e crie um usuário para replicação com os privilégios necessários:

systemctl restart mysqld
CREATE USER 'ch_sync_user'@'%' IDENTIFIED BY 'senha_repl';
GRANT REPLICATION SLAVE, REPLICATION CLIENT, RELOAD, SELECT ON *.* TO 'ch_sync_user'@'%';
FLUSH PRIVILEGES;

2.2 Configurar o ClickHouse para sincronização

2.2.1 Ativar o motor MaterializedMySQL

Conecte-se ao ClickHouse e ative o recurso experimental:

SET allow_experimental_database_materialized_mysql = 1;

2.2.2 Sincronizar um banco de dados inteiro

Crie um banco de dados no ClickHouse que espelhe um banco MySQL. O banco MySQL deve ter chaves primárias em todas as tabelas. Exemplo:

CREATE DATABASE bd_espelho ENGINE = MaterializedMySQL('mysql_host:3306', 'nome_bd_mysql', 'ch_sync_user', 'senha_repl');

2.2.3 Sincronizar tabelas específicas

Para limitar a sincronização a tabelas selecionadas, utilize a confiugração materialized_mysql_tables_list:

CREATE DATABASE bd_parcial ENGINE = MaterializedMySQL('mysql_host:3306', 'nome_bd_mysql', 'ch_sync_user', 'senha_repl') SETTINGS materialized_mysql_tables_list = 'tabela_a,tabela_b';

2.3 Verificar a sincronização

No cliente ClickHouse, consutle o banco sincronizado para confirmar a replicação:

USE bd_espelho;
SHOW TABLES;
SELECT * FROM tabela_a LIMIT 10;

Monitore os logs do ClickHouse e do MySQL para detectar eventuais erros durante o processo.

Tags: ClickHouse MySQL MaterializedMySQL Binlog GTID

Publicado em 7-27 18:14