تکرار متقابل بین PostgreSQL و MySQL

تکرار متقابل بین PostgreSQL و MySQL

من به طور خلاصه در مورد تکرار متقاطع بین PostgreSQL و MySQL و همچنین روش های تنظیم تکرار بین این دو سرور پایگاه داده صحبت خواهم کرد. پایگاه داده های متقاطع شده معمولاً به عنوان پایگاه داده های همگن نامیده می شوند و این روشی مناسب برای مهاجرت از یک سرور RDBMS به سرور دیگر است.

پایگاه داده های PostgreSQL و MySQL به طور سنتی رابطه ای در نظر گرفته می شوند، اما با پسوندهای اضافی، قابلیت های NoSQL را ارائه می دهند. در اینجا ما در مورد تکرار بین PostgreSQL و MySQL از دیدگاه مدیریت پایگاه داده رابطه ای بحث خواهیم کرد.

ما کل داخلی ها را توضیح نمی دهیم، فقط اصول اولیه را شرح می دهیم تا شما ایده ای از راه اندازی تکرار بین سرورهای پایگاه داده، مزایا، محدودیت ها و موارد استفاده داشته باشید.

به طور معمول، تکثیر بین دو سرور پایگاه داده یکسان یا در حالت باینری یا با پرس و جو بین یک master (معروف به ناشر، استاد یا فعال) و یک برده (مشترک، آماده به کار یا غیرفعال) انجام می شود. هدف از تکرار، ارائه یک کپی بلادرنگ از پایگاه داده اصلی در حالت آماده به کار است. در این حالت داده ها از master به slave یعنی از فعال به غیرفعال منتقل می شوند، زیرا همانند سازی تنها در یک جهت انجام می شود. اما می‌توانید Replication را بین دو پایگاه داده در هر دو جهت تنظیم کنید، به طوری که داده‌ها از Slave به Master در یک پیکربندی فعال-فعال منتقل شوند. همه اینها، از جمله تکرار آبشاری، بین دو یا چند سرور پایگاه داده یکسان امکان پذیر است.پیکربندی فعال-فعال یا فعال-غیرفعال به نیاز، در دسترس بودن چنین قابلیت هایی در پیکربندی اولیه یا استفاده از راه حل های تنظیم خارجی و تجارت موجود بستگی دارد. -آخر

پیکربندی توصیف شده بین سرورهای مختلف پایگاه داده امکان پذیر است. سرور را می توان به گونه ای پیکربندی کرد که داده های تکراری را از سرور پایگاه داده دیگری دریافت کند و همچنان عکس های فوری از داده های تکرار شده را حفظ کند. MySQL و PostgreSQL بیشتر این پیکربندی ها را به صورت بومی یا از طریق برنامه های افزودنی شخص ثالث، از جمله روش های ثبت باینری، قفل دیسک، و روش های مبتنی بر بیانیه و ردیف ارائه می دهند.

تکرار متقابل بین MySQL و PostgreSQL برای انتقال یکباره از یک سرور پایگاه داده به سرور دیگر مورد نیاز است. این پایگاه‌های داده از پروتکل‌های مختلفی استفاده می‌کنند، بنابراین نمی‌توانید مستقیماً آنها را پیوند دهید. برای تسهیل تبادل داده ها، می توانید از یک ابزار منبع باز خارجی مانند pg_chameleon استفاده کنید.

pg_chameleon چیست؟

pg_chameleon یک سیستم تکرار از MySQL به PostgreSQL در پایتون 3 است. از کتابخانه منبع باز mysql-replication، همچنین در پایتون استفاده می کند. تصاویر ردیف از جداول MySQL بازیابی شده و به عنوان اشیاء JSONB در پایگاه داده PostgreSQL ذخیره می شوند و سپس توسط تابع pl/pgsql رمزگشایی شده و در پایگاه داده PostgreSQL پخش می شوند.

ویژگی های pg_chameleon

طرحواره های MySQL متعدد از یک خوشه را می توان به یک پایگاه داده هدف PostgreSQL با پیکربندی یک به چند کپی کرد.
نام طرحواره منبع و هدف نمی تواند یکسان باشد.
داده های تکرار را می توان از یک ماکت آبشاری MySQL بازیابی کرد.
جداول که نمی توانند تکرار یا ایجاد خطا کنند مستثنی هستند.
هر تابع تکرار توسط دیمون ها کنترل می شود.
کنترل با پارامترها و فایل های پیکربندی بر اساس YAML.

مثال

میزبان
vm1
vm2

نسخه سیستم عامل
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

نسخه سرور پایگاه داده
خروجی زیر 5.7.26
PostgreSQL 10.5

پورت DB
3306
5433

آدرس IP
192.168.56.102
192.168.56.106

