PostgreSQL ve MySQL arasında çapraz çoğaltma

PostgreSQL ve MySQL arasında çapraz çoğaltma

PostgreSQL ve MySQL arasındaki çapraz çoğaltmanın yanı sıra iki veritabanı sunucusu arasında çapraz çoğaltmayı ayarlama yöntemlerini ana hatlarıyla anlatacağım. Tipik olarak, çapraz çoğaltılmış veritabanlarına homojen denir ve bu, bir RDBMS sunucusundan diğerine geçmenin uygun bir yöntemidir.

PostgreSQL ve MySQL veritabanları genellikle ilişkisel olarak kabul edilir, ancak ek uzantılarla NoSQL yetenekleri sunarlar. Burada PostgreSQL ve MySQL arasındaki replikasyonu ilişkisel DBMS perspektifinden tartışacağız.

Veritabanı sunucuları arasındaki çoğaltmayı, avantajları, sınırlamaları ve kullanım durumlarını yapılandırma konusunda fikir sahibi olmanız için tüm iç işleyişi açıklamayacağız, yalnızca temel ilkeleri açıklamayacağız.

Tipik olarak, iki özdeş veritabanı sunucusu arasındaki çoğaltma, ikili modda veya bir ana (yayıncı, ana veya aktif olarak da bilinir) ve bir yardımcı (abone, yedek veya pasif) arasındaki sorgular kullanılarak yapılır. Çoğaltma işleminin amacı, ana veritabanının köle tarafında gerçek zamanlı bir kopyasını sağlamaktır. Bu durumda replikasyon sadece tek yönde yapıldığından veri master'danslave'ye yani aktiften pasife aktarılır. Ancak iki veritabanı arasında her iki yönde çoğaltmayı ayarlayabilirsiniz, böylece veriler aktif-aktif bir konfigürasyonda bağımlıdan ana bilgisayara aktarılır. Basamaklı çoğaltma da dahil olmak üzere tüm bunlar, iki veya daha fazla özdeş veritabanı sunucusu arasında mümkündür. Aktif-aktif veya aktif-pasif konfigürasyon, ihtiyaca, bu tür yeteneklerin ilk konfigürasyonda kullanılabilirliğine veya harici konfigürasyon çözümlerinin kullanımına ve mevcut değiş tokuşlara bağlıdır.

Açıklanan konfigürasyon farklı veritabanı sunucuları arasında mümkündür. Sunucu, başka bir veritabanı sunucusundan çoğaltılan verileri kabul edecek ve yine de çoğaltılan verilerin gerçek zamanlı anlık görüntülerini tutacak şekilde yapılandırılabilir. MySQL ve PostgreSQL, ikili günlük yöntemleri, disk kilitleme ve ifade ve satır tabanlı yöntemler de dahil olmak üzere bu yapılandırmaların çoğunu şirket içinde veya üçüncü taraf uzantılar aracılığıyla sunar.

Bir veritabanı sunucusundan diğerine tek seferlik geçiş için MySQL ile PostgreSQL arasında çapraz çoğaltma gerekir. Bu veritabanları farklı protokoller kullandığından bunları doğrudan birbirine bağlamak mümkün değildir. Veri alışverişini sağlamak için harici bir açık kaynak aracı kullanabilirsiniz, örneğin pg_chameleon.

pg_chameleon nedir

pg_chameleon, Python 3'te MySQL'den PostgreSQL'e bir kopyalama sistemidir. Python'da da açık kaynaklı mysql çoğaltma kitaplığını kullanır. Satır görüntüleri MySQL tablolarından çıkarılır ve PostgreSQL veritabanında JSONB nesneleri olarak saklanır ve ardından pl/pgsql işlevi tarafından şifresi çözülür ve PostgreSQL veritabanında çoğaltılır.

pg_chameleon'un özellikleri

Aynı kümedeki birden çok MySQL şeması, bire çok yapılandırmada tek bir hedef PostgreSQL veritabanına kopyalanabilir
Kaynak ve hedef şema adları aynı olamaz.
Çoğaltma verileri basamaklı bir MySQL kopyasından alınabilir.
Tekrarlanamayan veya hata üretemeyen tablolar hariç tutulur.
Her çoğaltma işlevi arka plan programları tarafından kontrol edilir.
YAML tabanlı parametreler ve yapılandırma dosyaları aracılığıyla kontrol.

