MariaDBでMultisource Replicationをやるときは、
- GTIDベース
- 通常ベース(ファイル/ポジション)
によって、制約が異なる。
GTIDベースでは、
レプリケーション元のgtid_domain_idが異なっていなければならない。
通常ベースでは、
レプリケーション元のgtid_domain_idが同じでも良い。
つまり、GTIDベースでは、以下のようなケースにおいては、
db01とdb02のgtid_domain_idは異る必要がある。
+++++ +++++ db01 db02 +++++ +++++ | | | | ++++++++++++++++++++ multisource ++++++++++++++++++++
しかし、通常ベースでは、gtid_domain_idが同じでもよい。
これは、gtid_domain_idを指定できないAWSのRDS環境のおいても、
Multisource Replicationが使えることを意味している。
つまり、db01とdb02がRDSで、multisourceがEC2という位置付けになる。
※RDS上にmultisourceは組めません。
さらに、MariaDBの嬉しい機能として、
コネクションごとに、replicate_do_dbやらreplicate_igonore_dbが指定できる。
たとえば、db01へのコネクション名を「con-db01」、db02へのコネクション名を「con-db02」とすると、
以下のような設定をmultisource側のmy.cnfに記載できる。
con-db01.replicate_do_db=hoge01 con-db02.replicate_do_db=hoge02
この設定の意味するところは、「con-db01」ではhoge01データベースをレプリケーションの対象とする、
「con-db02」ではhoge02データベースをレプリケーションの対象とする、ということである。
このような機能を使うことで、
分割されたDBからデータをかき集め、
様々な集計/分析を行うことが容易となる。
さらに、MariaDB10.2からはwindow関数も導入されているため、
Multisource Replicationによる恩恵もおおきくなるだろう。
※MariaDB10.2と10.3では使えるwindow関数が異なるので注意。
なお、GTIDを使う場合、以下のように、2つのGTIDを指定する。
gtid_domain_idが10はdb01、20はdb02を指している。
> stop all slaves; > SET GLOBAL gtid_slave_pos='10-11-10,20-21-10'; > CHANGE MASTER 'con-db01' TO MASTER_HOST='XXX', MASTER_USER='rpl', MASTER_PASSWORD='rplpassword', master_use_gtid=slave_pos; > CHANGE MASTER 'con-db02' TO MASTER_HOST='YYY', MASTER_USER='rpl', MASTER_PASSWORD='rplpassword', master_use_gtid=slave_pos; > start all slaves;
以上