ابتدا تمام اجزای لازم برای نصب pg_chameleon را آماده کنید. در این مثال پایتون 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 استفاده می شود. دستورات زیر به طور عمدی pg_chameleon 2.0.9 را نصب می کنند، حتی اگر آخرین نسخه 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

سپس pg_chameleon (آفتاب پرست یک فرمان است) را با آرگومان set_configuration_files فراخوانی می کنیم تا 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) را به یک Boolean تبدیل می‌کند. در قسمت بعدی جزئیات اتصال به پایگاه داده هدف را مشخص می کنیم. در مورد ما، این یک پایگاه داده PostgreSQL است که با pg_conn مشخص می شود. در قسمت آخر، داده های منبع، یعنی پارامترهای اتصال پایگاه داده منبع، طرح نگاشت پایگاه داده مبدأ و مقصد، جداول مورد نظر، بازه زمانی، حافظه، اندازه بسته را مشخص می کنیم. توجه داشته باشید که "sources" جمع است، به این معنی که می‌توانیم پایگاه‌های داده چند منبع را به یک هدف اضافه کنیم تا یک پیکربندی چند به یک را تنظیم کنیم.

پایگاه داده world_x در مثال شامل 4 جدول با ردیف هایی است که انجمن MySQL برای مثال پیشنهاد می کند. قابل دانلود است اینجا. پایگاه داده نمونه به صورت تار و بایگانی فشرده همراه با دستورالعمل هایی برای ایجاد و وارد کردن رشته ها ارائه می شود.

یک کاربر ویژه با نام usr_replica در پایگاه داده های MySQL و PostgreSQL ایجاد می شود. 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، یک پایگاه داده db_replica ایجاد می شود که تغییرات را از پایگاه داده MySQL می پذیرد. کاربر usr_replica در PostgreSQL به‌طور خودکار به‌عنوان مالک دو طرحواره 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

سه دستور بعدی pg_chameleon (آفتاب پرست) محیط را آماده می کند، منبع را اضافه می کند و replica را مقدار دهی اولیه می کند. همانطور که گفتیم آرگومان create_replica_schema به pg_chameleon یک طرح پیش فرض (sch_chameleon) و یک طرح تکرار (pgworld_x) را در پایگاه داده PostgreSQL ایجاد می کند. آرگومان 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

خروجی این سه دستور به وضوح نشان دهنده موفقیت آنهاست. همه خرابی ها یا خطاهای نحوی در پیام های ساده و قابل فهم با نکاتی در مورد نحوه رفع مشکلات نشان داده شده است.

در نهایت Replication را با start_replica شروع می کنیم و پیغام موفقیت دریافت می کنیم.

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

وضعیت تکرار را می توان با آرگومان show_status پرس و جو کرد و خطاها را می توان با آرگومان show_errors مشاهده کرد.

نتيجه

همانطور که قبلاً گفتیم، دیمون ها هر تابع تکرار را مدیریت می کنند. برای مشاهده آنها، مطابق شکل زیر، جدول فرآیند را با دستور Linux ps جستجو کنید.

نتيجه

همانطور که در زیر نشان داده شده است، تا زمانی که آن را در زمان واقعی آزمایش نکنیم، Replication پیکربندی شده در نظر گرفته نمی شود. ما یک جدول ایجاد می‌کنیم، چند رکورد را در پایگاه داده MySQL وارد می‌کنیم و آرگومان sync_tables را در pg_chameleon فراخوانی می‌کنیم تا دیمون‌ها را به‌روزرسانی کنیم و جدول را با رکوردها در پایگاه داده 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 زیر پایان مهاجرت خواهد بود. دستورات باید پس از اینکه تأیید کردیم که ردیف‌های تمام جداول هدف تکرار شده‌اند، اجرا شوند، که منجر به ایجاد یک پایگاه داده PostgreSQL بدون ارجاع به پایگاه داده منبع یا طرح تکرار (sch_chameleon) می‌شود.

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

راه اندازی و پیکربندی آسان.
عیب یابی راحت و تشخیص ناهنجاری با پیام های خطای واضح.
جداول ویژه اضافی را می توان پس از مقداردهی اولیه بدون تغییر بقیه پیکربندی به Replication اضافه کرد.
امکان راه اندازی چندین پایگاه داده منبع برای یک پایگاه داده هدف وجود دارد، و اگر داده ها را از یک یا چند پایگاه داده 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 و غیره. ویژگی های موجود: همگام سازی پایگاه داده و فایل، تکرار پایگاه داده چند استاد، همگام سازی فیلتر شده، تبدیل، و غیره. این یک ابزار جاوا است و به نسخه استاندارد JRE یا JDK (نسخه 8.0 یا بالاتر) نیاز دارد. در اینجا می توانید تغییرات داده ها را روی تریگرها در پایگاه داده منبع ثبت کرده و آنها را به صورت دسته ای به پایگاه داده هدف مناسب ارسال کنید.