Örnek

Ev sahibi
vm1
vm2

OS sürümü
CentOS Linux 7.6x86_64
CentOS Linux 7.5x86_64

Veritabanı sunucusu sürümü
MySQL 5.7.26
PostgreSQL 10.5

Veritabanı bağlantı noktası
3306
5433

IP Adresi
192.168.56.102
192.168.56.106

Başlamak için pg_chameleon'u kurmak için gerekli tüm bileşenleri hazırlayın. Bu örnek, sanal ortamı oluşturup etkinleştiren Python 3.6.8'i yükler.

$> 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'yı başarıyla yükledikten sonra sanal ortam oluşturma ve etkinleştirme gibi geri kalan gereksinimleri tamamlamanız gerekir. Ayrıca pip modülü en son sürüme güncellenir ve pg_chameleon'u yüklemek için kullanılır. Aşağıdaki komutlar, en son sürüm 2.0.9 olmasına rağmen kasıtlı olarak pg_chameleon 2.0.10'u yükler. Güncellenmiş sürümde yeni hataları önlemek için bu gereklidir.

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

Daha sonra pg_chameleon'u etkinleştirmek ve varsayılan dizinleri ve yapılandırma dosyalarını oluşturmak için set_configuration_files argümanıyla pg_chameleon'u (bukalemun bir komuttur) çağırırız.

