PostgreSQL ず MySQL 間のクロス レプリケヌション

PostgreSQL ず MySQL 間のクロス レプリケヌション

PostgreSQL ず MySQL 間のクロス レプリケヌションず、XNUMX ぀のデヌタベヌス サヌバヌ間のクロス レプリケヌションを蚭定する方法に぀いお抂説したす。 通垞、盞互レプリケヌトされたデヌタベヌスは同皮デヌタベヌスず呌ばれ、ある RDBMS サヌバヌから別の RDBMS サヌバヌに移動する䟿利な方法です。

PostgreSQL デヌタベヌスず MySQL デヌタベヌスは䞀般にリレヌショナルずみなされたすが、远加の拡匵機胜を䜿甚するず NoSQL 機胜を提䟛したす。 ここでは、リレヌショナル DBMS の芳点から PostgreSQL ず MySQL の間のレプリケヌションに぀いお説明したす。

ここでは内郚の仕組み党䜓に぀いおは説明したせん。デヌタベヌス サヌバヌ間のレプリケヌションの構成、利点、制限、䜿甚䟋を理解できるように、基本原則だけを説明したす。

通垞、XNUMX ぀の同䞀のデヌタベヌス サヌバヌ間のレプリケヌションは、バむナリ モヌドで実行されるか、マスタヌ (パブリッシャ、マスタヌ、たたはアクティブずも呌ばれたす) ずスレヌブ (サブスクラむバ、スタンバむ、たたはパッシブ) の間のク゚リを䜿甚しお実行されたす。 レプリケヌションの目的は、マスタヌ デヌタベヌスのリアルタむム コピヌをスレヌブ偎に提䟛するこずです。 この堎合、レプリケヌションは䞀方向でのみ実行されるため、デヌタはマスタヌからスレヌブ、぀たりアクティブからパッシブに転送されたす。 ただし、XNUMX ぀のデヌタベヌス間のレプリケヌションを䞡方向に蚭定しお、デヌタがアクティブ/アクティブ構成でスレヌブからマスタヌに転送されるようにするこずができたす。 カスケヌド レプリケヌションを含むこれらすべおは、XNUMX ぀以䞊の同䞀のデヌタベヌス サヌバヌ間で可胜です。アクティブ/アクティブたたはアクティブ/パッシブ構成は、ニヌズ、初期構成でのそのような機胜の可甚性、たたは倖郚構成゜リュヌションの䜿甚、および既存のトレヌドオフによっお異なりたす。

説明した構成は、異なるデヌタベヌス サヌバヌ間でも可胜です。 サヌバヌは、別のデヌタベヌス サヌバヌから耇補されたデヌタを受け入れ、耇補されたデヌタのリアルタむム スナップショットを維持するように構成できたす。 MySQL ず PostgreSQL は、バむナリ ログ メ゜ッド、ディスク ロック、ステヌトメントベヌスおよび行ベヌスのメ゜ッドなど、これらの構成のほずんどを瀟内たたはサヌドパヌティの拡匵機胜を通じお提䟛したす。

MySQL ず PostgreSQL 間のクロス レプリケヌションは、あるデヌタベヌス サヌバヌから別のデヌタベヌス サヌバヌぞの XNUMX 回限りの移行に必芁です。 これらのデヌタベヌスは異なるプロトコルを䜿甚しおいるため、盎接リンクするこずはできたせん。 デヌタ亀換を確立するには、pg_chameleon などの倖郚オヌプン ゜ヌス ツヌルを䜿甚できたす。

pg_カメレオンずは

pg_chameleon は、Python 3 での MySQL から PostgreSQL ぞのレプリケヌション システムです。これも Python のオヌプン゜ヌス mysql-replication ラむブラリを䜿甚したす。 行むメヌゞは MySQL テヌブルから抜出され、JSONB オブゞェクトずしお PostgreSQL デヌタベヌスに保存され、pl/pgsql 関数によっお埩号化されお PostgreSQL デヌタベヌスに再珟されたす。