قابلیت های SymmetricDS

این ابزار مستقل از پلتفرم است، به این معنی که دو یا چند پایگاه داده مختلف می توانند داده ها را مبادله کنند.
پایگاه داده های رابطه ای با ثبت تغییرات داده ها همگام می شوند و پایگاه های داده مبتنی بر سیستم های فایل از همگام سازی فایل ها استفاده می کنند.
تکرار دوطرفه با استفاده از روش‌های فشار و کشش بر اساس مجموعه‌ای از قوانین.
انتقال داده ها از طریق شبکه های امن و شبکه های با پهنای باند کم امکان پذیر است.
بازیابی خودکار هنگام از سرگیری عملیات گره ها پس از شکست و حل خودکار تضاد.
APIهای افزونه سازگار و کارآمد با ابر.

مثال

SymmetricDS را می توان به یکی از دو روش پیکربندی کرد:
یک گره اصلی (والد) که به طور مرکزی تکثیر داده ها را بین دو گره برده (فرزند) هماهنگ می کند و تبادل داده بین گره های فرزند فقط از طریق والد انجام می شود.
یک گره فعال (گره 1) می تواند برای تکرار با یک گره فعال دیگر (گره 2) بدون واسطه ارتباط برقرار کند.

در هر دو گزینه، تبادل داده با استفاده از Push و Pull انجام می شود. در این مثال، پیکربندی فعال-فعال را در نظر خواهیم گرفت. برای توصیف کل معماری بسیار طولانی است، پس مطالعه کنید رهبریبرای کسب اطلاعات بیشتر در مورد دستگاه SymmetricDS.

نصب SymmetricDS آسان است: فایل فشرده منبع باز را دانلود کنید از این رو و در هر کجا که می خواهید استخراج کنید. جدول زیر مکان نصب و نسخه SymmetricDS را در این مثال، و همچنین نسخه های پایگاه داده، نسخه های لینوکس، آدرس های IP و پورت های هر دو گره را فهرست می کند.

میزبان
vm1
vm2

نسخه سیستم عامل
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

نسخه سرور پایگاه داده
خروجی زیر 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/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

نام میزبان SymmetricDS
corp-000
فروشگاه-001

در اینجا ما SymmetricDS را در /usr/local/symmetric-server-3.9.20 نصب می کنیم و زیرشاخه ها و فایل های مختلفی در آنجا ذخیره می شوند. ما به نمونه ها و موتورهای زیر شاخه ها علاقه مند هستیم. دایرکتوری نمونه شامل فایل های پیکربندی نمونه با ویژگی های گره، و همچنین نمونه اسکریپت های SQL برای شروع سریع نسخه ی نمایشی است.

در دایرکتوری نمونه، ما سه فایل پیکربندی با ویژگی های گره را می بینیم - نام ماهیت گره را در یک طرح خاص نشان می دهد.

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 مدیریت می شود که از رشته اتصال بالا و اعتبارنامه ورود استفاده می کند. ما در حال اتصال به پایگاه داده replica_db هستیم و جداول در حین ایجاد طرحواره ایجاد خواهند شد. sync.url پیوند به گره را برای همگام سازی نشان می دهد.

گره 2 در میزبان vm2 به عنوان store-001 پیکربندی شده است و بقیه در فایل node.properties زیر مشخص شده است. گره store-001 پایگاه داده PostgreSQL را اجرا می کند و pgdb_replica پایگاه داده ای است که باید تکرار شود. register.url به هاست vm2 اجازه می دهد تا با میزبان vm1 تماس گرفته و جزئیات پیکربندی را از آن دریافت کند.

$> 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 شامل گزینه هایی برای تنظیم تکرار دو طرفه بین دو سرور پایگاه داده (دو گره) است. مراحل زیر بر روی میزبان vm1 (corp-000) انجام می شود که یک طرحواره نمونه با 4 جدول ایجاد می کند. سپس اجرای create-sym-tables با دستور symadmin جداول دایرکتوری را ایجاد می کند که در آن قوانین و جهت تکرار بین گره ها ذخیره می شود. در نهایت داده های نمونه در جداول بارگذاری می شوند.

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_selling_price به طور خودکار برای تکرار از corp-000 به store-001، و جداول فروش (sale_transaction و sale_return_line_item) به طور خودکار پیکربندی شده اند تا از store-001 به corp-000 تکرار شوند. اکنون طرحی را در پایگاه داده PostgreSQL روی میزبان vm2 (store-001) ایجاد می کنیم تا آن را برای دریافت داده ها از corp-000 آماده کنیم.

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