(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

Şimdi config-example.yml dosyasının bir kopyasını default.yml olarak oluşturuyoruz, böylece varsayılan yapılandırma dosyası haline geliyor. Bu örnek için örnek bir yapılandırma dosyası aşağıda verilmiştir.

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

Bu örnekteki yapılandırma dosyası, kaynak ve hedef ortamlara uyacak şekilde küçük değişiklikler içeren örnek bir pg_chameleon dosyasıdır ve aşağıda, yapılandırma dosyasının farklı bölümlerine genel bir bakış yer almaktadır.

default.yml yapılandırma dosyasında, kilit dosyasının konumu, günlüklerin konumu, günlüklerin saklama süresi vb. gibi ayarları yönetebileceğiniz bir genel ayarlar bölümü vardır. Daha sonra tür geçersiz kılma bölümü gelir; burada çoğaltma sırasında türleri geçersiz kılmak için bir dizi kural. Örnekte varsayılan olarak, Tinyint(1)'i bir boolean değerine dönüştüren bir tür geçersiz kılma kuralı bulunmaktadır. Bir sonraki bölümde hedef veritabanına bağlantı detaylarını belirtiyoruz. Bizim durumumuzda bu, pg_conn olarak adlandırılan bir PostgreSQL veritabanıdır. Son bölümde kaynak veriyi yani kaynak veritabanının bağlantı parametrelerini, kaynak ve hedef veritabanları arasındaki eşleme şemasını, atlanması gereken tabloları, bekleme süresini, belleği, paket boyutunu belirtiyoruz. "Kaynakların" çoğul olduğunu unutmayın; bu, çoktan bire bir yapılandırma oluşturmak için tek bir hedef veritabanına birden fazla kaynak veritabanı ekleyebileceğimiz anlamına gelir.

Örnek veritabanı world_x, MySQL topluluğunun örnek olarak sunduğu satırları içeren 4 tablo içerir. İndirilebilir burada. Örnek veritabanı, satır oluşturma ve içe aktarma talimatlarını içeren bir tar ve sıkıştırılmış arşiv olarak gelir.

MySQL ve PostgreSQL veritabanlarında usr_replica adıyla aynı isimde özel bir kullanıcı oluşturulur. MySQL'de çoğaltılan tüm tablolara ek okuma hakları verilir.

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 tarafında MySQL veritabanından gelen değişiklikleri kabul edecek bir db_replica veritabanı oluşturulur. PostgreSQL'deki usr_replica kullanıcısı, sırasıyla gerçek çoğaltılmış tabloları ve çoğaltma dizini tablolarını içeren iki şemanın (pgworld_x ve sch_chameleon) sahibi olarak otomatik olarak yapılandırılır. Create_replica_schema argümanı aşağıda göreceğiniz gibi otomatik konfigürasyondan sorumludur.

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

MySQL veritabanı aşağıda gösterildiği gibi çoğaltmaya hazırlamak için bazı parametre değişiklikleriyle yapılandırılmıştır. Değişikliklerin etkili olması için veritabanı sunucusunu yeniden başlatmanız gerekecektir.

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

Artık pg_chameleon komutlarını çalıştırırken herhangi bir sorun yaşanmaması için her iki veritabanı sunucusuna olan bağlantıyı kontrol etmek önemlidir.

PostgreSQL düğümünde:

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

MySQL düğümünde:

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

Sonraki üç pg_chameleon (bukalemun) komutu ortamı hazırlar, kaynağı ekler ve kopyayı başlatır. pg_chameleon'a yönelik create_replica_schema argümanı, daha önce tartıştığımız gibi, PostgreSQL veritabanında varsayılan bir şema (sch_chameleon) ve bir çoğaltma şeması (pgworld_x) oluşturur. add_source argümanı, konfigürasyon dosyasını (default.yml) okuyarak konfigürasyona bir kaynak veritabanı ekler ve bizim durumumuzda bu mysql'dir ve init_replica, konfigürasyon dosyasındaki parametrelere göre konfigürasyonu başlatır.

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

Bu üç komutun çıktısı, bunların başarıyla yürütüldüğünü açıkça gösterir. Herhangi bir çökme veya sözdizimi hatası, sorunun nasıl çözüleceğine dair ipuçları içeren basit ve anlaşılır mesajlarla bildirilir.

Son olarak start_replica kullanarak replikasyona başlıyoruz ve başarı mesajı alıyoruz.

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

Çoğaltma durumu show_status bağımsız değişkeni kullanılarak sorgulanabilir ve hatalar show_errors bağımsız değişkeni kullanılarak görüntülenebilir.

Sonuç.

Daha önce de söylediğimiz gibi, her çoğaltma işlevi daemonlar tarafından kontrol edilir. Bunları görüntülemek için aşağıda gösterildiği gibi işlem tablosunu Linux ps komutuyla sorguluyoruz.

Sonuç.

Aşağıda gösterildiği gibi, gerçek zamanlı olarak test edilene kadar çoğaltma yapılandırılmış sayılmaz. Bir tablo oluşturuyoruz, MySQL veritabanına birkaç kayıt ekliyoruz ve arka plan programlarını güncellemek ve tabloyu kayıtlarla birlikte PostgreSQL veritabanına kopyalamak için pg_chameleon'da sink_tables argümanını çağırıyoruz.

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.

Test sonuçlarını onaylamak için PostgreSQL veritabanından tabloyu sorguluyor ve satırların çıktısını alıyoruz.

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

Eğer bir geçiş yapıyorsak aşağıdaki pg_chameleon komutları bu işin sonu olacaktır. Tüm hedef tabloların satırlarının kopyalandığından emin olduktan sonra komutların yürütülmesi gerekir ve sonuç, kaynak veritabanına veya çoğaltma şemasına (sch_chameleon) referanslar olmadan düzgün bir şekilde taşınmış bir PostgreSQL veritabanı olacaktır.

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

İstenirse orijinal konfigürasyon ve replikasyon şemasını silmek için aşağıdaki komutları kullanabilirsiniz.

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

pg_chameleon'un avantajları

Kolay kurulum ve konfigürasyon.
Anlaşılır hata mesajlarıyla anormallikleri kolayca giderin ve tanımlayın.
Yapılandırmanın geri kalanını değiştirmeden, başlatma sonrasında çoğaltmaya ek özel tablolar eklenebilir.
Tek bir hedef veritabanı için birden fazla kaynak veritabanını yapılandırmak mümkündür ve bir veya daha fazla MySQL veritabanındaki verileri tek bir PostgreSQL veritabanında birleştiriyorsanız bu çok kullanışlıdır.
Seçilen tabloları çoğaltmanıza gerek yoktur.

pg_chameleon'un dezavantajları

Kaynak olarak yalnızca MySQL 5.5 ve üzeri, hedef veritabanı olarak PostgreSQL 9.5 ve üzeri desteklenir.
Her tablonun birincil veya benzersiz bir anahtarı olmalıdır, aksi takdirde tablolar init_replica işlemi sırasında başlatılır ancak çoğaltılmaz.
Tek yönlü çoğaltma - yalnızca MySQL'den PostgreSQL'e. Bu nedenle sadece “aktif-pasif” devre için uygundur.
Kaynak yalnızca bir MySQL veritabanı olabilir ve kaynak olarak PostgreSQL veritabanı desteği yalnızca deneyseldir ve sınırlamalara sahiptir (daha fazla bilgi edinin) burada)