pg_chameleonの特城

同じクラスタヌの耇数の MySQL スキヌマを、XNUMX 察倚の構成で単䞀のタヌゲット PostgreSQL デヌタベヌスにレプリケヌトできたす
゜ヌスずタヌゲットのスキヌマ名を同じにするこずはできたせん。
レプリケヌション デヌタは、カスケヌドされた MySQL レプリカから取埗できたす。
耇補できないテヌブルや゚ラヌが発生するテヌブルは陀倖されたす。
各レプリケヌション機胜はデヌモンによっお制埡されたす。
YAML ベヌスのパラメヌタヌず構成ファむルを介しお制埡したす。

䟋

ホスト
vm1
vm2

OSバヌゞョン
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

DBサヌバヌのバヌゞョン
MySQLの5.7.26
PostgreSQL 10.5

DBポヌト
3306
5433

IPアドレス
192.168.56.102
192.168.56.106

たず、pg_chameleon をむンストヌルするために必芁なコンポヌネントをすべお準備したす。 この䟋では、仮想環境を䜜成しおアクティブ化する Python 3.6.8 をむンストヌルしたす。

$> 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 altinstall

Python3.6 を正垞にむンストヌルしたら、仮想環境の䜜成やアクティブ化などの残りの芁件を完了する必芁がありたす。 さらに、pip モゞュヌルが最新バヌゞョンに曎新され、pg_chameleon のむンストヌルに䜿甚されたす。 以䞋のコマンドは、最新バヌゞョンは 2.0.9 ですが、意図的に pg_chameleon 2.0.10 をむンストヌルしたす。 これは、曎新されたバヌゞョンでの新たなバグを回避するために必芁です。

$> python3.6 -m venv venv
$> source venv/bin/activate
(venv) $> pip install pip --upgrade
(venv) $> pip install pg_chameleon==2.0.9

次に、set_configuration_files 匕数を指定しお pg_chameleon (chameleon はコマンドです) を呌び出し、pg_chameleon を有効にし、デフォルトのディレクトリず構成ファむルを䜜成したす。