حتما بررسی کنید که پایگاه داده MySQL در vm1 دارای جداول نمونه و جدول کاتالوگ SymmetricDS باشد. توجه داشته باشید که جداول سیستم SymmetricDS (با پیشوند sym_) در حال حاضر فقط در گره corp-000 در دسترس هستند، زیرا در آنجا دستور create-sym-tables را اجرا می کنیم و تکرار را مدیریت می کنیم. و در پایگاه داده در گره store-001 تنها 4 جدول نمونه بدون داده وجود خواهد داشت.

همه. محیط آماده اجرای فرآیندهای سرور سیم بر روی هر دو گره مطابق شکل زیر است.

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

ورودی‌های گزارش به فایل گزارش پس‌زمینه (symmetric.log) در پوشه گزارش در فهرستی که SymmetricDS در آن نصب شده است و همچنین به خروجی استاندارد ارسال می‌شوند. سرور sym اکنون می تواند در گره store-001 راه اندازی شود.

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

اگر فرآیند Sym Server را روی هاست vm2 اجرا کنید، جداول کاتالوگ SymmetricDS را در پایگاه داده PostgreSQL نیز ایجاد می کند. اگر فرآیند Sym Server را روی هر دو گره اجرا کنید، آنها با یکدیگر هماهنگ می شوند تا داده ها را از corp-000 به store-001 تکرار کنند. اگر بعد از چند ثانیه از هر 4 جدول در دو طرف پرس و جو کنیم، می بینیم که تکرار موفقیت آمیز بوده است. یا می توانید با دستور زیر بوت استرپ را از corp-001 به store-000 ارسال کنید.

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

در این مرحله، یک رکورد جدید در جدول آیتم در پایگاه داده MySQL در node corp-000 (میزبان: vm1) وارد می شود و می توان آن را برای تکرار در پایگاه داده PostgreSQL در node store-001 (میزبان: vm2) بررسی کرد. ما یک عملیات Pull برای انتقال داده ها از 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 هستیم. برای تنظیم Replication برای جداول کاربر جدید، مراحل زیر را انجام دهید. برای مثال جدول t1 را ایجاد می کنیم و قوانین تکرار آن را به صورت زیر تنظیم می کنیم. بنابراین ما فقط replication را از 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)

سپس پیکربندی با استفاده از دستور symadmin با آرگومان sync-triggers از تغییر طرح، یعنی افزودن یک جدول جدید مطلع می‌شود، که باعث ایجاد مجدد برای مطابقت با تعاریف جدول می‌شود. 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

نصب و پیکربندی آسان، شامل مجموعه ای آماده از فایل ها با پارامترهایی برای ایجاد یک طرح با سه یا دو گره.
پایگاه‌های اطلاعاتی بین پلتفرمی و استقلال پلتفرم، از جمله سرورها، لپ‌تاپ‌ها و دستگاه‌های تلفن همراه.
هر پایگاه داده را به هر پایگاه داده دیگری به صورت محلی، در شبکه WAN یا در فضای ابری کپی کنید.
توانایی کار بهینه با چند پایگاه داده یا چندین هزار تا برای تکرار آسان.
نسخه پولی با رابط کاربری گرافیکی و پشتیبانی عالی.

معایب SymmetricDS

برای بارگیری جداول کاتالوگ باید به صورت دستی قوانین و جهت تکرار را در خط فرمان از طریق دستورات SQL تعریف کنید که ممکن است ناراحت کننده باشد.
تنظیم بسیاری از جداول برای تکرار می تواند خسته کننده باشد مگر اینکه از اسکریپت هایی برای ایجاد عبارات SQL استفاده کنید که قوانین و جهت تکرار را مشخص می کند.
اطلاعات بیش از حد در لاگ ها وجود دارد و گاهی لازم است فایل لاگ را پاک کنید تا فضای زیادی اشغال نکند.

خلاصه ای از SymmetricDS

SymmetricDS به شما این امکان را می دهد که تکرار دو طرفه را بین دو، سه یا حتی چندین هزار گره به منظور تکرار و همگام سازی فایل ها تنظیم کنید. این یک ابزار منحصر به فرد است که بسیاری از وظایف را به تنهایی انجام می دهد، مانند بازیابی خودکار داده ها پس از مدت طولانی در یک گره، ارتباط امن و کارآمد بین گره ها از طریق HTTPS، مدیریت تضاد خودکار بر اساس مجموعه ای از قوانین و غیره. SymmetricDS replicates بین هر پایگاه داده، بنابراین، می توان از آن برای طیف گسترده ای از سناریوها، از جمله مهاجرت، ارتقا، توزیع، فیلتر کردن و تبدیل داده ها در پلتفرم ها استفاده کرد.

مثال بر اساس مقام رسمی است راهنمای سریع توسط SymmetricDS. که در راهنمای کاربری مفاهیم مختلفی را که در راه اندازی Replication با SymmetricDS دخیل هستند به تفصیل شرح می دهد.

منبع: www.habr.com

اضافه کردن نظر