pg_chameleon için sonuçlar

pg_chameleon'daki çoğaltma yöntemi, bir veritabanını MySQL'den PostgreSQL'e taşımak için mükemmeldir. Önemli dezavantajı, çoğaltmanın yalnızca tek yönlü olmasıdır, bu nedenle veritabanı profesyonellerinin bunu geçiş dışında herhangi bir amaçla kullanmak istemesi pek olası değildir. Ancak tek yönlü çoğaltma sorunu başka bir açık kaynaklı araç olan SymmetricDS ile çözülebilir.

Daha fazlasını resmi belgelerde okuyun burada. Komut satırı yardımı bulunabilir burada.

SymmetricDS'e Genel Bakış

SymmetricDS, herhangi bir veritabanını diğer herhangi bir ortak veritabanına kopyalayan açık kaynaklı bir araçtır: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird ve Redshift gibi diğer bulut veritabanı örnekleri ve Azure, vb. Mevcut özellikler: veritabanı ve dosya senkronizasyonu, çoklu ana veritabanı çoğaltma, filtrelenmiş senkronizasyon, dönüşüm ve diğerleri. Bu bir Java aracıdır ve JRE veya JDK'nın standart bir sürümünü (sürüm 8.0 veya üstü) gerektirir. Burada, kaynak veritabanındaki tetikleyicilere yapılan veri değişiklikleri kaydedilebilir ve uygun hedef veritabanına toplu olarak gönderilebilir.

SimetrikDS özellikleri

Araç platformdan bağımsızdır; yani iki veya daha fazla farklı veritabanı veri alışverişinde bulunabilir.
İlişkisel veritabanları veri değişiklik kayıtları kullanılarak senkronize edilirken, dosya sistemi tabanlı veritabanları dosya senkronizasyonunu kullanır.
Bir dizi kurala dayalı olarak İtme ve Çekme yöntemlerini kullanan iki yönlü çoğaltma.
Güvenli ve düşük bant genişliğine sahip ağlar üzerinden veri aktarımı mümkündür.
Bir arızadan sonra düğümler çalışmaya devam ettiğinde otomatik kurtarma ve otomatik çakışma çözümü.
Bulut uyumlu ve güçlü uzantı API'leri.

Örnek

SymmetricDS iki seçenekten biriyle yapılandırılabilir:
İki köle (alt) düğüm arasındaki veri çoğaltmasını merkezi olarak koordine eden bir ana (ana) düğüm ve alt düğümler arasındaki iletişim yalnızca üst öğe aracılığıyla gerçekleşir.
Aktif bir düğüm (Düğüm 1), bir aracı olmaksızın başka bir aktif düğümle (Düğüm 2) çoğaltma için iletişim kurabilir.

Her iki seçenekte de veri alışverişi İtme ve Çekme kullanılarak gerçekleşir. Bu örnekte aktif-aktif konfigürasyonu ele alacağız. Tüm mimariyi anlatmak çok uzun sürer, araştırmanız da öyle. liderlikSymmetricDS cihazı hakkında daha fazla bilgi edinmek için.

SymmetricDS'i kurmak çok basittir: zip dosyasının açık kaynak sürümünü indirin bundan dolayı ve onu istediğin yere çıkar. Aşağıdaki tablo, bu örnekte SymmetricDS'nin kurulum konumu ve sürümünün yanı sıra her iki düğüm için veritabanı sürümleri, Linux sürümleri, IP adresleri ve bağlantı noktaları hakkında bilgi sağlar.

Ev sahibi
vm1
vm2

OS sürümü
CentOS Linux 7.6x86_64
CentOS Linux 7.6x86_64

Veritabanı sunucusu sürümü
MySQL 5.7.26
PostgreSQL 10.5

Veritabanı bağlantı noktası
3306
5832

IP Adresi
192.168.1.107
192.168.1.112

SimetrikDS sürümü
SimetrikDS 3.9
SimetrikDS 3.9

SymmetricDS kurulum yolu
/usr/local/simetrik-sunucu-3.9.20
/usr/local/simetrik-sunucu-3.9.20

SimetrikDS düğüm adı
şirket-000
mağaza-001