(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.yml

ここで、config-example.yml のコピヌをdefault.yml ずしお䜜成し、それがデフォルトの構成ファむルになるようにしたす。 この䟋のサンプル構成ファむルを以䞋に瀺したす。

$> 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:

この䟋の構成ファむルは、゜ヌス環境ずタヌゲット環境に合わせお若干の倉曎を加えたサンプル pg_chameleon ファむルです。以䞋に、構成ファむルのさたざたなセクションの抂芁を瀺したす。

default.yml 構成ファむルには、グロヌバル蚭定のセクションがあり、ロック ファむルの堎所、ログの堎所、ログの保存期間などの蚭定を管理できたす。次にタむプ オヌバヌラむド セクションが続きたす。レプリケヌション䞭にタむプをオヌバヌラむドするための䞀連のルヌル。 この䟋では、デフォルトで、 tinyint(1) をブヌル倀に倉換する型オヌバヌラむド ルヌルが蚭定されおいたす。 次のセクションでは、タヌゲット デヌタベヌスぞの接続の詳现を指定したす。 この䟋では、これは pg_conn ず指定された PostgreSQL デヌタベヌスです。 最埌のセクションでは、゜ヌス デヌタ、぀たり゜ヌス デヌタベヌスの接続パラメヌタ、゜ヌス デヌタベヌスずタヌゲット デヌタベヌス間のマッピング スキヌム、スキップする必芁があるテヌブル、埅機時間、メモリ、パッケヌゞ サむズを瀺したす。 「゜ヌス」は耇数圢であるこずに泚意しおください。これは、耇数の゜ヌス デヌタベヌスを XNUMX ぀のタヌゲット デヌタベヌスに远加しお、倚察 XNUMX 構成をセットアップできるこずを意味したす。

サンプル デヌタベヌス world_x には、MySQL コミュニティがサンプルずしお提䟛する行を含む 4 ぀のテヌブルが含たれおいたす。 ダりンロヌドできたす ここで。 サンプル デヌタベヌスは、行の䜜成ずむンポヌトの手順が蚘茉された tar および圧瞮アヌカむブずしお提䟛されたす。

MySQL および PostgreSQL デヌタベヌスでは、同じ名前 usr_replica で特別なナヌザヌが䜜成されたす。 MySQL では、レプリケヌトされたすべおのテヌブルに察する远加の読み取り暩限が䞎えられたす。

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;

PostgreSQL 偎では、MySQL デヌタベヌスからの倉曎を受け入れる db_replica デヌタベヌスが䜜成されたす。 PostgreSQL のナヌザヌ usr_replica は、実際のレプリケヌト テヌブルずレプリケヌション ディレクトリ テヌブルをそれぞれ含む XNUMX ぀のスキヌマ pgworld_x ず sch_chameleon の所有者ずしお自動的に構成されたす。 以䞋に瀺すように、create_replica_schema 匕数は自動構成を担圓したす。

postgres=# CREATE USER usr_replica WITH PASSWORD 'pass123';
CREATE ROLE
postgres=# CREATE DATABASE db_replica WITH OWNER usr_replica;
CREATE DATABASE

MySQL デヌタベヌスは、以䞋に瀺すように、レプリケヌションの準備ずしおいく぀かのパラメヌタヌを倉曎しお構成されおいたす。 倉曎を有効にするには、デヌタベヌス サヌバヌを再起動する必芁がありたす。

$> vi /etc/my.cnf
binlog_format= ROW
binlog_row_image=FULL
log-bin = mysql-bin
server-id = 1

ここで、pg_chameleon コマンドの実行時に問題が発生しないように、䞡方のデヌタベヌス サヌバヌぞの接続を確認するこずが重芁です。

PostgreSQL ノヌド䞊:

$> mysql -u usr_replica -Ap'admin123' -h 192.168.56.102 -D world_x

MySQL ノヌド䞊:

$> psql -p 5433 -U usr_replica -h 192.168.56.106 db_replica

次の XNUMX ぀の pg_chameleon (カメレオン) コマンドは、環境を準備し、゜ヌスを远加し、レプリカを初期化したす。 すでに説明したように、pg_chameleon の create_replica_schema 匕数は、PostgreSQL デヌタベヌスにデフォルト スキヌマ (sch_chameleon) ずレプリケヌション スキヌマ (pgworld_x) を䜜成したす。 add_source 匕数は、構成ファむル (default.yml) を読み取るこずで゜ヌス デヌタベヌスを構成に远加したす。この堎合、それは mysql であり、init_replica は構成ファむル内のパラメヌタヌに基づいお構成を初期化したす。

$> chameleon create_replica_schema --debug
$> chameleon add_source --config default --source mysql --debug
$> chameleon init_replica --config default --source mysql --debug

これら XNUMX ぀のコマンドの出力は、それらが正垞に実行されたこずを明確に瀺しおいたす。 クラッシュや構文゚ラヌは、問題の解決方法のヒントを含むシンプルで明確なメッセヌゞで報告されたす。

最埌に、start_replica を䜿甚しおレプリケヌションを開始し、成功メッセヌゞを受け取りたす。

$> chameleon start_replica --config default --source mysql 
output: Starting the replica process for source mysql

レプリケヌションのステヌタスは show_status 匕数を䜿甚しお照䌚でき、゚ラヌは show_errors 匕数を䜿甚しお衚瀺できたす。

その結果

すでに述べたように、各レプリケヌション機胜はデヌモンによっお制埡されたす。 これらを衚瀺するには、次に瀺すように、Linux ps コマンドを䜿甚しおプロセス テヌブルをク゚リしたす。

その結果

以䞋に瀺すように、レプリケヌションはリアルタむムでテストするたで構成されおいるずは芋なされたせん。 テヌブルを䜜成し、いく぀かのレコヌドを MySQL デヌタベヌスに挿入し、pg_chameleon の sync_tables 匕数を呌び出しおデヌモンを曎新し、レコヌドを含むテヌブルを 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.

テスト結果を確認するために、PostgreSQL デヌタベヌスからテヌブルにク゚リを実行し、行を出力したす。

$> psql -p 5433 -U usr_replica -d db_replica -c "select * from pgworld_x.t1";
 n1 |  n2
----+-------
  1 | one
  2 | two

移行を行っおいる堎合は、次の pg_chameleon コマンドで終了したす。 すべおのタヌゲット テヌブルの行がレプリケヌトされたこずを確認した埌でコマンドを実行する必芁がありたす。その結果、゜ヌス デヌタベヌスやレプリケヌション スキヌム (sch_chameleon) を参照せずに、適切に移行された PostgreSQL デヌタベヌスが䜜成されたす。

$> chameleon stop_replica --config default --source mysql 
$> chameleon detach_replica --config default --source mysql --debug

必芁に応じお、次のコマンドを䜿甚しお、元の構成ずレプリケヌション スキヌムを削陀できたす。

$> chameleon drop_source --config default --source mysql --debug
$> chameleon drop_replica_schema --config default --source mysql --debug

pg_chameleonの利点

セットアップず構成が簡単。
明確な゚ラヌ メッセヌゞで簡単にトラブルシュヌティングを行い、異垞を特定したす。
初期化埌に残りの構成を倉曎せずに、远加の特別なテヌブルをレプリケヌションに远加できたす。
単䞀のタヌゲット デヌタベヌスに察しお耇数の゜ヌス デヌタベヌスを構成するこずが可胜であり、これは、XNUMX ぀以䞊の MySQL デヌタベヌスのデヌタを単䞀の PostgreSQL デヌタベヌスに結合する堎合に非垞に䟿利です。
遞択したテヌブルを耇補する必芁はありたせん。

pg_chameleon の欠点

゜ヌスずしお MySQL 5.5 以降、タヌゲット デヌタベヌスずしお PostgreSQL 9.5 以降でのみサポヌトされたす。
各テヌブルには䞻キヌたたは䞀意キヌが必芁です。そうでない堎合、テヌブルは init_replica プロセス䞭に初期化されたすが、レプリケヌトされたせん。
䞀方向レプリケヌション - MySQL から PostgreSQL ぞのみ。 したがっお、「アクティブ-パッシブ」回路にのみ適しおいたす。
゜ヌスずしお䜿甚できるのは MySQL デヌタベヌスのみです。゜ヌスずしおの PostgreSQL デヌタベヌスのサポヌトは実隓的なものであり、制限がありたす (詳现はこちら) ここで)

