
Je décrirai la réplication croisée entre PostgreSQL et MySQL, ainsi que les méthodes de configuration de la réplication croisée entre les deux serveurs de base de données. En rÚgle générale, les bases de données répliquées de maniÚre croisée sont dites homogÚnes et constituent une méthode pratique pour passer d'un serveur SGBDR à un autre.
Les bases de données PostgreSQL et MySQL sont généralement considérées comme relationnelles, mais avec des extensions supplémentaires, elles offrent des fonctionnalités NoSQL. Ici, nous discuterons de la réplication entre PostgreSQL et MySQL du point de vue d'un SGBD relationnel.
Nous ne décrirons pas tout le fonctionnement interne, juste les principes de base afin que vous ayez une idée de la configuration de la réplication entre serveurs de bases de données, des avantages, des limites et des cas d'utilisation.
GĂ©nĂ©ralement, la rĂ©plication entre deux serveurs de bases de donnĂ©es identiques s'effectue soit en mode binaire, soit Ă l'aide de requĂȘtes entre un maĂźtre (c'est-Ă -dire Ă©diteur, maĂźtre ou actif) et un esclave (abonnĂ©, veille ou passif). Le but de la rĂ©plication est de fournir une copie en temps rĂ©el de la base de donnĂ©es maĂźtre cĂŽtĂ© esclave. Dans ce cas, les donnĂ©es sont transfĂ©rĂ©es du maĂźtre Ă l'esclave, c'est-Ă -dire de l'actif au passif, car la rĂ©plication s'effectue dans un seul sens. Mais vous pouvez configurer la rĂ©plication entre deux bases de donnĂ©es dans les deux sens, afin que les donnĂ©es soient transfĂ©rĂ©es de l'esclave au maĂźtre dans une configuration active-active. Tout cela, y compris la rĂ©plication en cascade, est possible entre deux ou plusieurs serveurs de bases de donnĂ©es identiques. La configuration active-active ou active-passive dĂ©pend des besoins, de la disponibilitĂ© de ces fonctionnalitĂ©s dans la configuration initiale ou de l'utilisation de solutions de configuration externes et des compromis existants.
La configuration dĂ©crite est possible entre diffĂ©rents serveurs de bases de donnĂ©es. Le serveur peut ĂȘtre configurĂ© pour accepter les donnĂ©es rĂ©pliquĂ©es d'un autre serveur de base de donnĂ©es tout en conservant des instantanĂ©s en temps rĂ©el des donnĂ©es rĂ©pliquĂ©es. MySQL et PostgreSQL proposent la plupart de ces configurations en interne ou via des extensions tierces, notamment les mĂ©thodes de journalisation binaire, le verrouillage de disque et les mĂ©thodes basĂ©es sur les instructions et les 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 des protocoles différents, il n'est donc pas possible de les relier directement. Pour établir l'échange de données, vous pouvez utiliser un outil open source externe, par exemple 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 la bibliothÚque open source mysql-replication, également en Python. Les images de lignes sont extraites des tables MySQL et stockées sous forme d'objets JSONB dans la base de données PostgreSQL, puis déchiffrées par la fonction pl/pgsql et reproduites dans la base de données PostgreSQL.
Caractéristiques de pg_chameleon
Plusieurs schĂ©mas MySQL du mĂȘme cluster peuvent ĂȘtre rĂ©pliquĂ©s vers une seule base de donnĂ©es PostgreSQL cible dans une configuration un-Ă -plusieurs.
Les noms des schĂ©mas source et cible ne peuvent pas ĂȘtre identiques.
Les donnĂ©es de rĂ©plication peuvent ĂȘtre rĂ©cupĂ©rĂ©es Ă partir d'une rĂ©plique MySQL en cascade.
Les tables qui ne peuvent pas ĂȘtre rĂ©pliquĂ©es ou qui produisent des erreurs sont exclues.
Chaque fonction de réplication est contrÎlé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.6x86_64
CentOS Linux 7.5x86_64
Version du serveur de base de données
MySQL 5.7.26
PostgreSQL 10.5
Port de 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 pour installer pg_chameleon. Cet exemple installe Python 3.6.8, qui crée et active l'environnement virtuel.
$> 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 avoir installé avec succÚs Python3.6, vous devez remplir les conditions restantes, telles que la création et l'activation d'un environnement virtuel. De plus, le module pip est mis à jour vers la derniÚre version et utilisé pour installer pg_chameleon. Les commandes ci-dessous installent intentionnellement pg_chameleon 2.0.9, bien que la derniÚre version soit la 2.0.10. Ceci 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.9Nous appelons ensuite pg_chameleon (chameleon est une commande) avec l'argument set_configuration_files pour activer pg_chameleon et créer des répertoires et des 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/
copying 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'il devienne le fichier de configuration par défaut. Un exemple de fichier de configuration pour cet exemple est fourni ci-dessous.
$> cat default.yml
---
#global settings
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 allows the user to override the default type conversion into a different one.
type_override:
"tinyint(1)":
override_to: boolean
override_tables:
- "*"
#postgres destination connection
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 #skips inserts on the table delphis_mediterranea.foo
delete:
- delphis_mediterranea #skips deletes on schema delphis_mediterranea
update:Le fichier de configuration dans cet exemple est un exemple de fichier pg_chameleon avec des modifications mineures pour s'adapter aux environnements source et cible, et vous trouverez ci-dessous un aperçu des différentes sections du fichier de configuration.
Dans le fichier de configuration default.yml, il y a une section de paramĂštres globaux, dans laquelle vous pouvez gĂ©rer des paramĂštres tels que l'emplacement du fichier de verrouillage, l'emplacement des journaux, la pĂ©riode de stockage des journaux, etc. Vient ensuite la section de remplacement de type, oĂč un ensemble de rĂšgles pour remplacer les types lors de la rĂ©plication. L'exemple utilise par dĂ©faut une rĂšgle de substitution de type qui convertit 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 pg_conn. Dans la derniĂšre section, nous indiquons les donnĂ©es source, c'est-Ă -dire les paramĂštres de connexion de la base de donnĂ©es source, le schĂ©ma de mappage entre les bases de donnĂ©es source et cible, les tables qui doivent ĂȘtre ignorĂ©es, le temps d'attente, la mĂ©moire, la taille du package. Notez que « sources » est au pluriel, ce qui signifie que nous pouvons ajouter plusieurs bases de donnĂ©es sources Ă une seule base de donnĂ©es cible pour mettre en place une configuration plusieurs-Ă -un.
L'exemple de base de donnĂ©es world_x contient 4 tables avec des lignes que la communautĂ© MySQL propose Ă titre d'exemple. Il peut ĂȘtre tĂ©lĂ©chargĂ© . L'exemple de base de donnĂ©es se prĂ©sente sous la forme d'une archive tar et 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 dispose de droits de lecture supplĂ©mentaires sur 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 acceptera 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 du répertoire de réplication. L'argument create_replica_schema est responsable de la configuration automatique, 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 quelques modifications de paramÚtres pour la préparer à la réplication, comme indiqué ci-dessous. Vous devrez redémarrer le serveur de base de données pour que les modifications 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 afin qu'il n'y ait aucun 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 pg_chameleon (chameleon) suivantes préparent l'environnement, ajoutent la source et initialisent la réplique. L'argument create_replica_schema de pg_chameleon crée un schéma par défaut (sch_chameleon) et un schéma de réplication (pgworld_x) dans la base de données PostgreSQL, comme nous l'avons déjà évoqué. L'argument add_source ajoute une base de données source à la configuration en lisant le fichier de configuration (default.yml), et dans notre cas c'est mysql, et 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 --debugLe rĂ©sultat de ces trois commandes indique clairement quâelles ont Ă©tĂ© exĂ©cutĂ©es avec succĂšs. Tout plantage ou erreur de syntaxe est signalĂ© dans des messages simples et clairs avec des conseils sur la façon de rĂ©soudre le problĂšme.
Enfin, nous démarrons la réplication en utilisant start_replica et recevons un message de réussite.
$> chameleon start_replica --config default --source mysql
output: Starting the replica process for source mysqlL'Ă©tat de la rĂ©plication peut ĂȘtre interrogĂ© Ă l'aide de l'argument show_status et les erreurs peuvent ĂȘtre visualisĂ©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, interrogez 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 la testons pas 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 appelons 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
Sync tables process for source mysql started.Pour confirmer les résultats du test, nous interrogeons la table à partir 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 fin. Les commandes doivent ĂȘtre exĂ©cutĂ©es une fois que nous sommes sĂ»rs que les lignes de toutes les tables cibles ont Ă©tĂ© rĂ©pliquĂ©es, et le rĂ©sultat sera une base de donnĂ©es PostgreSQL soigneusement migrĂ©e sans rĂ©fĂ©rences Ă la base de donnĂ©es source ou au schĂ©ma de rĂ©plication (sch_chameleon).
$> chameleon stop_replica --config default --source mysql
$> chameleon detach_replica --config default --source mysql --debugSi vous le souhaitez, vous pouvez utiliser les commandes suivantes pour supprimer la configuration d'origine et le schéma de réplication.
$> chameleon drop_source --config default --source mysql --debug
$> chameleon drop_replica_schema --config default --source mysql --debugAvantages de pg_chameleon
Installation et configuration faciles.
DĂ©pannez et identifiez facilement les anomalies avec des messages dâerreur clairs.
Des tables spĂ©ciales supplĂ©mentaires peuvent ĂȘtre ajoutĂ©es Ă 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 base de données cible, ce qui est trÚs utile si vous combinez les données d'une ou plusieurs bases de données MySQL dans une seule base de données PostgreSQL.
Vous n'ĂȘtes pas obligĂ© de rĂ©pliquer les tables sĂ©lectionnĂ©es.
Inconvénients de pg_chameleon
Uniquement pris en charge 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.
Réplication unidirectionnelle - uniquement de MySQL vers PostgreSQL. Il ne convient donc que pour le circuit « actif-passif ».
La source ne peut ĂȘtre qu'une base de donnĂ©es MySQL, et la prise en charge d'une base de donnĂ©es PostgreSQL en tant que source est uniquement expĂ©rimentale et avec des limitations (en savoir plus )
Résultats pour 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. L'inconvĂ©nient majeur est que la rĂ©plication n'est qu'unidirectionnelle, de sorte qu'il est peu probable que les professionnels des bases de donnĂ©es veuillent l'utiliser pour autre chose que la migration. Mais le problĂšme de la rĂ©plication unidirectionnelle peut ĂȘtre rĂ©solu avec un autre outil open source : SymmetricDS.
En savoir plus dans la documentation officielle . L'aide en ligne de commande peut ĂȘtre trouvĂ©e .
Présentation de SymmetricDS
SymmetricDS est un outil open source qui rĂ©plique n'importe quelle base de donnĂ©es vers n'importe quelle autre base de donnĂ©es commune : Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird et d'autres instances de bases de donnĂ©es cloud, par exemple Redshift, et Azure, etc. FonctionnalitĂ©s disponibles : synchronisation de bases de donnĂ©es et de fichiers, rĂ©plication de bases de donnĂ©es multi-maĂźtres, synchronisation filtrĂ©e, transformation et autres. Il s'agit d'un outil Java et nĂ©cessite une version standard du JRE ou du JDK (version 8.0 ou supĂ©rieure). Ici, les modifications des donnĂ©es apportĂ©es aux dĂ©clencheurs dans la base de donnĂ©es source peuvent ĂȘtre enregistrĂ©es et envoyĂ©es Ă la base de donnĂ©es cible appropriĂ©e sous forme de lots.
Fonctionnalités SymmetricDS
L'outil est indépendant de la plate-forme, ce qui signifie que deux ou plusieurs bases de données différentes peuvent échanger des données.
Les bases de données relationnelles sont synchronisées à l'aide d'enregistrements de modifications de données, tandis que les bases de données basées sur le systÚme de fichiers utilisent la synchronisation de fichiers.
Réplication bidirectionnelle utilisant les méthodes Push et Pull basées sur un ensemble de rÚgles.
Le transfert de données est possible sur des réseaux sécurisés et à faible bande passante.
RĂ©cupĂ©ration automatique lorsque les nĆuds reprennent leur fonctionnement aprĂšs une panne et rĂ©solution automatique des conflits.
API d'extension puissantes et compatibles avec le cloud.
Exemple
SymmetricDS peut ĂȘtre configurĂ© selon l'une des deux options suivantes :
Un nĆud maĂźtre (parent) qui coordonne de maniĂšre centralisĂ©e la rĂ©plication des donnĂ©es entre deux nĆuds esclaves (enfants), et la communication entre les nĆuds enfants s'effectue uniquement via le parent.
Un nĆud actif (nĆud 1) peut communiquer pour la rĂ©plication avec un autre nĆud actif (nĆud 2) sans intermĂ©diaire.
Dans les deux options, l'Ă©change de donnĂ©es s'effectue via Push et Pull. Dans cet exemple, nous considĂ©rerons une configuration active-active. Il serait trop long de dĂ©crire lâensemble de lâarchitecture, alors faites vos recherches. pour en savoir plus sur le pĂ©riphĂ©rique SymmetricDS.
L'installation de SymmetricDS est trĂšs simple : tĂ©lĂ©chargez la version open source du fichier zip et extrayez-le oĂč vous le souhaitez. Le tableau ci-dessous fournit des dĂ©tails sur l'emplacement d'installation et la version de SymmetricDS dans cet exemple, ainsi que sur les versions de la base de donnĂ©es. Linux, adresses IP et ports pour les deux nĆuds.
HĂŽte
vm1
vm2
version du systĂšme d'exploitation
CentOS Linux 7.6x86_64
CentOS Linux 7.6x86_64
Version du serveur de base de données
MySQL 5.7.26
PostgreSQL 10.5
Port de base de données
3306
5832
Adresse IP
192.168.1.107
192.168.1.112
Version SymmetricDS
SymétriqueDS 3.9
SymétriqueDS 3.9
Chemin d'installation de SymmetricDS
/usr/local/serveur-symétrique-3.9.20
/usr/local/serveur-symétrique-3.9.20
Nom du nĆud SymmetricDS
corp-000
magasin-001
Ici, nous installons SymmetricDS dans /usr/local/symĂ©trique-server-3.9.20, et divers sous-rĂ©pertoires et fichiers y seront stockĂ©s. Nous sommes intĂ©ressĂ©s par les sous-rĂ©pertoires samples et moteurs. Le rĂ©pertoire samples contient des exemples de fichiers de configuration avec des propriĂ©tĂ©s de nĆud, ainsi que des exemples de scripts SQL pour vous permettre de dĂ©marrer rapidement.
Dans le rĂ©pertoire des exemples, nous voyons trois fichiers de configuration avec les propriĂ©tĂ©s du nĆud - le nom indique la nature du nĆud dans un certain schĂ©ma.
corp-000.properties
store-001.properties
store-002.propertiesSymmetricDS dispose de tous les fichiers de configuration nĂ©cessaires pour une conception de base Ă 3 nĆuds (option 1), et les mĂȘmes fichiers peuvent ĂȘtre utilisĂ©s pour une conception Ă 2 nĆuds (option 2). Copiez le fichier de configuration requis du rĂ©pertoire d'exemples vers les moteurs sur l'hĂŽte vm1. Cela se passe comme ceci :
$> 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 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 ci-dessus et les informations de connexion. Nous nous connectons Ă la base de donnĂ©es replica_db et les tables seront créées lors de la crĂ©ation du schĂ©ma. sync.url indique oĂč contacter le nĆud pour la synchronisation.
Le nĆud 2 sur l'hĂŽte vm2 est configurĂ© comme store-001 et le reste est spĂ©cifiĂ© dans le fichier node.properties ci-dessous. Le nĆud store-001 exĂ©cute la base de donnĂ©es PostgreSQL et pgdb_replica est la base de donnĂ©es de rĂ©plication. Registration.url permet Ă l'hĂŽte vm2 de contacter l'hĂŽte vm1 et d'en recevoir 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 SymmetricDS terminĂ© contient des paramĂštres permettant de configurer la rĂ©plication bidirectionnelle entre deux serveurs de base de donnĂ©es (deux nĆuds). Les Ă©tapes ci-dessous sont effectuĂ©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 rĂ©pertoires dans lesquelles les rĂšgles et la direction de rĂ©plication entre les nĆuds seront stockĂ©es. Enfin, des exemples de donnĂ©es sont chargĂ©s dans les tableaux.
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_writing_price sont automatiquement configurĂ©es pour ĂȘtre rĂ©pliquĂ©es du corp-000 au store-001, et les tables de vente (sale_transaction et sale_return_line_item) sont automatiquement configurĂ©es pour ĂȘtre rĂ©pliquĂ©es du store-001 au corp-000. Nous crĂ©ons maintenant un schĂ©ma dans la base de donnĂ©es PostgreSQL sur l'hĂŽte vm2 (store-001) pour le prĂ©parer Ă recevoir les 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 de vĂ©rifier que la base de donnĂ©es MySQL sur vm1 contient des exemples de tables et des tables de catalogue SymmetricDS. Notez que les tables systĂšme SymmetricDS (prĂ©fixĂ©es par sym_) ne sont actuellement disponibles que sur le nĆud corp-000 car c'est lĂ que nous avons exĂ©cutĂ© la commande create-sym-tables et gĂ©rerons la rĂ©plication. Et dans la base de donnĂ©es sur le nĆud store-001, il n'y aura que 4 exemples de tables sans donnĂ©es.
Tous. L'environnement est prĂȘt Ă exĂ©cuter les processus du 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 entrĂ©es du journal sont envoyĂ©es vers un fichier journal en arriĂšre-plan (symĂ©trique.log) dans le dossier des journaux du rĂ©pertoire oĂč SymmetricDS est installĂ©, ainsi que vers la sortie standard. Le serveur sym peut maintenant ĂȘtre lancĂ© sur le nĆud store-001.
vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> sym 2>&1 &Si vous exĂ©cutez le processus du serveur sym sur l'hĂŽte vm2, il crĂ©era Ă©galement des tables de catalogue SymmetricDS dans la base de donnĂ©es PostgreSQL. Si vous exĂ©cutez le processus du serveur sym sur les deux nĆuds, ils se coordonnent pour rĂ©pliquer les donnĂ©es de corp-000 vers store-001. Si aprĂšs quelques secondes nous interrogeons les 4 tables des deux cĂŽtĂ©s, nous verrons que la rĂ©plication a rĂ©ussi. Ou vous pouvez envoyer le bootstrap au nĆud store-001 Ă partir de 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 des Ă©lĂ©ments de la base de donnĂ©es MySQL sur le nĆud corp-000 (hĂŽte : vm1), et vous pouvez vĂ©rifier sa rĂ©plication dans la base de donnĂ©es PostgreSQL sur le nĆud store-001 (hĂŽte : vm2). 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 les données du store-001 vers corp-000, nous insérons un enregistrement dans la table sale_transaction et vérifions que la réplication est réussie.
Nous voyons la configuration réussie de la réplication bidirectionnelle des exemples de tables entre les bases de données MySQL et PostgreSQL. Pour configurer la réplication pour les nouvelles tables utilisateur, procédez comme suit : Nous créons par exemple la table t1 et configurons ses rÚgles de réplication comme suit. De cette façon, 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 est ensuite informĂ©e du changement de schĂ©ma, c'est-Ă -dire de l'ajout d'une nouvelle table, Ă l'aide de la commande symadmin avec l'argument sync-triggers, qui recrĂ©e les dĂ©clencheurs pour mapper les dĂ©finitions de table. send-schema est exĂ©cutĂ© pour envoyer les modifications de 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 faciles, comprenant un ensemble de fichiers prĂȘts Ă l'emploi avec des paramĂštres permettant de crĂ©er un circuit Ă trois ou deux nĆuds.
Bases de données multiplateformes et indépendance des plateformes, y compris les serveurs, les ordinateurs portables et les appareils mobiles.
Répliquez n'importe quelle base de données sur n'importe quelle autre base de données localement, sur le WAN ou dans le cloud.
Possibilité de travail optimal avec quelques bases de données ou plusieurs milliers pour une réplication pratique.
Version payante avec interface graphique et excellent support.
Inconvénients de SymmetricDS
Vous devez dĂ©finir manuellement les rĂšgles et la direction de rĂ©plication sur la ligne de commande via des instructions SQL pour charger les tables de catalogue, ce qui peut s'avĂ©rer gĂȘnant.
La configuration de nombreuses tables pour la réplication peut s'avérer fastidieuse, sauf si vous utilisez des scripts pour créer des instructions SQL définissant les rÚgles et la direction de la réplication.
Il y a trop d'informations enregistrées dans les journaux et vous devez parfois ranger le fichier journal afin qu'il ne prenne pas trop de place.
Résultats pour SymmetricDS
SymmetricDS vous permet de mettre en place une rĂ©plication bidirectionnelle entre deux, trois voire plusieurs milliers de nĆuds pour rĂ©pliquer et synchroniser des fichiers. Il s'agit d'un outil unique qui effectue de maniĂšre indĂ©pendante de nombreuses tĂąches, telles que la rĂ©cupĂ©ration automatique des donnĂ©es aprĂšs une longue pĂ©riode d'indisponibilitĂ© sur un nĆud, l'Ă©change de donnĂ©es sĂ©curisĂ© et efficace entre les nĆuds via HTTPS, la gestion automatique des conflits basĂ©e sur un ensemble de rĂšgles, etc. SymmetricDS effectue la rĂ©plication entre n'importe quelle base de donnĂ©es peut donc ĂȘtre utilisĂ©e pour une grande variĂ©tĂ© de scĂ©narios, notamment la migration, la migration, la distribution, le filtrage et la transformation des donnĂ©es entre plates-formes.
L'exemple est basé sur le fonctionnaire par SymmetricDS. DANS Décrit en détail les différents concepts impliqués dans la configuration de la réplication avec SymmetricDS.
Source: habr.com