Burada SymmetricDS'yi /usr/local/simetrik-server-3.9.20 dizinine kuruyoruz ve çeşitli alt dizinler ve dosyalar burada saklanacak. Örnekler ve motorlar alt dizinleriyle ilgileniyoruz. Örnekler dizini, hızlı bir şekilde başlamanıza yardımcı olacak örnek SQL komut dosyalarının yanı sıra, düğüm özelliklerine sahip örnek yapılandırma dosyalarını içerir.

Örnekler dizininde düğüm özelliklerine sahip üç yapılandırma dosyası görüyoruz - ad, düğümün doğasını belirli bir şemada gösterir.

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

SymmetricDS, temel 3 düğümlü tasarım için gerekli tüm konfigürasyon dosyalarına sahiptir (seçenek 1) ve aynı dosyalar 2 düğümlü tasarım için kullanılabilir (seçenek 2). Gerekli yapılandırma dosyasını sample dizininden vm1 ana bilgisayarındaki motorlara kopyalayın. Şöyle çıkıyor:

$> 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 yapılandırmasındaki bu düğüme corp-000 adı verilir ve veritabanı bağlantısı, yukarıdaki bağlantı dizesini ve oturum açma kimlik bilgilerini kullanan mysql jdbc sürücüsü tarafından yönetilir. replika_db veritabanına bağlanıyoruz ve şema oluşturma sırasında tablolar oluşturulacak. sink.url, senkronizasyon için düğümle nerede iletişime geçileceğini gösterir.

Host vm2 üzerindeki Node 2, Store-001 olarak yapılandırılmıştır ve geri kalanı aşağıdaki node.properties dosyasında belirtilmiştir. Düğüm deposu-001, PostgreSQL veritabanını çalıştırır ve pgdb_replica, çoğaltma veritabanıdır. kayıt.url, ana makine vm2'nin ana makine vm1 ile iletişim kurmasına ve ondan yapılandırma ayrıntılarını almasına olanak tanır.

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

Tamamlanan SymmetricDS örneği, iki veritabanı sunucusu (iki düğüm) arasında iki yönlü çoğaltmayı ayarlamak için parametreler içerir. Aşağıdaki adımlar, 1 tablolu örnek bir şema oluşturacak olan host vm000 (corp-4) üzerinde gerçekleştirilir. Daha sonra create-sym-tables'ı symadmin komutuyla çalıştırmak, düğümler arasındaki çoğaltma kurallarının ve yönünün depolanacağı dizin tabloları oluşturur. Son olarak örnek veriler tablolara yüklenir.

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

Örnekte, item ve item_selling_price tabloları otomatik olarak corp-000'den mağaza-001'e çoğaltılacak şekilde yapılandırılır ve satış tabloları (sale_transaction ve sale_return_line_item) otomatik olarak mağaza-001'den corp-000'e çoğaltılacak şekilde yapılandırılır. Şimdi, corp-2'den veri almaya hazırlamak için Host vm001'deki (store-000) PostgreSQL veritabanında bir şema oluşturuyoruz.

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

VM1'deki MySQL veritabanının örnek tablolara ve SymmetricDS katalog tablolarına sahip olduğundan emin olun. SymmetricDS sistem tablolarının (sym_ önekiyle birlikte) şu anda yalnızca corp-000 düğümünde mevcut olduğunu unutmayın, çünkü burası create-sym-tables komutunu çalıştırdığımız ve çoğaltmayı yöneteceğimiz yer. Ve mağaza-001 düğümündeki veritabanında veri içermeyen yalnızca 4 örnek tablo olacaktır.

Tüm. Ortam, aşağıda gösterildiği gibi her iki düğümde de sym sunucusu işlemlerini çalıştırmaya hazırdır.

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

Günlük girişleri, standart çıktının yanı sıra SymmetricDS'nin kurulu olduğu dizindeki logs klasöründeki bir arka plan günlük dosyasına (simetrik.log) gönderilir. Sym sunucusu artık mağaza-001 düğümünde başlatılabilir.

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

Sym sunucusu işlemini vm2 ana bilgisayarında çalıştırırsanız PostgreSQL veritabanında da SymmetricDS katalog tabloları oluşturulacaktır. Sym sunucusu işlemini her iki düğümde de çalıştırırsanız, verileri corp-000'den mağaza-001'e kopyalamak için birbirleriyle koordine olurlar. Birkaç saniye sonra her iki taraftaki 4 tabloyu da sorgularsak çoğaltmanın başarılı olduğunu göreceğiz. Veya aşağıdaki komutla önyüklemeyi corp-001'den mağaza-000 düğümüne gönderebilirsiniz.

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