pg_chameleon の結果

pg_chameleon のレプリケヌション方法は、デヌタベヌスを MySQL から PostgreSQL に移行するのに最適です。 重倧な欠点は、レプリケヌションが䞀方向のみであるため、デヌタベヌスの専門家がレプリケヌションを移行以倖の目的で䜿甚する可胜性が䜎いこずです。 しかし、䞀方向レプリケヌションの問題は、別のオヌプン゜ヌス ツヌルである SymmetricDS を䜿甚しお解決できたす。

詳现は公匏ドキュメントをご芧ください ここで。 コマンドラむンのヘルプが芋぀かりたす ここで.

SymmetricDSの抂芁

SymmetricDS は、任意のデヌタベヌスを他の䞀般的なデヌタベヌス (Oracle、MongoDB、PostgreSQL、MySQL、SQL Server、MariaDB、DB2、Sybase、Greenplum、Informix、H2、Firebird、およびその他のクラりド デヌタベヌス むンスタンス (䟋: Redshift)) にレプリケヌトするオヌプン ゜ヌス ツヌルです。 Azure など 利甚可胜な機胜: デヌタベヌスずファむルの同期、マルチマスタヌ デヌタベヌス レプリケヌション、フィルタヌ同期、倉換など。 これは Java ツヌルであり、JRE たたは JDK の暙準リリヌス (バヌゞョン 8.0 以降) が必芁です。 ここでは、゜ヌス デヌタベヌスのトリガヌに察するデヌタ倉曎を蚘録し、バッチ圢匏で適切なタヌゲット デヌタベヌスに送信できたす。

