
Je vais vous parler en général de la réplication croisée entre PostgreSQL et MySQL, ainsi que des méthodes de configuration de cette réplication entre ces deux serveurs de base de données. Les bases de données en réplication croisée sont généralement appelées homogÚnes, et c'est une méthode pratique pour migrer d'un serveur de SGBDR à un autre.
Les bases de données PostgreSQL et MySQL sont traditionnellement considérées comme relationnelles, mais avec des extensions supplémentaires, elles offrent également des possibilités NoSQL. Ici, nous allons discuter de la réplication entre PostgreSQL et MySQL, du point de vue des SGBDR.
Nous ne décrirons pas l'ensemble de l'architecture interne, juste les principes de base, afin que vous ayez une idée de la configuration de la réplication entre les serveurs de base de données, des avantages, des limitations et des scénarios d'utilisation.
En gĂ©nĂ©ral, la rĂ©plication entre deux serveurs de base de donnĂ©es identiques s'effectue soit en mode binaire, soit par des requĂȘtes entre le nĆud principal (aussi appelĂ© Ă©diteur, maĂźtre ou actif) et l'Ă©gal (abonnĂ©, en attente ou passif). L'objectif de la rĂ©plication est de fournir en temps rĂ©el une copie de la base de donnĂ©es principale sur le cĂŽtĂ© de l'Ă©gal. Les donnĂ©es sont ainsi transfĂ©rĂ©es du principal vers l'Ă©gal, c'est-Ă -dire de l'actif vers le passif, car la rĂ©plication ne se fait que dans un sens. Toutefois, il est possible de configurer une rĂ©plication entre deux bases de donnĂ©es dans les deux sens, permettant le transfert de donnĂ©es de l'Ă©gal vers le principal dans une configuration « actif-actif ». Tout cela, y compris la rĂ©plication en cascade, est possible entre deux serveurs de base de donnĂ©es identiques ou plus. La configuration « actif-actif » ou « actif-passif » dĂ©pend des besoins, de la disponibilitĂ© de ces fonctionnalitĂ©s dans la configuration d'origine ou de l'utilisation de solutions externes pour la configuration et des compromis existants.
La configuration dĂ©crite est possible entre diffĂ©rents serveurs de base de donnĂ©es. Un serveur peut ĂȘtre configurĂ© pour recevoir des donnĂ©es rĂ©pliquĂ©es d'un autre serveur de base de donnĂ©es tout en sauvegardant des instantanĂ©s des donnĂ©es rĂ©pliquĂ©es en temps rĂ©el. MySQL et PostgreSQL proposent la plupart de ces configurations, soit par leurs propres moyens, soit par le biais d'extensions tierces, y compris des mĂ©thodes de journal binaire, de verrouillage de disque et des mĂ©thodes basĂ©es sur des opĂ©rateurs et des lignes.
La réplication croisée entre MySQL et PostgreSQL est nécessaire pour une migration unique d'un serveur de base de données à un autre. Ces bases de données utilisent différents protocoles, il n'est donc pas possible de les relier directement. Pour établir un échange de données, vous pouvez utiliser un outil open source externe, comme pg_chameleon.
Qu'est-ce que pg_chameleon
pg_chameleon est un systÚme de réplication de MySQL vers PostgreSQL en Python 3. Il utilise une bibliothÚque open source mysql-replication, également en Python. Les images de lignes sont extraites des tables MySQL et enregistrées en tant qu'objets JSONB dans la base de données PostgreSQL, puis décodées par une fonction pl/pgsql et reproduites dans la base de données PostgreSQL.
Fonctionnalités de pg_chameleon
Plusieurs schĂ©mas MySQL d'un mĂȘme cluster peuvent ĂȘtre rĂ©pliquĂ©s dans une seule base de donnĂ©es cible PostgreSQL avec une configuration « un Ă plusieurs »
Les noms des schémas source et cible ne peuvent pas coïncider.
Les donnĂ©es de rĂ©plication peuvent ĂȘtre extraites d'une rĂ©plique en cascade MySQL.
Les tables qui ne peuvent pas ĂȘtre rĂ©pliquĂ©es ou qui gĂ©nĂšrent des erreurs sont exclues.
Chaque fonction de réplication est gérée par des démons.
ContrÎle via des paramÚtres et des fichiers de configuration basés sur YAML.
Exemple
HĂŽte
vm1
vm2
Version du systĂšme d'exploitation
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64
Version du serveur de base de données
MySQL 5.7.26
PostgreSQL 10.5
Port de la base de données
3306
5433
Adresse IP
192.168.56.102
192.168.56.106
Pour commencer, préparez tous les composants nécessaires à l'installation de pg_chameleon. Dans cet exemple, Python 3.6.8 est installé, créant un environnement virtuel et l'activant.
$> wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
$> tar -xJf Python-3.6.8.tar.xz
$> cd Python-3.6.8
$> ./configure --enable-optimizations
$> make altinstallAprĂšs l'installation rĂ©ussie de Python 3.6, vous devez remplir les autres exigences, comme crĂ©er et activer un environnement virtuel. De plus, le module pip est mis Ă jour vers la derniĂšre version et utilisĂ© pour installer pg_chameleon. Dans les commandes ci-dessous, nous choisissons intentionnellement d'installer pg_chameleon 2.0.9, mĂȘme si la version la plus rĂ©cente est 2.0.10. Cela est nĂ©cessaire pour Ă©viter de nouveaux bugs dans la version mise Ă jour.
$> python3.6 -m venv venv
$> source venv/bin/activate
(venv) $> pip install pip --upgrade
(venv) $> pip install pg_chameleon==2.0.9Ensuite, nous invoquons pg_chameleon (chameleon est la commande) avec l'argument set_configuration_files pour activer pg_chameleon et créer les répertoires et fichiers de configuration par défaut.
(venv) $> chameleon set_configuration_files
creating directory /root/.pg_chameleon
creating directory /root/.pg_chameleon/configuration/
creating directory /root/.pg_chameleon/logs/
creating directory /root/.pg_chameleon/pid/
coping configuration example in /root/.pg_chameleon/configuration//config-example.ymlNous créons maintenant une copie de config-example.yml en tant que default.yml, afin qu'elle devienne le fichier de configuration par défaut. Un exemple de fichier de configuration pour cet exemple est donné ci-dessous.
$> cat default.yml
---
#paramĂštres globaux
pid_dir: '~/.pg_chameleon/pid/'
log_dir: '~/.pg_chameleon/logs/'
log_dest: file
log_level: info
log_days_keep: 10
rollbar_key: ''
rollbar_env: ''
# type_override permet à l'utilisateur de remplacer la conversion de type par défaut par une autre.
type_override:
"tinyint(1)":
override_to: boolean
override_tables:
- "*"
# connexion de destination postgres
pg_conn:
host: "192.168.56.106"
port: "5433"
user: "usr_replica"
password: "pass123"
database: "db_replica"
charset: "utf8"
sources:
mysql:
db_conn:
host: "192.168.56.102"
port: "3306"
user: "usr_replica"
password: "pass123"
charset: 'utf8'
connect_timeout: 10
schema_mappings:
world_x: pgworld_x
limit_tables:
# - delphis_mediterranea.foo
skip_tables:
# - delphis_mediterranea.bar
grant_select_to:
- usr_readonly
lock_timeout: "120s"
my_server_id: 100
replica_batch_size: 10000
replay_max_rows: 10000
batch_retention: '1 day'
copy_max_memory: "300M"
copy_mode: 'file'
out_dir: /tmp
sleep_loop: 1
on_error_replay: continue
on_error_read: continue
auto_maintenance: "disabled"
gtid_enable: No
type: mysql
skip_events:
insert:
- delphis_mediterranea.foo #ignore les insertions dans la table delphis_mediterranea.foo
delete:
- delphis_mediterranea #ignore les suppressions dans le schéma delphis_mediterranea
update:Le fichier de configuration dans cet exemple est un modÚle de fichier pg_chameleon avec des modifications mineures en fonction des environnements source et cible, et ci-dessous se trouve un aperçu des différentes sections du fichier de configuration.
Le fichier de configuration default.yml contient une section de paramĂštres globaux (global settings), oĂč vous pouvez gĂ©rer des rĂ©glages tels que l'emplacement du fichier de verrouillage, l'emplacement des journaux, la pĂ©riode de conservation des journaux, etc. Ensuite, il y a une section de remplacement de type (type override), oĂč un ensemble de rĂšgles pour le remplacement des types pendant la rĂ©plication est spĂ©cifiĂ©. Dans l'exemple par dĂ©faut, une rĂšgle de remplacement de type est utilisĂ©e pour convertir tinyint(1) en une valeur boolĂ©enne. Dans la section suivante, nous spĂ©cifions les dĂ©tails de connexion Ă la base de donnĂ©es cible. Dans notre cas, il s'agit d'une base de donnĂ©es PostgreSQL, dĂ©signĂ©e par pg_conn. Dans la derniĂšre section, nous indiquons les donnĂ©es sources, c'est-Ă -dire les paramĂštres de connexion Ă la base de donnĂ©es source, le schĂ©ma de correspondance entre les bases de donnĂ©es source et cible, les tables Ă ignorer, le dĂ©lai d'attente, la mĂ©moire, la taille des lots. Notez que « sources » est prĂ©cisĂ© au pluriel, indiquant que nous pouvons ajouter plusieurs bases de donnĂ©es sources pour une seule cible afin de configurer une configuration « plusieurs Ă un ».
La base de donnĂ©es world_x dans l'exemple contient 4 tables avec des lignes que la communautĂ© MySQL propose Ă titre d'exemple. Elle peut ĂȘtre tĂ©lĂ©chargĂ©e. . L'exemple de base de donnĂ©es est fourni sous forme d'archive tar compressĂ©e avec des instructions pour crĂ©er et importer des lignes.
Dans les bases de donnĂ©es MySQL et PostgreSQL, un utilisateur spĂ©cial est créé avec le mĂȘme nom usr_replica. Dans MySQL, il reçoit des droits supplĂ©mentaires pour lire toutes les tables rĂ©pliquĂ©es.
mysql> CREATE USER usr_replica ;
mysql> SET PASSWORD FOR usr_replica='pass123';
mysql> GRANT ALL ON world_x.* TO 'usr_replica';
mysql> GRANT RELOAD ON *.* to 'usr_replica';
mysql> GRANT REPLICATION CLIENT ON *.* to 'usr_replica';
mysql> GRANT REPLICATION SLAVE ON *.* to 'usr_replica';
mysql> FLUSH PRIVILEGES;Du cÎté de PostgreSQL, une base de données db_replica est créée, qui accueillera les modifications de la base de données MySQL. L'utilisateur usr_replica dans PostgreSQL est automatiquement configuré comme propriétaire de deux schémas pgworld_x et sch_chameleon, qui contiennent respectivement les tables répliquées réelles et les tables de catalogues de réplication. La configuration automatique est gérée par l'argument create_replica_schema, comme vous le verrez ci-dessous.
postgres=# CREATE USER usr_replica WITH PASSWORD 'pass123';
CREATE ROLE
postgres=# CREATE DATABASE db_replica WITH OWNER usr_replica;
CREATE DATABASELa base de données MySQL est configurée avec des modifications de certains paramÚtres pour la préparer à la réplication, comme montré ci-dessous. Il sera nécessaire de redémarrer le serveur de base de données pour que les changements prennent effet.
$> vi /etc/my.cnf
binlog_format= ROW
binlog_row_image=FULL
log-bin = mysql-bin
server-id = 1Il est maintenant important de vérifier la connexion aux deux serveurs de base de données pour éviter tout problÚme lors de l'exécution des commandes pg_chameleon.
Sur le nĆud PostgreSQL :
$> mysql -u usr_replica -Ap'admin123' -h 192.168.56.102 -D world_xSur le nĆud MySQL :
$> psql -p 5433 -U usr_replica -h 192.168.56.106 db_replicaLes trois commandes suivantes de pg_chameleon (chameleon) préparent l'environnement, ajoutent la source et initialisent la réplique. L'argument create_replica_schema dans pg_chameleon crée le schéma par défaut (sch_chameleon) et le schéma de réplication (pgworld_x) dans la base de données PostgreSQL, comme nous l'avons déjà mentionné. L'argument add_source ajoute la base de données source à la configuration en lisant le fichier de configuration (default.yml), et dans notre cas, c'est mysql, tandis que init_replica initialise la configuration en fonction des paramÚtres du fichier de configuration.
$> chameleon create_replica_schema --debug
$> chameleon add_source --config default --source mysql --debug
$> chameleon init_replica --config default --source mysql --debugLes sorties de ces trois commandes indiquent clairement leur exécution réussie. Tous les dysfonctionnements ou erreurs de syntaxe sont signalés par des messages simples et compréhensibles, accompagnés de conseils pour corriger les problÚmes.
Enfin, lançons la réplication en utilisant start_replica et recevons un message de succÚs.
$> chameleon start_replica --config default --source mysql
output: DĂ©marrage du processus de rĂ©plication pour la source mysqlLe statut de la rĂ©plication peut ĂȘtre interrogĂ© Ă l'aide de l'argument show_status, et les erreurs peuvent ĂȘtre consultĂ©es Ă l'aide de l'argument show_errors.
Comme nous l'avons déjà mentionné, chaque fonction de réplication est gérée par des démons. Pour les visualiser, interrogeons la table des processus avec la commande Linux ps, comme indiqué ci-dessous.
La réplication n'est pas considérée comme configurée tant que nous ne l'avons pas testée en temps réel, comme indiqué ci-dessous. Nous créons une table, insérons quelques enregistrements dans la base de données MySQL et activons l'argument sync_tables dans pg_chameleon pour mettre à jour les démons et répliquer la table avec les enregistrements dans la base de données PostgreSQL.
mysql> create table t1 (n1 int primary key, n2 varchar(10));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values (1,'one');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values (2,'two');
Query OK, 1 row affected (0.00 sec)$> chameleon sync_tables --tables world_x.t1 --config default --source mysql
Processus de synchronisation des tables pour la source mysql démarré.Pour confirmer les résultats du test, interrogeons la table de la base de données PostgreSQL et affichons les lignes.
$> psql -p 5433 -U usr_replica -d db_replica -c "select * from pgworld_x.t1";
n1 | n2
----+-------
1 | one
2 | twoSi nous effectuons une migration, les commandes pg_chameleon suivantes en seront la conclusion. Les commandes doivent ĂȘtre exĂ©cutĂ©es aprĂšs que nous nous soyons assurĂ©s que les lignes de toutes les tables cibles ont Ă©tĂ© rĂ©pliquĂ©es, le rĂ©sultat Ă©tant une base de donnĂ©es PostgreSQL soigneusement transfĂ©rĂ©e sans liens vers la base de donnĂ©es source ou le schĂ©ma de rĂ©plication (sch_chameleon).
$> chameleon stop_replica --config default --source mysql
$> chameleon detach_replica --config default --source mysql --debugFacultativement, les commandes suivantes peuvent ĂȘtre utilisĂ©es pour supprimer la configuration source et le schĂ©ma de rĂ©plication.
$> chameleon drop_source --config default --source mysql --debug
$> chameleon drop_replica_schema --config default --source mysql --debugLes avantages de pg_chameleon
Configuration et paramétrage simples.
Dépannage et identification des anomalies faciles avec des messages d'erreur clairs.
Il est possible d'ajouter des tables spéciales supplémentaires à la réplication aprÚs l'initialisation, sans modifier le reste de la configuration.
Il est possible de configurer plusieurs bases de données sources pour une seule cible, ce qui est trÚs pratique si vous combinez des données provenant d'une ou plusieurs bases de données MySQL dans une seule base de données PostgreSQL.
Il est possible de ne pas répliquer les tables sélectionnées.
Inconvénients de pg_chameleon
Il est supporté uniquement avec MySQL 5.5 et supérieur comme source et PostgreSQL 9.5 et supérieur comme base de données cible.
Chaque table doit avoir une clé primaire ou unique, sinon les tables sont initialisées lors du processus init_replica, mais ne sont pas répliquées.
La rĂ©plication unidirectionnelle â uniquement de MySQL vers PostgreSQL. Elle convient donc uniquement au schĂ©ma « actif-passif ».
La source ne peut ĂȘtre qu'une base de donnĂ©es MySQL, et le support de la base de donnĂ©es PostgreSQL comme source est seulement expĂ©rimental et avec des contraintes (en savoir plus )
Résumé sur pg_chameleon
La mĂ©thode de rĂ©plication dans pg_chameleon est idĂ©ale pour migrer une base de donnĂ©es de MySQL vers PostgreSQL. Le principal inconvĂ©nient est que la rĂ©plication est uniquement unidirectionnelle, donc les experts en bases de donnĂ©es ne voudront probablement l'utiliser que pour des migrations. Mais le problĂšme de la rĂ©plication unidirectionnelle peut ĂȘtre rĂ©solu par un autre outil open source : SymmetricDS.
Pour plus de détails, consultez la documentation officielle . L'aide en ligne pour la ligne de commande est disponible .
Aperçu de SymmetricDS
SymmetricDS est un outil open source qui réplique n'importe quelle base de données vers une autre base de données courante : Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird et d'autres instances cloud de bases de données, comme Redshift et Azure, etc. Les fonctionnalités disponibles : synchronisation de bases de données et de fichiers, réplication de plusieurs bases de données sources, synchronisation filtrée, transformation, et autres. C'est un outil basé sur Java, nécessitant une version standard de JRE ou JDK (version 8.0 ou supérieure). Il est possible d'enregistrer les modifications des données par des déclencheurs dans la base de données source et de les diriger vers la base de données cible correspondante sous forme de paquets.
Fonctionnalités de SymmetricDS
L'outil est indépendant de la plateforme, ce qui signifie que deux bases de données différentes ou plus peuvent échanger des données.
Les bases de données relationnelles sont synchronisées par l'enregistrement des modifications de données, tandis que les bases de données basées sur des systÚmes de fichiers utilisent la synchronisation de fichiers.
Réplication bidirectionnelle en utilisant des méthodes Push et Pull basées sur un ensemble de rÚgles.
Le transfert de données est possible via des réseaux sécurisés et des réseaux à faible bande passante.
RĂ©cupĂ©ration automatique lors de la reprise des nĆuds aprĂšs une panne et rĂ©solution automatique des conflits.
Compatibilité avec le cloud et API d'extension efficaces.
Exemple
SymmetricDS peut ĂȘtre configurĂ© dans l'un des deux modes :
Un nĆud principal (parent) qui coordonne de maniĂšre centralisĂ©e la rĂ©plication des donnĂ©es entre deux nĆuds secondaires (enfant), et les Ă©changes de donnĂ©es entre les nĆuds enfants se font uniquement par l'intermĂ©diaire du parent.
Un nĆud actif (nĆud 1) peut Ă©changer des donnĂ©es pour la rĂ©plication avec un autre nĆud actif (nĆud 2) sans intermĂ©diaire.
Dans les deux cas, l'échange de données se fait via Push et Pull. Dans cet exemple, nous allons examiner la configuration « actif-actif ». Décrire toute l'architecture prend trop de temps, donc consultez , pour en savoir plus sur le dispositif SymmetricDS.
Installer SymmetricDS est trĂšs simple : tĂ©lĂ©chargez la version open source du fichier zip et dĂ©compressez-le oĂč vous le souhaitez. Le tableau ci-dessous fournit des informations sur l'emplacement de l'installation et la version de SymmetricDS dans cet exemple, ainsi que les versions des bases de donnĂ©es, les versions Linux, les adresses IP et les ports pour les deux nĆuds.
HĂŽte
vm1
vm2
Version du systĂšme d'exploitation
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64
Version du serveur de base de données
MySQL 5.7.26
PostgreSQL 10.5
Port de la base de données
3306
5832
Adresse IP
192.168.1.107
192.168.1.112
Version de SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9
Chemin d'installation de SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20
Nom du nĆud SymmetricDS
corp-000
store-001
Ici, nous installons SymmetricDS dans /usr/local/symmetric-server-3.9.20, et diffĂ©rents sous-rĂ©pertoires et fichiers seront stockĂ©s ici. Nous nous intĂ©ressons aux sous-rĂ©pertoires samples et engines. Le rĂ©pertoire samples contient des exemples de fichiers de configuration avec les propriĂ©tĂ©s du nĆud, ainsi que des exemples de scripts SQL pour un dĂ©marrage rapide de la dĂ©monstration.
Dans le rĂ©pertoire samples, nous voyons trois fichiers de configuration avec les propriĂ©tĂ©s du nĆud â le nom indique la nature du nĆud dans un schĂ©ma donnĂ©.
corp-000.properties
store-001.properties
store-002.propertiesSymmetricDS contient tous les fichiers de configuration nĂ©cessaires pour un schĂ©ma de base de 3 nĆuds (option 1), et ces mĂȘmes fichiers peuvent ĂȘtre utilisĂ©s pour un schĂ©ma de 2 nĆuds (option 2). Nous copions le fichier de configuration nĂ©cessaire du rĂ©pertoire samples dans engines sur l'hĂŽte vm1. Cela donne :
$> cat engines/corp-000.properties
engine.name=corp-000
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://192.168.1.107:3306/replica_db?autoReconnect=true&useSSL=false
db.user=root
db.password=admin123
registration.url=
sync.url=http://192.168.1.107:31415/sync/corp-000
group.id=corp
external.id=000Ce nĆud dans la configuration de SymmetricDS s'appelle corp-000, et la connexion Ă la base de donnĂ©es est gĂ©rĂ©e par le pilote mysql jdbc, qui utilise la chaĂźne de connexion indiquĂ©e ci-dessus et les identifiants de connexion. Nous nous connectons Ă la base de donnĂ©es replica_db, et lors de la crĂ©ation du schĂ©ma, des tables seront créées. sync.url indique l'emplacement de liaison avec le nĆud pour la synchronisation.
Le nĆud 2 sur l'hĂŽte vm2 est configurĂ© comme store-001, et le reste est indiquĂ© dans le fichier node.properties ci-dessous. Le nĆud store-001 exĂ©cute une base de donnĂ©es PostgreSQL, et pgdb_replica est la base de donnĂ©es pour la rĂ©plication. registration.url permet Ă l'hĂŽte vm2 de contacter l'hĂŽte vm1 et d'obtenir les dĂ©tails de configuration.
$> cat engines/store-001.properties
engine.name=store-001
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://192.168.1.112:5832/pgdb_replica
db.user=postgres
db.password=admin123
registration.url=http://192.168.1.107:31415/sync/corp-000
group.id=store
external.id=001L'exemple de SymmetricDS comprend des paramĂštres pour configurer une rĂ©plication bidirectionnelle entre deux serveurs de base de donnĂ©es (deux nĆuds). Les Ă©tapes ci-dessous sont exĂ©cutĂ©es sur l'hĂŽte vm1 (corp-000), qui crĂ©era un exemple de schĂ©ma avec 4 tables. Ensuite, l'exĂ©cution de create-sym-tables avec la commande symadmin crĂ©e des tables de catalogues oĂč seront stockĂ©es les rĂšgles et la direction de rĂ©plication entre les nĆuds. Enfin, des donnĂ©es d'exemple sont chargĂ©es dans les tables.
vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> ./dbimport --engine corp-000 --format XML create_sample.xml
vm1$> ./symadmin --engine corp-000 create-sym-tables
vm1$> ./dbimport --engine corp-000 insert_sample.sqlDans l'exemple, les tables item et item_selling_price sont configurées automatiquement pour la réplication de corp-000 vers store-001, tandis que les tables sale (sale_transaction et sale_return_line_item) sont automatiquement configurées pour la réplication de store-001 vers corp-000. Nous créons maintenant le schéma dans la base de données PostgreSQL sur l'hÎte vm2 (store-001) pour le préparer à recevoir des données de corp-000.
vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> ./dbimport --engine store-001 --format XML create_sample.xmlAssurez-vous qu'il y a des exemples de tables et des tables de catalogues SymmetricDS dans la base de donnĂ©es MySQL sur vm1. Notez que les tables systĂšme de SymmetricDS (avec le prĂ©fixe sym_) sont actuellement disponibles uniquement sur le nĆud corp-000, car c'est lĂ que nous avons exĂ©cutĂ© la commande create-sym-tables et que nous allons gĂ©rer la rĂ©plication. En outre, la base de donnĂ©es sur le nĆud store-001 n'aura que 4 tables d'exemple sans donnĂ©es.
C'est tout. L'environnement est prĂȘt pour le lancement des processus serveur sym sur les deux nĆuds, comme indiquĂ© ci-dessous.
vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> sym 2>&1 &Les enregistrements des journaux sont envoyĂ©s dans le fichier de journal en arriĂšre-plan (symmetric.log) dans le dossier des journaux du rĂ©pertoire oĂč SymmetricDS est installĂ©, ainsi que dans la sortie standard. Le serveur sym peut maintenant ĂȘtre initiĂ© sur le nĆud store-001.
vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> sym 2>&1 &Si vous lancez le processus serveur sym sur l'hĂŽte vm2, il crĂ©era Ă©galement des tables de rĂ©pertoire SymmetricDS dans la base de donnĂ©es PostgreSQL. Si vous lancez le processus serveur sym sur les deux nĆuds, ils se coordonneront pour rĂ©pliquer les donnĂ©es de corp-000 vers store-001. Si, aprĂšs quelques secondes, nous demandons les 4 tables de chaque cĂŽtĂ©, nous verrons que la rĂ©plication a Ă©tĂ© effectuĂ©e avec succĂšs. Ou vous pouvez envoyer un chargement initial vers le nĆud store-001 depuis corp-000 avec la commande suivante.
vm1$> ./symadmin --engine corp-000 reload-node 001Ă ce stade, un nouvel enregistrement est insĂ©rĂ© dans la table item de la base de donnĂ©es MySQL sur le nĆud corp-000 (hĂŽte : vm1), et nous pouvons vĂ©rifier sa rĂ©plication dans la base de donnĂ©es PostgreSQL sur le nĆud store-001. Nous voyons une opĂ©ration Pull pour dĂ©placer les donnĂ©es de corp-000 vers store-001.
mysql> insert into item values ('22000002','Jelly Bean');
Query OK, 1 row affected (0.00 sec)vm2$> psql -p 5832 -U postgres pgdb_replica -c "select * from item"
item_id | name
----------+-----------
11000001 | Yummy Gum
22000002 | Jelly Bean
(2 rows)Pour effectuer une opération Push pour déplacer des données de store-001 vers corp-000, nous insérons un enregistrement dans la table sale_transaction et vérifions que la réplication a été effectuée.
Nous voyons la configuration réussie de la réplication bidirectionnelle des tables d'exemple entre les bases de données MySQL et PostgreSQL. Pour configurer la réplication pour de nouvelles tables utilisateur, nous effectuons les étapes suivantes. Nous créons la table t1 à titre d'exemple et configurons les rÚgles de sa réplication comme suit. Ainsi, nous configurons uniquement la réplication de corp-000 vers store-001.
mysql> create table t1 (no integer);
Query OK, 0 rows affected (0.01 sec)mysql> insert into sym_channel (channel_id,create_time,last_update_time)
values ('t1',current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)mysql> insert into sym_trigger (trigger_id, source_table_name,channel_id,
last_update_time, create_time) values ('t1', 't1', 't1', current_timestamp,
current_timestamp);
Query OK, 1 row affected (0.01 sec)mysql> insert into sym_trigger_router (trigger_id, router_id,
Initial_load_order, create_time,last_update_time) values ('t1',
'corp-2-store-1', 1, current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)La configuration reçoit une notification de modification du schĂ©ma, c'est-Ă -dire l'ajout d'une nouvelle table, Ă l'aide de la commande symadmin avec l'argument sync-triggers, qui recrĂ©e les dĂ©clencheurs pour faire correspondre les dĂ©finitions des tables. L'envoi du schĂ©ma est exĂ©cutĂ© pour transmettre les modifications du schĂ©ma au nĆud store-001, et la rĂ©plication de la table t1 est configurĂ©e.
vm1$> .\/symadmin -e corp-000 --node=001 sync-triggers
vm1$> .\/symadmin send-schema -e corp-000 --node=001 t1Avantages de SymmetricDS
Installation et configuration simples, y compris un ensemble de fichiers prĂȘts Ă l'emploi avec des paramĂštres pour crĂ©er un schĂ©ma avec trois ou deux nĆuds.
Cross-plateforme des bases de données et indépendance par rapport à la plateforme, y compris serveurs, ordinateurs portables et appareils mobiles.
Réplication de n'importe quelle base de données dans n'importe quelle autre base de données localement, dans un WAN ou dans le cloud.
Possibilité de fonctionnement optimal avec une paire de bases de données ou plusieurs milliers pour une réplication facile.
Version payante avec interface graphique et excellent support.
Inconvénients de SymmetricDS
Il est nĂ©cessaire de dĂ©finir manuellement dans la ligne de commande les rĂšgles et la direction de la rĂ©plication Ă travers des opĂ©rateurs SQL pour charger les tables de catalogue, ce qui peut ĂȘtre peu pratique.
Configurer de nombreuses tables pour la rĂ©plication peut ĂȘtre fastidieux si on n'utilise pas de scripts pour crĂ©er des opĂ©rateurs SQL dĂ©finissant les rĂšgles et la direction de la rĂ©plication.
Trop d'informations sont enregistrées dans les logs, et parfois il faut faire le tri dans le fichier log pour qu'il ne prenne pas trop de place.
Résumé sur SymmetricDS
SymmetricDS permet de configurer une rĂ©plication bidirectionnelle entre deux, trois et mĂȘme plusieurs milliers de nĆuds pour effectuer la rĂ©plication et synchroniser des fichiers. C'est un outil unique qui exĂ©cute de nombreuses tĂąches de maniĂšre autonome, telles que la rĂ©cupĂ©ration automatique des donnĂ©es aprĂšs une longue pĂ©riode d'inactivitĂ© sur un nĆud, un Ă©change de donnĂ©es sĂ©curisĂ© et efficace entre les nĆuds via HTTPS, une gestion automatique des conflits basĂ©e sur un ensemble de rĂšgles, etc. SymmetricDS rĂ©alise la rĂ©plication entre toutes les bases de donnĂ©es, ce qui permet de l'utiliser pour divers scĂ©narios, y compris la migration, la mise Ă niveau, la distribution, le filtrage et la transformation des donnĂ©es sur diffĂ©rentes plateformes.
L'exemple est basé sur le de SymmetricDS. Dans Les différents concepts liés à la configuration de la réplication à l'aide de SymmetricDS sont décrits en détail.
Source : habr.com