Bu noktada, corp-000 düğümündeki (ana bilgisayar: vm1) MySQL veritabanındaki öğe tablosuna yeni bir kayıt eklenir ve bunun, depo-001 düğümü (ana bilgisayar: vm2) üzerindeki PostgreSQL veritabanına çoğaltılmasını kontrol edebilirsiniz. Verileri corp-000'den mağaza-001'e taşımak için bir Çekme işlemi görüyoruz.

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)

Verileri mağaza-001'den corp-000'e taşımak üzere bir Push işlemi gerçekleştirmek için sale_transaction tablosuna bir kayıt ekleriz ve çoğaltmanın başarılı olduğunu doğrularız.

Sonuç.

Örnek tabloların MySQL ve PostgreSQL veritabanları arasında iki yönlü replikasyonunun başarılı kurulumunu görüyoruz. Yeni kullanıcı tablolarına yönelik çoğaltmayı ayarlamak için şu adımları izleyin: Örnek olarak t1 tablosunu oluşturuyoruz ve replikasyon kurallarını aşağıdaki gibi yapılandırıyoruz. Bu şekilde yalnızca corp-000'den mağaza-001'e çoğaltmayı yapılandırırız.

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)

Daha sonra konfigürasyona, tablo tanımlarını eşlemek için tetikleyicileri yeniden oluşturan senkronizasyon-tetikleyiciler bağımsız değişkeniyle birlikte symadmin komutu kullanılarak şema değişikliği, yani yeni bir tablonun eklenmesi bildirilir. şema değişikliklerini mağaza-001 düğümüne göndermek için send-schema yürütülür ve t1 tablosunun kopyalanması yapılandırılır.

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

SymmetricDS'in Faydaları

Üç düğümlü veya iki düğümlü bir devre oluşturmak için parametreler içeren hazır bir dosya seti dahil olmak üzere kolay kurulum ve konfigürasyon.
Sunucular, dizüstü bilgisayarlar ve mobil cihazlar da dahil olmak üzere platformlar arası veritabanları ve platform bağımsızlığı.
Herhangi bir veritabanını yerel olarak, WAN'da veya bulutta başka bir veritabanına kopyalayın.
Uygun çoğaltma için birkaç veya birkaç bin veritabanıyla optimum çalışma imkanı.
GUI ve mükemmel destek ile ücretli sürüm.

SymmetricDS'nin dezavantajları

Katalog tablolarını yüklemek için SQL ifadeleri aracılığıyla komut satırında çoğaltma kurallarını ve yönünü manuel olarak tanımlamanız gerekir; bu da zahmetli olabilir.
Çoğaltma kurallarını ve yönünü tanımlayan SQL ifadeleri oluşturmak için komut dosyaları kullanmadığınız sürece çoğaltma için çok sayıda tablo ayarlamak sıkıcı olabilir.
Günlüklere çok fazla bilgi kaydediliyor ve bazen günlük dosyasını çok fazla yer kaplamayacak şekilde düzenlemeniz gerekiyor.

SymmetricDS için sonuçlar

SymmetricDS, dosyaları çoğaltmak ve senkronize etmek için iki, üç ve hatta birkaç bin düğüm arasında iki yönlü çoğaltma ayarlamanıza olanak tanır. Bu, bir düğümde uzun bir kesinti süresinden sonra otomatik veri kurtarma, HTTPS aracılığıyla düğümler arasında güvenli ve verimli veri alışverişi, bir dizi kurala dayalı otomatik çakışma yönetimi vb. gibi birçok görevi bağımsız olarak gerçekleştiren benzersiz bir araçtır. SymmetricDS, herhangi bir veri tabanı arasında çoğaltma olduğundan, verilerin platformlar arasında taşınması, taşınması, dağıtılması, filtrelenmesi ve dönüştürülmesi de dahil olmak üzere çok çeşitli senaryolar için kullanılabilir.

Örnek resmi bir kaynağa dayanmaktadır Hızlı rehber SymmetricDS tarafından. İÇİNDE Kullanım kılavuzu SymmetricDS ile çoğaltma kurulumuyla ilgili çeşitli kavramları ayrıntılı olarak açıklar.

Kaynak: habr.com

Yorum ekle