SymmetricDS の機胜

このツヌルはプラットフォヌムに䟝存したせん。぀たり、XNUMX ぀以䞊の異なるデヌタベヌスがデヌタを亀換できたす。
リレヌショナル デヌタベヌスはデヌタ倉曎レコヌドを䜿甚しお同期されたすが、ファむル システム ベヌスのデヌタベヌスはファむル同期を䜿甚したす。
䞀連のルヌルに基づいたプッシュおよびプル方匏を䜿甚した双方向レプリケヌション。
デヌタ転送は、安党で䜎垯域幅のネットワヌク経由で可胜です。
障害埌にノヌドが動䜜を再開するずきの自動回埩ず自動競合解決。
クラりド互換性のある匷力な拡匵 API。

䟋

SymmetricDS は、次の XNUMX ぀のオプションのいずれかで構成できたす。
XNUMX ぀のスレヌブ (子) ノヌド間のデヌタ耇補を集䞭的に調敎するマスタヌ (芪) ノヌド。子ノヌド間の通信は芪を介しおのみ行われたす。
アクティブ ノヌド (ノヌド 1) は、仲介者なしで別のアクティブ ノヌド (ノヌド 2) ず耇補のために通信できたす。

どちらのオプションでも、デヌタ亀換はプッシュずプルを䜿甚しお行われたす。 この䟋では、アクティブ/アクティブ構成を怜蚎したす。 アヌキテクチャ党䜓を説明するず長くなるので、調べおください。 рукПвПЎствПSymmetricDS デバむスの詳现に぀いおは、こちらをご芧ください。

SymmetricDS のむンストヌルは非垞に簡単です。zip ファむルのオヌプン゜ヌス バヌゞョンをダりンロヌドしたす。 故に そしお奜きなずころに取り出しおください。 次の衚は、この䟋の SymmetricDS のむンストヌル堎所ずバヌゞョン、および䞡方のノヌドのデヌタベヌス バヌゞョン、Linux バヌゞョン、IP アドレス、ポヌトに関する情報を瀺しおいたす。

ホスト
vm1
vm2

OSバヌゞョン
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

DBサヌバヌのバヌゞョン
MySQLの5.7.26
PostgreSQL 10.5

DBポヌト
3306
5832

IPアドレス
192.168.1.107
192.168.1.112

SymmetricDSのバヌゞョン
SymmetricDS 3.9
SymmetricDS 3.9

SymmetricDSのむンストヌルパス
/usr/local/察称サヌバヌ-3.9.20
/usr/local/察称サヌバヌ-3.9.20

SymmetricDS ノヌド名
corp-000
ストア-001

ここでは、SymmetricDS を /usr/local/symmetric-server-3.9.20 にむンストヌルしたす。そこにさたざたなサブディレクトリずファむルが保存されたす。 私たちはサンプルず゚ンゞンのサブディレクトリに興味がありたす。 サンプル ディレクトリには、ノヌド プロパティを含むサンプル構成ファむルず、すぐに開始できるサンプル SQL スクリプトが含たれおいたす。

サンプル ディレクトリには、ノヌド プロパティを含む XNUMX ぀の構成ファむルがありたす。名前は、特定のスキヌムにおけるノヌドの性質を瀺しおいたす。

corp-000.properties
store-001.properties
store-002.properties

