Aquest article proporciona una guia detallada sobre com aconseguir una sincronització completa de dades de MySQL a PostgreSQL utilitzant Apache SeaTunnel 2.3.9. Es cobreix tot el procés, des de la configuració de l'entorn fins a la validació en producció.
Requisits de versió:
- MySQL: MySQL 8.3
- PostgreSQL: PostgreSQL 13.2
- Apache SeaTunnel: Apache-SeaTunnel-2.3.9
Verificació de versions:
Executa la següent comanda SQL per verificar la versió:
select version();
Activació de replicació mestre-esclau:
show variables where variable_name in ('log_bin', 'binlog_format', 'binlog_row_image', 'gtid_mode', 'enforce_gtid_consistency');
Per a la sincronització de dades en MySQL CDC, SeaTunnel necessita llegir el binlog i actuar com un node esclau al clúster.
SET GLOBAL gtid_mode=OFF_PERMISSIVE;
SET GLOBAL gtid_mode=ON_PERMISSIVE;
SET GLOBAL enforce_gtid_consistency=ON;
SET GLOBAL gtid_mode=ON;
Concessió de permisos d'usuari:
Es requereix un usuari amb privilegis de replicació:
CREATE USER 'test'@'%' IDENTIFIED BY 'password';
GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test';
FLUSH PRIVILEGES;
Configuració del clúster de SeaTunnel:
Per defecte, SeaTunnel genera logs en un sol fitxer. Per a producció, és recomanable separar els registres per tasca:
rootLogger.appenderRef.file.ref = routingAppender
En entorns de producció, es recomana instal·lar SeaTunnel al directori /opt i configurar la variable d'entorn SEATUNNEL_HOME:
ln -s /opt/apache-seatunnel-2.3.9 /opt/seatunnel
export SEATUNNEL_HOME=/opt/seatunnel
Configuració del treball a SeaTunnel:
env {
job.mode = 'STREAMING'
job.name = 'DEMO'
parallelism = 3
checkpoint.interval = 30000
checkpoint.timeout = 30000
job.retry.times = 3
job.retry.interval.seconds = 3
}
Configurar un nom de tasca és essencial per administrar treballs en producció. A més, s'estableix un nivell de paral·lelisme de 3, però es pot ajustar segons la mida del clúster.
Configuració de l'origen de dades (MySQL CDC):
source {
MySQL-CDC {
base-url = 'jdbc:mysql://192.168.8.101:3306/test?serverTimezone=Asia/Shanghai'
username = 'test'
password = '123456'
database-names = ['test']
table-pattern = 'test\.test_.*'
startup.mode = 'initial'
snapshot.split.size = '8096'
snapshot.fetch.size = '1024'
server-id = '6500-8500'
exactly_once = false
schema-changes.enabled = true
}
}
Es configura la sincronització tant per a dades històriques com incrementals. Es recomana l'activació de l'evolució d'esquemes per gestionar canvis en l'estructura de les taules.
Configuració del destí (PostgreSQL):
sink {
jdbc {
url = 'jdbc:postgresql://192.168.8.101:5432/test'
driver = 'org.postgresql.Driver'
user = 'postgres'
password = '123456'
generate_sink_sql = true
database = 'test'
table = '${database_name}.${table_name}'
schema_save_mode = 'CREATE_SCHEMA_WHEN_NOT_EXIST'
data_save_mode = 'APPEND_DATA'
}
}
L'opció generate_sink_sql genera automàticament les sentències d'inserció i actualització. També es configura el mode d'emmagatzematge de l'esquema per crear automàticament les taules si no existeixen.
Enviament i monitoratge de tasques:
./bin/start-seatunnel.sh --config /path/to/config.yaml --async
El flag --async permet que la tasca s'executi en segon pla mentre es monitora a través de la interfície de SeaTunnel.
Demostració de sincronització de dades:
Es van provar insercions, actualitzacions i eliminacions a MySQL, i els canvis van ser replicats exitosament a PostgreSQL.
Sobre Apache SeaTunnel:
- Suporta centenars de fonts de dades.
- Gestió de sincronització completa, incremental i en temps real.
- Monitoratge eficaç per evitar pèrdua o duplicació de dades.
A Q2BSTUDIO, una empresa especialitzada en desenvolupament i serveis tecnològics, ajudem a implementar solucions de sincronització de dades per garantir la integritat i eficiència en la gestió de dades en entorns empresarials. Amb experiència en la integració d'Apache SeaTunnel, proporcionem assessoria i desenvolupament d'estratègies personalitzades per optimitzar la transferència de dades entre diverses plataformes, assegurant rendiment i escalabilitat.