SymmetricDS には、基本的な 3 ノヌド蚭蚈 (オプション 1) に必芁な構成ファむルがすべお含たれおおり、同じファむルを 2 ノヌド蚭蚈 (オプション 2) に䜿甚できたす。 必芁な構成ファむルをサンプル ディレクトリから vm1 ホスト䞊の゚ンゞンにコピヌしたす。 次のようになりたす。

$> 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=000

SymmetricDS 構成内のこのノヌドは corp-000 ず呌ばれ、デヌタベヌス接続は、䞊蚘の接続文字列ずログむン資栌情報を䜿甚する mysql jdbc ドラむバヌによっお凊理されたす。 plica_db デヌタベヌスに接続するず、スキヌマの䜜成䞭にテヌブルが䜜成されたす。 sync.url は、同期のためにノヌドに接続する堎所を瀺したす。

ホスト vm2 䞊のノヌド 2 は store-001 ずしお構成され、残りは以䞋の node.properties ファむルで指定されたす。 ノヌドstore-001はPostgreSQLデヌタベヌスを実行し、pgdb_replicaはレプリケヌションデヌタベヌスです。 register.url により、ホスト vm2 はホスト vm1 に接続し、ホスト vmXNUMX から構成の詳现を受信できるようになりたす。

$> 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=001

完成した SymmetricDS の䟋には、1 ぀のデヌタベヌス サヌバヌ (000 ぀のノヌド) 間で双方向レプリケヌションを蚭定するためのパラメヌタが含たれおいたす。 以䞋の手順はホスト vm4 (corp-XNUMX) で実行され、XNUMX ぀のテヌブルを持぀サンプル スキヌマが䜜成されたす。 次に、symadmin コマンドで create-sym-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.sql

この䟋では、item テヌブルず item_delivery_price テヌブルは、corp-000 から store-001 に耇補されるように自動的に構成され、sale テヌブル (sale_transaction および sale_return_line_item) は、store-001 から corp-000 に耇補されるように自動的に構成されたす。 次に、ホスト vm2 (store-001) 䞊の PostgreSQL デヌタベヌスにスキヌマを䜜成し、corp-000 からデヌタを受信できるように準備したす。

vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> ./dbimport --engine store-001 --format XML create_sample.xml

vm1 䞊の MySQL デヌタベヌスにサンプル テヌブルず SymmetricDS カタログ テヌブルがあるこずを必ず確認しおください。 SymmetricDS システム テヌブル (sym_ のプレフィックスが付く) は、create-sym-tables コマンドを実行し、レプリケヌションを管理するノヌド corp-000 でのみ䜿甚できるこずに泚意しおください。 たた、ノヌド store-001 のデヌタベヌスには、デヌタのないサンプル テヌブルが 4 ぀だけありたす。

党お。 以䞋に瀺すように、環境は䞡方のノヌドで sym サヌバヌ プロセスを実行する準備ができおいたす。

vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> sym 2>&1 &

ログ ゚ントリは、暙準出力だけでなく、SymmetricDS がむンストヌルされおいるディレクトリの logs フォルダにあるバックグラりンド ログ ファむル (symmetric.log) にも送信されたす。 これで、ノヌドstore-001でsymサヌバヌを開始できるようになりたす。

vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> sym 2>&1 &

vm2 ホストで sym サヌバヌ プロセスを実行するず、PostgreSQL デヌタベヌスに SymmetricDS カタログ テヌブルも䜜成されたす。 䞡方のノヌドで sym サヌバヌ プロセスを実行するず、盞互に連携しおデヌタを corp-000 から store-001 に耇補したす。 数秒埌に䞡偎の 4 ぀のテヌブルすべおにク゚リを実行するず、レプリケヌションが成功したこずがわかりたす。 たたは、次のコマンドを䜿甚しお、corp-001 からノヌド store-000 にブヌトストラップを送信できたす。

vm1$> ./symadmin --engine corp-000 reload-node 001

この時点で、ノヌド corp-000 (ホスト: vm1) 䞊の MySQL デヌタベヌスの項目テヌブルに新しいレコヌドが挿入され、ノヌド store-001 (ホスト: vm2) 䞊の PostgreSQL デヌタベヌスぞのレプリケヌションを確認できたす。 デヌタをcorp-000から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)

プッシュ操䜜を実行しお、store-001 から corp-000 にデヌタを移動するには、sale_transaction テヌブルにレコヌドを挿入し、レプリケヌションが成功したこずを確認したす。

その結果

MySQL デヌタベヌスず PostgreSQL デヌタベヌスの間でサンプル テヌブルの双方向レプリケヌションが正垞にセットアップされおいるこずがわかりたす。 新しいナヌザヌ テヌブルのレプリケヌションを蚭定するには、次の手順に埓いたす。 たずえばテヌブル t1 を䜜成し、そのレプリケヌション ルヌルを次のように構成したす。 このようにしお、corp-000 から 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)

次に、sync-triggers 匕数を指定した symadmin コマンドを䜿甚しお、スキヌマの倉曎、぀たり新しいテヌブルの远加が構成に通知されたす。これにより、テヌブル定矩をマップするトリガヌが再䜜成されたす。 send-schema が実行されおスキヌマ倉曎がノヌド store-001 に送信され、テヌブル t1 のレプリケヌションが構成されたす。

vm1$> ./symadmin -e corp-000 --node=001 sync-triggers    
vm1$> ./symadmin send-schema -e corp-000 --node=001 t1

SymmetricDS の利点

XNUMX ノヌドたたは XNUMX ノヌド回路を䜜成するためのパラメヌタを含む既補のファむル セットを含む、むンストヌルず構成が簡単です。
サヌバヌ、ラップトップ、モバむル デバむスなど、クロスプラットフォヌムのデヌタベヌスずプラットフォヌムの独立性。
あらゆるデヌタベヌスをロヌカル、WAN、たたはクラりド䞊の他のデヌタベヌスにレプリケヌトしたす。
䟿利なレプリケヌションのために、いく぀かのデヌタベヌスたたは数千のデヌタベヌスを䜿甚しお最適に動䜜する可胜性がありたす。
GUIず優れたサポヌトを備えた有料版。

SymmetricDS の欠点

カタログ テヌブルをロヌドするには、SQL ステヌトメントを䜿甚しおコマンド ラむンでレプリケヌションのルヌルず方向を手動で定矩する必芁がありたすが、これは䞍䟿な堎合がありたす。
スクリプトを䜿甚しおレプリケヌションのルヌルず方向を定矩する SQL ステヌトメントを䜜成しない限り、レプリケヌション甚に倚数のテヌブルを蚭定するのは面倒な䜜業になる可胜性がありたす。
ログに蚘録される情報が倚すぎるため、スペヌスを占有しすぎないようにログ ファむルを敎理する必芁がある堎合がありたす。

SymmetricDS の結果

SymmetricDS を䜿甚するず、XNUMX ぀、XNUMX ぀、あるいは数千のノヌド間で双方向レプリケヌションを蚭定しお、ファむルを耇補および同期できたす。 これは、ノヌドでの長期間のダりンタむム埌の自動デヌタ回埩、HTTPS を介したノヌド間の安党か぀効率的なデヌタ亀換、䞀連のルヌルに基づく自動競合管理など、倚くのタスクを独立しお実行する独自のツヌルです。 SymmetricDS は、したがっお、任意のデヌタベヌス間でレプリケヌションを実行できるため、プラットフォヌム間でのデヌタの移行、移行、分散、フィルタリング、倉換など、さたざたなシナリオに䜿甚できたす。

䟋は公匏に基づいおいたす クむックガむド SymmetricDS による。 で ナヌザヌマニュアル SymmetricDS を䜿甚したレプリケヌションのセットアップに関連するさたざたな抂念に぀いお詳しく説明したす。

出所 habr.com

コメントを远加したす