{"id":38146,"date":"2019-10-31T22:21:54","date_gmt":"2019-10-31T19:21:54","guid":{"rendered":"https:\/\/prohoster.info\/blog\/perekrestnaya-replikatsiya-mezhdu-postgresql-i-mysql\/"},"modified":"2019-10-31T22:21:54","modified_gmt":"2019-10-31T19:21:54","slug":"perekrestnaya-replikatsiya-mezhdu-postgresql-i-mysql","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/perekrestnaya-replikatsiya-mezhdu-postgresql-i-mysql","title":{"rendered":"Keresztir\u00e1ny\u00fa replik\u00e1ci\u00f3 a PostgreSQL \u00e9s MySQL k\u00f6z\u00f6tt","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Keresztir\u00e1ny\u00fa replik\u00e1ci\u00f3 a PostgreSQL \u00e9s MySQL k\u00f6z\u00f6tt\" src=\"\/wp-content\/uploads\/2019\/09\/47cf48f9024f406d625ecb6b21020c74.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c1ttekint\u00e9st adok a keresztir\u00e1ny\u00fa replik\u00e1ci\u00f3r\u00f3l a PostgreSQL \u00e9s MySQL k\u00f6z\u00f6tt, valamint a be\u00e1ll\u00edt\u00e1si m\u00f3dszerekr\u0151l. \u00c1ltal\u00e1ban a keresztir\u00e1ny\u00fa replik\u00e1ci\u00f3val \u00e9rintett adatb\u00e1zisokat homog\u00e9nnek nevezik, \u00e9s ez egy k\u00e9nyelmes m\u00f3dszer a rel\u00e1ci\u00f3s DBMS szerverek k\u00f6z\u00f6tti v\u00e1lt\u00e1sra.<\/p>\n<p><\/p>\n<p>A PostgreSQL \u00e9s MySQL adatb\u00e1zisokat rel\u00e1ci\u00f3snak tekintj\u00fck, de tov\u00e1bbi kiterjeszt\u00e9sekkel NoSQL lehet\u0151s\u00e9geket is k\u00edn\u00e1lnak. Itt a PostgreSQL \u00e9s MySQL k\u00f6z\u00f6tti replik\u00e1ci\u00f3t fogjuk megt\u00e1rgyalni, a rel\u00e1ci\u00f3s DBMS-ek szempontj\u00e1b\u00f3l.<\/p>\n<p><\/p>\n<p>Nem fogjuk r\u00e9szletezni az \u00f6sszes bels\u0151 folyamatot, csak az alapelveket, hogy \u00e1ttekint\u00e9st ny\u00fajtsunk a replik\u00e1ci\u00f3s be\u00e1ll\u00edt\u00e1sr\u00f3l az adatb\u00e1zis szerverek k\u00f6z\u00f6tt, a el\u0151ny\u00f6kr\u0151l, korl\u00e1toz\u00e1sokr\u00f3l \u00e9s haszn\u00e1lati forgat\u00f3k\u00f6nyvekr\u0151l.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>\u00c1ltal\u00e1ban k\u00e9t azonos adatb\u00e1zis szerver k\u00f6z\u00f6tti replik\u00e1ci\u00f3 bin\u00e1ris m\u00f3dban vagy a vezet\u0151 (kiad\u00f3, f\u0151 vagy akt\u00edv) \u00e9s k\u00f6vet\u0151 (feliratkoz\u00f3, v\u00e1rakoz\u00f3 vagy passz\u00edv) csom\u00f3pontok k\u00f6z\u00f6tti lek\u00e9rdez\u00e9seken kereszt\u00fcl t\u00f6rt\u00e9nik. A replik\u00e1ci\u00f3 c\u00e9lja, hogy val\u00f3s id\u0151ben egy m\u00e1solatot biztos\u00edtson a f\u0151 adatb\u00e1zisr\u00f3l a k\u00f6vet\u0151 oldalon. A adatok egyir\u00e1ny\u00faan jutnak el a vezet\u0151t\u0151l a k\u00f6vet\u0151h\u00f6z, azaz az akt\u00edvb\u00f3l a passz\u00edvba, mivel a replik\u00e1ci\u00f3 csak egy ir\u00e1nyban zajlik. Azonban lehets\u00e9ges a replik\u00e1ci\u00f3 be\u00e1ll\u00edt\u00e1sa k\u00e9t adatb\u00e1zis k\u00f6z\u00f6tt k\u00e9tir\u00e1ny\u00fa konfigur\u00e1ci\u00f3ban is, \u00edgy az adatok a k\u00f6vet\u0151t\u0151l a vezet\u0151h\u00f6z ker\u00fclhetnek az \u201eakt\u00edv-akt\u00edv\u201d be\u00e1ll\u00edt\u00e1ssal. Mindez, bele\u00e9rtve a kaszk\u00e1d replik\u00e1ci\u00f3t, k\u00e9t vagy t\u00f6bb azonos adatb\u00e1zis szerver k\u00f6z\u00f6tt is lehets\u00e9ges. Az \u201eakt\u00edv-akt\u00edv\u201d vagy \u201eakt\u00edv-passz\u00edv\u201d konfigur\u00e1ci\u00f3 a sz\u00fcks\u00e9gletekt\u0151l, az el\u00e9rhet\u0151s\u00e9gi lehet\u0151s\u00e9gekt\u0151l az eredeti konfigur\u00e1ci\u00f3ban vagy k\u00fcls\u0151 megold\u00e1sok haszn\u00e1lat\u00e1t\u00f3l \u00e9s a megl\u00e9v\u0151 kompromisszumokt\u00f3l f\u00fcgg.<\/p>\n<p><\/p>\n<p>A le\u00edrt konfigur\u00e1ci\u00f3 k\u00fcl\u00f6nb\u00f6z\u0151 adatb\u00e1zis szerverek k\u00f6z\u00f6tt is lehets\u00e9ges. A szerver be\u00e1ll\u00edthat\u00f3 \u00fagy, hogy m\u00e1s adatb\u00e1zis szerverr\u0151l replik\u00e1lt adatokat fogadjon, mik\u00f6zben val\u00f3s id\u0151ben meg\u0151rzi a replik\u00e1lt adatok pillanatk\u00e9p\u00e9t. A MySQL \u00e9s a PostgreSQL a legt\u00f6bb ilyen konfigur\u00e1ci\u00f3t saj\u00e1t forr\u00e1saikkal vagy k\u00fcls\u0151 kiterjeszt\u00e9sek seg\u00edts\u00e9g\u00e9vel k\u00edn\u00e1lj\u00e1k, bele\u00e9rtve a bin\u00e1ris napl\u00f3z\u00e1s, a lemezlez\u00e1r\u00e1s \u00e9s az oper\u00e1torok \u00e9s sorok alap\u00fa m\u00f3dszereit.<\/p>\n<p><\/p>\n<p>A MySQL \u00e9s PostgreSQL k\u00f6z\u00f6tti kereszt-replik\u00e1ci\u00f3 egy alkalommal t\u00f6rt\u00e9n\u0151 migr\u00e1l\u00e1shoz sz\u00fcks\u00e9ges az egyik adatb\u00e1zis szerverr\u0151l a m\u00e1sikra. Ezek az adatb\u00e1zisok k\u00fcl\u00f6nb\u00f6z\u0151 protokollokat haszn\u00e1lnak, \u00edgy k\u00f6zvetlen \u00f6sszekapcsol\u00e1suk nem lehets\u00e9ges. Az adatok cser\u00e9j\u00e9nek be\u00e1ll\u00edt\u00e1s\u00e1hoz haszn\u00e1lhat\u00f3 egy k\u00fcls\u0151 ny\u00edlt forr\u00e1sk\u00f3d\u00fa eszk\u00f6z, p\u00e9ld\u00e1ul a pg_chameleon.<\/p>\n<p><\/p>\n<h3 id=\"chto-takoe-pg_chameleon\">Mi az a pg_chameleon<\/h3>\n<p><\/p>\n<p>A pg_chameleon egy MySQL-b\u00f3l PostgreSQL-be t\u00f6rt\u00e9n\u0151 replik\u00e1ci\u00f3s rendszer, amely Python 3-ra \u00e9p\u00fcl. Az eszk\u00f6z haszn\u00e1lja az mysql-replication nev\u0171 ny\u00edlt forr\u00e1sk\u00f3d\u00fa k\u00f6nyvt\u00e1rat, szint\u00e9n Pythonban. Az adatsorok a MySQL t\u00e1bl\u00e1kb\u00f3l kivon\u00e1sra ker\u00fclnek, \u00e9s JSONB objektumokk\u00e9nt t\u00e1rol\u00f3dnak a PostgreSQL adatb\u00e1zisban, majd a pl\/pgsql f\u00fcggv\u00e9ny seg\u00edts\u00e9g\u00e9vel dek\u00f3dol\u00f3dnak \u00e9s vissza\u00e1ll\u00edt\u00f3dnak a PostgreSQL adatb\u00e1zisban.<\/p>\n<p><\/p>\n<h3 id=\"vozmozhnosti-pg_chameleon\">A pg_chameleon lehet\u0151s\u00e9gei<\/h3>\n<p><\/p>\n<p>T\u00f6bb MySQL s\u00e9ma egyetlen c\u00e9l-PostgreSQL adatb\u00e1zisba replik\u00e1lhat\u00f3 egy 'egy a sokhoz' konfigur\u00e1ci\u00f3val.<br \/>\nA forr\u00e1segy \u00e9s a c\u00e9ls\u00e9ma neve nem lehet azonos.<br \/>\nA replik\u00e1ci\u00f3s adatokat egy MySQL kaszk\u00e1d replika seg\u00edts\u00e9g\u00e9vel is ki lehet nyerni.<br \/>\nA replik\u00e1l\u00e1sra alkalmatlan vagy hib\u00e1t okoz\u00f3 t\u00e1bl\u00e1k kiz\u00e1r\u00e1sra ker\u00fclnek.<br \/>\nMinden replik\u00e1ci\u00f3s funkci\u00f3t d\u00e9monok ir\u00e1ny\u00edtanak.<br \/>\nEllen\u0151rz\u00e9s YAML alap\u00fa param\u00e9terek \u00e9s konfigur\u00e1ci\u00f3s f\u00e1jlok seg\u00edts\u00e9g\u00e9vel.<\/p>\n<p><\/p>\n<h3 id=\"primer\">t\u00e1mad\u00e1sra<\/h3>\n<p><\/p>\n<p>Gazda<br \/>\nvm1<br \/>\nvm2<\/p>\n<p><strong>Oper\u00e1ci\u00f3s rendszer verzi\u00f3ja<\/strong><br \/>\nCentOS Linux 7.6 x86_64<br \/>\nCentOS Linux 7.5 x86_64<\/p>\n<p><strong>DB szerver verzi\u00f3ja<\/strong><br \/>\nMySQL 5.7.26<br \/>\nPostgreSQL 10.5<\/p>\n<p><strong>DB port<\/strong><br \/>\n3306<br \/>\n5433<\/p>\n<p><strong>IP-c\u00edm<\/strong><br \/>\n192.168.56.102<br \/>\n192.168.56.106<\/p>\n<p><\/p>\n<p>El\u0151sz\u00f6r k\u00e9sz\u00edtse el\u0151 a pg_chameleon telep\u00edt\u00e9s\u00e9hez sz\u00fcks\u00e9ges \u00f6sszes komponenst. Ebben a p\u00e9ld\u00e1ban a Python 3.6.8 van telep\u00edtve, ami egy virtu\u00e1lis k\u00f6rnyezetet hoz l\u00e9tre \u00e9s aktiv\u00e1lja azt.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; wget https:\/\/www.python.org\/ftp\/python\/3.6.8\/Python-3.6.8.tar.xz\n$&gt; tar -xJf Python-3.6.8.tar.xz\n$&gt; cd Python-3.6.8\n$&gt; .\/configure --enable-optimizations\n$&gt; make altinstall<\/code><\/pre>\n<p><\/p>\n<p>A Python 3.6 sikeres telep\u00edt\u00e9se ut\u00e1n a k\u00f6vetkez\u0151 k\u00f6vetelm\u00e9nyeket kell teljes\u00edteni, p\u00e9ld\u00e1ul l\u00e9trehozni \u00e9s aktiv\u00e1lni egy virtu\u00e1lis k\u00f6rnyezetet. Ezen k\u00edv\u00fcl a pip modul friss\u00edtve lesz a leg\u00fajabb verzi\u00f3ra, \u00e9s a pg_chameleon telep\u00edt\u00e9s\u00e9re haszn\u00e1lj\u00e1k. Az al\u00e1bbi parancsok sz\u00e1nd\u00e9kosan a pg_chameleon 2.0.9-es verzi\u00f3j\u00e1t telep\u00edtik, b\u00e1r a leg\u00fajabb verzi\u00f3 a 2.0.10. Erre az\u00e9rt van sz\u00fcks\u00e9g, hogy elker\u00fclj\u00fck az \u00faj verzi\u00f3ban esetlegesen felmer\u00fcl\u0151 hib\u00e1kat.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; python3.6 -m venv venv\n$&gt; source venv\/bin\/activate\n(venv) $&gt; pip install pip --upgrade\n(venv) $&gt; pip install pg_chameleon==2.0.9<\/code><\/pre>\n<p><\/p>\n<p>Ezut\u00e1n megh\u00edvjuk a pg_chameleon-t (a chameleon a parancs) a set_configuration_files argumentummal, amely lehet\u0151v\u00e9 teszi a pg_chameleon aktiv\u00e1l\u00e1s\u00e1t \u00e9s az alap\u00e9rtelmezett konfigur\u00e1ci\u00f3s mapp\u00e1k \u00e9s f\u00e1jlok l\u00e9trehoz\u00e1s\u00e1t.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">(venv) $&gt; chameleon set_configuration_files\ncreating directory \/root\/.pg_chameleon\ncreating directory \/root\/.pg_chameleon\/configuration\/\ncreating directory \/root\/.pg_chameleon\/logs\/\ncreating directory \/root\/.pg_chameleon\/pid\/\ncop\u00edng konfigur\u00e1ci\u00f3s p\u00e9ld\u00e1t a \/root\/.pg_chameleon\/configuration\/\/config-example.yml<\/code><\/pre>\n<p><\/p>\n<p>Most m\u00e1r l\u00e9trehozzuk a config-example.yml m\u00e1solat\u00e1t default.yml n\u00e9ven, hogy ez legyen az alap\u00e9rtelmezett konfigur\u00e1ci\u00f3s f\u00e1jl. Az alap\u00e9rtelmezett konfigur\u00e1ci\u00f3s f\u00e1jl mint\u00e1ja az al\u00e1bbiakban tal\u00e1lhat\u00f3.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; cat default.yml\n---\n#glob\u00e1lis be\u00e1ll\u00edt\u00e1sok\npid_dir: '~\/.pg_chameleon\/pid\/'\nlog_dir: '~\/.pg_chameleon\/logs\/'\nlog_dest: file\nlog_level: info\nlog_days_keep: 10\nrollbar_key: ''\nrollbar_env: ''\n\n# type_override lehet\u0151v\u00e9 teszi a felhaszn\u00e1l\u00f3 sz\u00e1m\u00e1ra, hogy fel\u00fclb\u00edr\u00e1lja az alap\u00e9rtelmezett t\u00edpuskonverzi\u00f3t egy m\u00e1sikra.\ntype_override:\n  \"tinyint(1)\":\n    override_to: boolean\n    override_tables:\n      - \"*\"\n\n#postgres c\u00e9lkapcsolat\npg_conn:\n  host: \"192.168.56.106\"\n  port: \"5433\"\n  user: \"usr_replica\"\n  password: \"pass123\"\n  database: \"db_replica\"\n  charset: \"utf8\"\n\nsources:\n  mysql:\n    db_conn:\n      host: \"192.168.56.102\"\n      port: \"3306\"\n      user: \"usr_replica\"\n      password: \"pass123\"\n      charset: 'utf8'\n      connect_timeout: 10\n    schema_mappings:\n      world_x: pgworld_x\n    limit_tables:\n#      - delphis_mediterranea.foo\n    skip_tables:\n#      - delphis_mediterranea.bar\n    grant_select_to:\n      - usr_readonly\n    lock_timeout: \"120s\"\n    my_server_id: 100\n    replica_batch_size: 10000\n    replay_max_rows: 10000\n    batch_retention: '1 day'\n    copy_max_memory: \"300M\"\n    copy_mode: 'file'\n    out_dir: \/tmp\n    sleep_loop: 1\n    on_error_replay: continue\n    on_error_read: continue\n    auto_maintenance: \"disabled\"\n    gtid_enable: No\n    type: mysql\n    skip_events:\n      insert:\n        - delphis_mediterranea.foo #\u00e1thagyja az insert m\u0171veleteket a delphis_mediterranea.foo t\u00e1bl\u00e1n\n      delete:\n        - delphis_mediterranea #\u00e1thagyja a delete m\u0171veleteket a delphis_mediterranea s\u00e9m\u00e1ban\n      update:<\/code><\/pre>\n<p><\/p>\n<p>A p\u00e9lda konfigur\u00e1ci\u00f3s f\u00e1jl egy pg_chameleon f\u00e1jl mint\u00e1ja, minim\u00e1lis elt\u00e9r\u00e9sekkel az eredeti \u00e9s a c\u00e9lk\u00f6rnyezet k\u00f6z\u00f6tt. Az al\u00e1bbiakban \u00e1ttekint\u00e9st adunk a konfigur\u00e1ci\u00f3s f\u00e1jl k\u00fcl\u00f6nb\u00f6z\u0151 szekci\u00f3ir\u00f3l.<\/p>\n<p><\/p>\n<p>A default.yml konfigur\u00e1ci\u00f3s f\u00e1jlban van egy glob\u00e1lis be\u00e1ll\u00edt\u00e1sokat tartalmaz\u00f3 szekci\u00f3 (global settings), ahol kezelhetj\u00fck az olyan be\u00e1ll\u00edt\u00e1sokat, mint a z\u00e1rol\u00e1si f\u00e1jl helye, a napl\u00f3k helye, a napl\u00f3k megtart\u00e1s\u00e1nak id\u0151tartama stb. Ezt k\u00f6veti a t\u00edpusfel\u00fclb\u00edr\u00e1lat szekci\u00f3 (type override), ahol a replik\u00e1ci\u00f3 sor\u00e1n a t\u00edpusok fel\u00fclb\u00edr\u00e1l\u00e1s\u00e1hoz tartoz\u00f3 szab\u00e1lyok tal\u00e1lhat\u00f3ak. Az alap\u00e9rtelmezett p\u00e9ld\u00e1ban egy t\u00edpusfel\u00fclb\u00edr\u00e1l\u00f3 szab\u00e1lyt haszn\u00e1lnak, amely a tinyint(1)-et boolean \u00e9rt\u00e9kk\u00e9 alak\u00edtja. A k\u00f6vetkez\u0151 szekci\u00f3ban adunk meg r\u00e9szleteket a c\u00e9ladatb\u00e1zis kapcsolatra. Ebben az esetben ez a PostgreSQL adatb\u00e1zis, amely pg_conn n\u00e9ven van megjel\u00f6lve. Az utols\u00f3 szekci\u00f3ban tal\u00e1lhat\u00f3ak az forr\u00e1st, vagyis az eredeti adatb\u00e1zis kapcsolati param\u00e9terei, az eredeti \u00e9s a c\u00e9l adatb\u00e1zis k\u00f6z\u00f6tti s\u00e9ma lek\u00e9pez\u00e9s, a kihagyand\u00f3 t\u00e1bl\u00e1k, a v\u00e1rakoz\u00e1si id\u0151, a mem\u00f3ria \u00e9s a csomag m\u00e9rete. Ne felejts\u00fck el, hogy a \u201esources\u201d t\u00f6bbes sz\u00e1m\u00fa, teh\u00e1t t\u00f6bb forr\u00e1sadatb\u00e1zist is hozz\u00e1adhatunk egy c\u00e9lhoz az egyes \u201emany to one\u201d konfigur\u00e1ci\u00f3hoz.<\/p>\n<p><\/p>\n<p>A world_x adatb\u00e1zis p\u00e9ld\u00e1ja 4 t\u00e1bl\u00e1t tartalmaz, amelyeket a MySQL k\u00f6z\u00f6ss\u00e9g p\u00e9ldak\u00e9nt aj\u00e1nl. Ez let\u00f6lthet\u0151. <noindex><a rel=\"nofollow\" href=\"https:\/\/dev.mysql.com\/doc\/index-other.html\">itt<\/a><\/noindex>. Az adatb\u00e1zis p\u00e9lda tar form\u00e1tumban \u00e9s t\u00f6m\u00f6r\u00edtett arch\u00edvumk\u00e9nt \u00e9rkezik az adatok l\u00e9trehoz\u00e1s\u00e1nak \u00e9s import\u00e1l\u00e1s\u00e1nak \u00fatmutat\u00f3j\u00e1val.<\/p>\n<p><\/p>\n<p>MySQL \u00e9s PostgreSQL adatb\u00e1zisok eset\u00e9ben l\u00e9trej\u00f6n egy speci\u00e1lis usr_replica nev\u0171 felhaszn\u00e1l\u00f3. A MySQL-ben tov\u00e1bbi jogokat kap, hogy olvashassa az \u00f6sszes replik\u00e1lt t\u00e1bl\u00e1t.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">mysql&gt; CREATE USER usr_replica ;\nmysql&gt; SET PASSWORD FOR usr_replica='pass123';\nmysql&gt; GRANT ALL ON world_x.* TO 'usr_replica';\nmysql&gt; GRANT RELOAD ON *.* to 'usr_replica';\nmysql&gt; GRANT REPLICATION CLIENT ON *.* to 'usr_replica';\nmysql&gt; GRANT REPLICATION SLAVE ON *.* to 'usr_replica';\nmysql&gt; FLUSH PRIVILEGES;<\/code><\/pre>\n<p><\/p>\n<p>A PostgreSQL oldalon egy db_replica nev\u0171 adatb\u00e1zis j\u00f6n l\u00e9tre, amely a MySQL adatb\u00e1zisb\u00f3l \u00e9rkez\u0151 v\u00e1ltoz\u00e1sokat fogadja. A usr_replica felhaszn\u00e1l\u00f3 PostgreSQL-ben automatikusan be\u00e1ll\u00edt\u00e1sra ker\u00fcl a pgworld_x \u00e9s sch_chameleon nevekkel rendelkez\u0151 k\u00e9t s\u00e9ma tulajdonosak\u00e9nt, amelyek tartalmazz\u00e1k a t\u00e9nylegesen replik\u00e1lt t\u00e1bl\u00e1kat \u00e9s a replik\u00e1ci\u00f3s k\u00f6nyvt\u00e1rakat. Az automatikus konfigur\u00e1ci\u00f3t a create_replica_schema argumentum ir\u00e1ny\u00edtja, ahogyan azt lentebb l\u00e1thatja.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">postgres=# CREATE USER usr_replica WITH PASSWORD 'pass123';\nCREATE ROLE\npostgres=# CREATE DATABASE db_replica WITH OWNER usr_replica;\nCREATE DATABASE<\/code><\/pre>\n<p><\/p>\n<p>A MySQL adatb\u00e1zist n\u00e9h\u00e1ny param\u00e9ter m\u00f3dos\u00edt\u00e1s\u00e1val \u00e1ll\u00edtj\u00e1k be a replik\u00e1ci\u00f3ra, amint az al\u00e1bb l\u00e1that\u00f3. A m\u00f3dos\u00edt\u00e1sok \u00e9letbe l\u00e9p\u00e9s\u00e9hez \u00fajra kell ind\u00edtani az adatb\u00e1zis szervert.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; vi \/etc\/my.cnf\nbinlog_format= ROW\nbinlog_row_image=FULL\nlog-bin = mysql-bin\nserver-id = 1<\/code><\/pre>\n<p><\/p>\n<p>Jelenleg fontos ellen\u0151rizni a kapcsolatot mindk\u00e9t adatb\u00e1zisszerverhez, hogy a pg_chameleon parancsainak v\u00e9grehajt\u00e1sakor ne mer\u00fcljenek fel probl\u00e9m\u00e1k.<\/p>\n<p><\/p>\n<p>A PostgreSQL node-on:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; mysql -u usr_replica -Ap'admin123' -h 192.168.56.102 -D world_x<\/code><\/pre>\n<p><\/p>\n<p>A MySQL node-on:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; psql -p 5433 -U usr_replica -h 192.168.56.106 db_replica<\/code><\/pre>\n<p><\/p>\n<p>A k\u00f6vetkez\u0151 h\u00e1rom pg_chameleon (chameleon) parancs el\u0151k\u00e9sz\u00edti a k\u00f6rnyezetet, hozz\u00e1adja a forr\u00e1st \u00e9s inicializ\u00e1lja a replik\u00e1t. A pg_chameleon create_replica_schema argumentuma alap\u00e9rtelmezett s\u00e9ma (sch_chameleon) \u00e9s replik\u00e1ci\u00f3s s\u00e9ma (pgworld_x) l\u00e9trehoz\u00e1s\u00e1ra szolg\u00e1l a PostgreSQL adatb\u00e1zisban. Az add_source argumentum hozz\u00e1adja az alapadatb\u00e1zist a konfigur\u00e1ci\u00f3hoz a konfigur\u00e1ci\u00f3s f\u00e1jl (default.yml) beolvas\u00e1s\u00e1val, ebben az esetben=mysql, \u00e9s az init_replica a konfigur\u00e1ci\u00f3 inicializ\u00e1l\u00e1s\u00e1ra szolg\u00e1l a konfigur\u00e1ci\u00f3s f\u00e1jlban l\u00e9v\u0151 param\u00e9terek alapj\u00e1n.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; chameleon create_replica_schema --debug\n$&gt; chameleon add_source --config default --source mysql --debug\n$&gt; chameleon init_replica --config default --source mysql --debug<\/code><\/pre>\n<p><\/p>\n<p>E h\u00e1rom parancs kimenete nyilv\u00e1nval\u00f3an mutatja a sikeres v\u00e9grehajt\u00e1sukat. Minden hiba vagy szintaktikai probl\u00e9ma egyszer\u0171 \u00e9s \u00e9rthet\u0151 \u00fczenetekben jelenik meg, amelyek utas\u00edt\u00e1sokat adnak a probl\u00e9m\u00e1k megold\u00e1s\u00e1ra.<\/p>\n<p><\/p>\n<p>V\u00e9g\u00fcl ind\u00edtsuk el a replik\u00e1ci\u00f3t a start_replica seg\u00edts\u00e9g\u00e9vel, \u00e9s kapjunk egy sikeres v\u00e9grehajt\u00e1sr\u00f3l sz\u00f3l\u00f3 \u00fczenetet.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; chameleon start_replica --config default --source mysql \noutput: A replik\u00e1ci\u00f3s folyamat ind\u00edt\u00e1sa a mysql forr\u00e1sra<\/code><\/pre>\n<p><\/p>\n<p>A replik\u00e1ci\u00f3s st\u00e1tusz lek\u00e9rdezhet\u0151 a show_status argumentummal, m\u00edg a hib\u00e1k megtekint\u00e9s\u00e9hez a show_errors argumentumot haszn\u00e1lhatjuk.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/xpaste.pro\/p\/iYMdAf0b\">Eredm\u00e9ny.<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Ahogy m\u00e1r eml\u00edtett\u00fck, minden replik\u00e1ci\u00f3s funkci\u00f3t d\u00e9monok ir\u00e1ny\u00edtanak. Ezeket megtekinthetj\u00fck a Linux ps parancs seg\u00edts\u00e9g\u00e9vel, ahogy az al\u00e1bb l\u00e1that\u00f3.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/xpaste.pro\/p\/59GfdvHA\">Eredm\u00e9ny.<\/a><\/noindex><\/p>\n<p><\/p>\n<p>A replik\u00e1ci\u00f3 nem tekinthet\u0151 be\u00e1ll\u00edtottnak, am\u00edg nem tesztelj\u00fck val\u00f3s id\u0151ben, ahogyan az al\u00e1bb l\u00e1that\u00f3. L\u00e9trehozunk egy t\u00e1bl\u00e1t, besz\u00farunk n\u00e9h\u00e1ny bejegyz\u00e9st a MySQL adatb\u00e1zisba, \u00e9s megh\u00edvjuk a sync_tables argumentumot a pg_chameleonban, hogy friss\u00edts\u00fck a d\u00e9monokat \u00e9s replik\u00e1ljuk a t\u00e1bl\u00e1t a PostgreSQL adatb\u00e1zisba.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">mysql&gt; create table t1 (n1 int primary key, n2 varchar(10));\nA lek\u00e9rdez\u00e9s rendben van, 0 sor \u00e9rintett (0.01 sec)\nmysql&gt; insert into t1 values (1,'one');\nA lek\u00e9rdez\u00e9s rendben van, 1 sor \u00e9rintett (0.00 sec)\nmysql&gt; insert into t1 values (2,'two');\nA lek\u00e9rdez\u00e9s rendben van, 1 sor \u00e9rintett (0.00 sec)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; chameleon sync_tables --tables world_x.t1 --config default --source mysql\nA t\u00e1bl\u00e1k szinkroniz\u00e1l\u00e1sa a mysql forr\u00e1ssal elindult.<\/code><\/pre>\n<p><\/p>\n<p>A teszt eredm\u00e9nyeinek meger\u0151s\u00edt\u00e9s\u00e9hez lek\u00e9rdezz\u00fck a t\u00e1bl\u00e1t a PostgreSQL adatb\u00e1zisb\u00f3l \u00e9s megjelen\u00edtj\u00fck a sorokat.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; psql -p 5433 -U usr_replica -d db_replica -c \"select * from pgworld_x.t1\";\n n1 |  n2\n----+-------\n  1 | one\n  2 | two<\/code><\/pre>\n<p><\/p>\n<p>Ha migr\u00e1ci\u00f3t v\u00e9gz\u00fcnk, a k\u00f6vetkez\u0151 pg_chameleon parancsok z\u00e1rj\u00e1k le azt. A parancsokat akkor kell v\u00e9grehajtani, amikor megbizonyosodtunk arr\u00f3l, hogy az \u00f6sszes c\u00e9lt\u00e1bla sora replik\u00e1lva lett, \u00e9s az eredm\u00e9ny egy gondosan \u00e1tkonvert\u00e1lt PostgreSQL adatb\u00e1zis lesz, amely nem hivatkozik az eredeti adatb\u00e1zisra vagy a replik\u00e1l\u00e1si s\u00e9m\u00e1ra (sch_chameleon).<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; chameleon stop_replica --config default --source mysql \n$&gt; chameleon detach_replica --config default --source mysql --debug<\/code><\/pre>\n<p><\/p>\n<p>Opci\u00f3k\u00e9nt a k\u00f6vetkez\u0151 parancsokkal elt\u00e1vol\u00edthatjuk az eredeti konfigur\u00e1ci\u00f3t \u00e9s replik\u00e1ci\u00f3s s\u00e9m\u00e1t.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; chameleon drop_source --config default --source mysql --debug\n$&gt; chameleon drop_replica_schema --config default --source mysql --debug<\/code><\/pre>\n<p><\/p>\n<h3 id=\"preimuschestva-pg_chameleon\">A pg_chameleon el\u0151nyei<\/h3>\n<p><\/p>\n<p>Egyszer\u0171 be\u00e1ll\u00edt\u00e1s \u00e9s konfigur\u00e1ci\u00f3.<br \/>\nK\u00e9nyelmes hibakeres\u00e9s \u00e9s anom\u00e1li\u00e1k azonos\u00edt\u00e1sa \u00e9rthet\u0151 hiba\u00fczenetekkel.<br \/>\nA replik\u00e1ci\u00f3hoz tov\u00e1bbi speci\u00e1lis t\u00e1bl\u00e1k is hozz\u00e1adhat\u00f3k az inicializ\u00e1l\u00e1s ut\u00e1n, an\u00e9lk\u00fcl, hogy megv\u00e1ltoztatn\u00e1nk a t\u00f6bbi konfigur\u00e1ci\u00f3t.<br \/>\nLehet t\u00f6bb forr\u00e1s adatb\u00e1zist be\u00e1ll\u00edtani egy c\u00e9ladatb\u00e1zishoz, ami nagyon k\u00e9nyelmes, ha adatokat egy vagy t\u00f6bb MySQL adatb\u00e1zisb\u00f3l szeretne egy PostgreSQL adatb\u00e1zisba egyes\u00edteni.<br \/>\nNem sz\u00fcks\u00e9ges a kiv\u00e1lasztott t\u00e1bl\u00e1k replik\u00e1l\u00e1sa.<\/p>\n<p><\/p>\n<h3 id=\"nedostatki-pg_chameleon\">A pg_chameleon h\u00e1tr\u00e1nyai<\/h3>\n<p><\/p>\n<p>Csak MySQL 5.5 vagy \u00fajabb verzi\u00f3val haszn\u00e1lhat\u00f3 forr\u00e1sk\u00e9nt, valamint PostgreSQL 9.5 vagy \u00fajabb verzi\u00f3val c\u00e9ladatb\u00e1zisk\u00e9nt.<br \/>\nMinden t\u00e1bl\u00e1nak rendelkeznie kell els\u0151dleges vagy egyedi kulccsal, k\u00fcl\u00f6nben a t\u00e1bl\u00e1k inicializ\u00e1l\u00f3dnak az init_replica folyamat sor\u00e1n, de nem replik\u00e1l\u00f3dnak.<br \/>\nEgyszeri replik\u00e1ci\u00f3 \u2014 csak MySQL-b\u00f3l PostgreSQL-be. Ez\u00e9rt csak az \"akt\u00edv-passz\u00edv\" s\u00e9m\u00e1hoz alkalmas.<br \/>\nA forr\u00e1s csak MySQL adatb\u00e1zis lehet, a PostgreSQL adatb\u00e1zis forr\u00e1sk\u00e9nt val\u00f3 t\u00e1mogat\u00e1sa csak k\u00eds\u00e9rleti \u00e9s korl\u00e1toz\u00e1sokkal rendelkezik (tudjon meg t\u00f6bbet <noindex><a rel=\"nofollow\" href=\"https:\/\/pgchameleon.org\/documents\/configuration_file.html#postgresql-source-type-experimental\">itt<\/a><\/noindex>)<\/p>\n<p><\/p>\n<h3 id=\"itogi-po-pg_chameleon\">\u00d6sszefoglal\u00f3 a pg_chameleon-r\u00f3l<\/h3>\n<p><\/p>\n<p>A pg_chameleon replik\u00e1ci\u00f3s m\u00f3dszere j\u00f3l alkalmas MySQL adatb\u00e1zis PostgreSQL-ra t\u00f6rt\u00e9n\u0151 migr\u00e1l\u00e1s\u00e1ra. A l\u00e9nyeges h\u00e1tr\u00e1ny, hogy a replik\u00e1ci\u00f3 csak egys\u00e9ges ir\u00e1ny\u00fa, ez\u00e9rt az adatb\u00e1zis szakemberek val\u00f3sz\u00edn\u0171leg nem szeretn\u00e9k haszn\u00e1lni e c\u00e9l \u00e9rdek\u00e9ben. Az egys\u00e9ges ir\u00e1ny\u00fa replik\u00e1ci\u00f3 probl\u00e9m\u00e1j\u00e1t azonban egy m\u00e1sik ny\u00edlt forr\u00e1sk\u00f3d\u00fa eszk\u00f6zzel, a SymmetricDS-sel meg lehet oldani.<\/p>\n<p><\/p>\n<p>Tov\u00e1bbi inform\u00e1ci\u00f3k\u00e9rt olvassa el a hivatalos dokument\u00e1ci\u00f3t <noindex><a rel=\"nofollow\" href=\"https:\/\/pgchameleon.org\/documents\/\">itt<\/a><\/noindex>. A parancssori \u00fatmutat\u00f3t itt tal\u00e1lhatja <noindex><a rel=\"nofollow\" href=\"https:\/\/pgchameleon.org\/documents\/usage.html#https:\/\/pgchameleon.org\/documents\/usage.html\">itt<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"obzor-symmetricds\">SymmetricDS \u00e1ttekint\u00e9se<\/h3>\n<p><\/p>\n<p>A SymmetricDS egy ny\u00edlt forr\u00e1sk\u00f3d\u00fa eszk\u00f6z, amely b\u00e1rmely adatb\u00e1zist b\u00e1rmilyen m\u00e1s n\u00e9pszer\u0171 adatb\u00e1zisra replik\u00e1l: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird \u00e9s m\u00e1s felh\u0151alap\u00fa adatb\u00e1zis p\u00e9ld\u00e1nyok, mint p\u00e9ld\u00e1ul a Redshift \u00e9s az Azure stb. El\u00e9rhet\u0151 funkci\u00f3k: adatb\u00e1zisok \u00e9s f\u00e1jlok szinkroniz\u00e1l\u00e1sa, t\u00f6bb vezet\u0151 adatb\u00e1zis replik\u00e1ci\u00f3ja, sz\u0171rt szinkroniz\u00e1l\u00e1s, \u00e1talak\u00edt\u00e1s \u00e9s egyebek. Ez egy Java-alap\u00fa eszk\u00f6z, amelyhez a standard JRE vagy JDK kiad\u00e1s sz\u00fcks\u00e9ges (8.0-\u00e1s verzi\u00f3 vagy \u00fajabb). Itt a forr\u00e1s adatb\u00e1zisban a v\u00e1ltoz\u00e1sok r\u00f6gz\u00edthet\u0151k a triggereken kereszt\u00fcl, \u00e9s a megfelel\u0151 c\u00e9ladatb\u00e1zisba csomagk\u00e9nt ir\u00e1ny\u00edthat\u00f3k.<\/p>\n<p><\/p>\n<h3 id=\"vozmozhnosti-symmetricds\">A SymmetricDS lehet\u0151s\u00e9gei<\/h3>\n<p><\/p>\n<p>Az eszk\u00f6z platformf\u00fcggetlen, teh\u00e1t k\u00e9t vagy t\u00f6bb k\u00fcl\u00f6nb\u00f6z\u0151 adatb\u00e1zis k\u00e9pes adatokat cser\u00e9lni.<br \/>\nA rel\u00e1ci\u00f3s adatb\u00e1zisok a v\u00e1ltoztat\u00e1sok r\u00f6gz\u00edt\u00e9s\u00e9vel vannak szinkroniz\u00e1lva, m\u00edg a f\u00e1jlrendszer alap\u00fa adatb\u00e1zisok a f\u00e1jlok szinkroniz\u00e1l\u00e1s\u00e1val m\u0171k\u00f6dnek.<br \/>\nK\u00e9tir\u00e1ny\u00fa replik\u00e1ci\u00f3 a Push \u00e9s Pull m\u00f3dszerek haszn\u00e1lat\u00e1val a szab\u00e1lyok alapj\u00e1n.<br \/>\nAz adat\u00e1tvitel v\u00e9dett h\u00e1l\u00f3zatokban \u00e9s alacsony s\u00e1vsz\u00e9less\u00e9g\u0171 h\u00e1l\u00f3zatokban lehets\u00e9ges.<br \/>\nAutomatikus helyre\u00e1ll\u00edt\u00e1s a csom\u00f3pontok \u00fajraindul\u00e1sakor, valamint automatikus konfliktusmegold\u00e1s.<br \/>\nFelh\u0151kompatibilit\u00e1s \u00e9s hat\u00e9kony API-b\u0151v\u00edtm\u00e9nyek.<\/p>\n<p><\/p>\n<h3 id=\"primer-1\">t\u00e1mad\u00e1sra<\/h3>\n<p><\/p>\n<p>A SymmetricDS k\u00e9tf\u00e9le m\u00f3don \u00e1ll\u00edthat\u00f3 be:<br \/>\nEgy vezet\u0151 (sz\u00fcl\u0151) csom\u00f3pont, amely k\u00f6zpontos\u00edtottan koordin\u00e1lja az adatok replik\u00e1ci\u00f3j\u00e1t k\u00e9t k\u00f6vet\u0151 (gyermek) csom\u00f3pont k\u00f6z\u00f6tt, \u00e9s az adatok cser\u00e9je a gyermek csom\u00f3pontok k\u00f6z\u00f6tt csak a sz\u00fcl\u0151n kereszt\u00fcl t\u00f6rt\u00e9nik.<br \/>\nEgy akt\u00edv csom\u00f3pont (1. csom\u00f3pont) k\u00e9pes replik\u00e1ci\u00f3s adatokat cser\u00e9lni egy m\u00e1sik akt\u00edv csom\u00f3ponttal (2. csom\u00f3pont) k\u00f6zvet\u00edt\u0151 n\u00e9lk\u00fcl.<\/p>\n<p><\/p>\n<p>Mindk\u00e9t esetben az adatok cser\u00e9je Push \u00e9s Pull m\u00f3dszerekkel t\u00f6rt\u00e9nik. Ebben a p\u00e9ld\u00e1ban az 'akt\u00edv-akt\u00edv' konfigur\u00e1ci\u00f3t vizsg\u00e1ljuk. A teljes architekt\u00fara le\u00edr\u00e1sa t\u00fal hossz\u00fa lenne, ez\u00e9rt n\u00e9zd meg <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/doc\/3.10\/html\/user-guide.html#_architecture\">a k\u00e9zik\u00f6nyvet<\/a><\/noindex>, hogy t\u00f6bbet megtudj a SymmetricDS m\u0171k\u00f6d\u00e9s\u00e9r\u0151l.<\/p>\n<p><\/p>\n<p>A SymmetricDS telep\u00edt\u00e9se rendk\u00edv\u00fcl egyszer\u0171: t\u00f6ltsd le az open-source verzi\u00f3 zip f\u00e1jlt, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/download\">innen<\/a><\/noindex> \u00e9s bontsd ki oda, ahov\u00e1 szeretn\u00e9d. Az al\u00e1bbi t\u00e1bl\u00e1zat tartalmazza a SymmetricDS telep\u00edt\u00e9si hely\u00e9t \u00e9s verzi\u00f3j\u00e1t az adott p\u00e9ld\u00e1ban, valamint az adatb\u00e1zis verzi\u00f3kat, a Linux verzi\u00f3kat, az IP-c\u00edmeket \u00e9s a portokat mindk\u00e9t csom\u00f3pont sz\u00e1m\u00e1ra.<\/p>\n<p><\/p>\n<p>Gazda<br \/>\nvm1<br \/>\nvm2<\/p>\n<p><strong>Oper\u00e1ci\u00f3s rendszer verzi\u00f3ja<\/strong><br \/>\nCentOS Linux 7.6 x86_64<br \/>\nCentOS Linux 7.6 x86_64<\/p>\n<p><strong>DB szerver verzi\u00f3ja<\/strong><br \/>\nMySQL 5.7.26<br \/>\nPostgreSQL 10.5<\/p>\n<p><strong>DB port<\/strong><br \/>\n3306<br \/>\n5832<\/p>\n<p><strong>IP-c\u00edm<\/strong><br \/>\n192.168.1.107<br \/>\n192.168.1.112<\/p>\n<p><strong>SymmetricDS verzi\u00f3<\/strong><br \/>\nSymmetricDS 3.9<br \/>\nSymmetricDS 3.9<\/p>\n<p><strong>SymmetricDS telep\u00edt\u00e9si \u00fatvonal<\/strong><br \/>\n\/usr\/local\/symmetric-server-3.9.20<br \/>\n\/usr\/local\/symmetric-server-3.9.20<\/p>\n<p><strong>SymmetricDS csom\u00f3pont neve<\/strong><br \/>\ncorp-000<br \/>\nstore-001<\/p>\n<p><\/p>\n<p>Itt a SymmetricDS-t a \/usr\/local\/symmetric-server-3.9.20 k\u00f6nyvt\u00e1rba telep\u00edtj\u00fck, ahol k\u00fcl\u00f6nb\u00f6z\u0151 almapp\u00e1k \u00e9s f\u00e1jlok t\u00e1rol\u00f3dnak. Minket az almapp\u00e1k samples \u00e9s engines \u00e9rdekelnek. A samples k\u00f6nyvt\u00e1rban a csom\u00f3ponti tulajdons\u00e1gokkal rendelkez\u0151 konfigur\u00e1ci\u00f3s f\u00e1jlok p\u00e9ld\u00e1i, valamint SQL szkriptek p\u00e9ld\u00e1i tal\u00e1lhat\u00f3ak, amelyek seg\u00edts\u00e9g\u00e9vel gyorsan elindulhatunk a bemutat\u00f3val.<\/p>\n<p><\/p>\n<p>A samples k\u00f6nyvt\u00e1rban h\u00e1rom konfigur\u00e1ci\u00f3s f\u00e1jl tal\u00e1lhat\u00f3, amelyek a csom\u00f3ponti tulajdons\u00e1gokat tartalmazz\u00e1k \u2013 a n\u00e9v jelzi a csom\u00f3pont jelleg\u00e9t egy adott s\u00e9m\u00e1ban.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">corp-000.properties\nstore-001.properties\nstore-002.properties<\/code><\/pre>\n<p><\/p>\n<p>A SymmetricDS minden sz\u00fcks\u00e9ges konfigur\u00e1ci\u00f3s f\u00e1jlt tartalmaz a h\u00e1rom csom\u00f3pontb\u00f3l \u00e1ll\u00f3 alap s\u00e9ma (1. lehet\u0151s\u00e9g) sz\u00e1m\u00e1ra, \u00e9s ugyanazokat a f\u00e1jlokat felhaszn\u00e1lhatjuk a k\u00e9t csom\u00f3pontos s\u00e9ma (2. lehet\u0151s\u00e9g) sz\u00e1m\u00e1ra is. A megfelel\u0151 konfigur\u00e1ci\u00f3s f\u00e1jlt lem\u00e1soljuk a samples k\u00f6nyvt\u00e1rb\u00f3l az engines-be a vm1 gazdag\u00e9pen. \u00cdgy n\u00e9z ki:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; cat engines\/corp-000.properties\nengine.name=corp-000\ndb.driver=com.mysql.jdbc.Driver\ndb.url=jdbc:mysql:\/\/192.168.1.107:3306\/replica_db?autoReconnect=true&amp;useSSL=false\ndb.user=root\ndb.password=admin123\nregistration.url=\nsync.url=http:\/\/192.168.1.107:31415\/sync\/corp-000\ngroup.id=corp\nexternal.id=000<\/code><\/pre>\n<p><\/p>\n<p>Ez a csom\u00f3pont a SymmetricDS konfigur\u00e1ci\u00f3ban corps-000 n\u00e9ven szerepel, \u00e9s az adatb\u00e1zis-kapcsolatot a mysql jdbc meghajt\u00f3 kezeli, amely a fenti csatlakoz\u00e1si karakterl\u00e1ncot \u00e9s a bejelentkez\u00e9si adatokat haszn\u00e1lja. Mi a replica_db adatb\u00e1zishoz kapcsol\u00f3dunk, \u00e9s az schema l\u00e9trehoz\u00e1sakor t\u00e1bl\u00e1k j\u00f6nnek l\u00e9tre. A sync.url megjelen\u00edti a csom\u00f3pont szinkroniz\u00e1l\u00e1shoz sz\u00fcks\u00e9ges \u00f6sszek\u00f6ttet\u00e9s hely\u00e9t.<\/p>\n<p><\/p>\n<p>A 2. csom\u00f3pont az vm2 hoszton store-001-k\u00e9nt van be\u00e1ll\u00edtva, m\u00edg a t\u00f6bbi az al\u00e1bbi node.properties f\u00e1jlban tal\u00e1lhat\u00f3. A store-001 a PostgreSQL adatb\u00e1zist haszn\u00e1lja, m\u00edg a pgdb_replica az replik\u00e1ci\u00f3hoz haszn\u00e1lt adatb\u00e1zis. A registration.url lehet\u0151v\u00e9 teszi, hogy az vm2 hoszt kommunik\u00e1ljon az vm1 hoszttal \u00e9s megkapja annak konfigur\u00e1ci\u00f3s r\u00e9szleteit.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; cat engines\/store-001.properties\nengine.name=store-001\ndb.driver=org.postgresql.Driver\ndb.url=jdbc:postgresql:\/\/192.168.1.112:5832\/pgdb_replica\ndb.user=postgres\ndb.password=admin123\nregistration.url=http:\/\/192.168.1.107:31415\/sync\/corp-000\ngroup.id=store\nexternal.id=001<\/code><\/pre>\n<p><\/p>\n<p>A k\u00e9sz SymmetricDS p\u00e9lda tartalmazza a k\u00e9tszeres replik\u00e1ci\u00f3 be\u00e1ll\u00edt\u00e1s\u00e1hoz sz\u00fcks\u00e9ges param\u00e9tereket k\u00e9t adatb\u00e1zisz szerver (k\u00e9t csom\u00f3pont) k\u00f6z\u00f6tt. Az al\u00e1bbi l\u00e9p\u00e9sek az vm1 (corp-000) hoszton hajtand\u00f3k v\u00e9gre, amely l\u00e9trehoz egy p\u00e9ldas\u00e9m\u00e1t 4 t\u00e1bl\u00e1val. Ezut\u00e1n a create-sym-tables parancs a symadmin seg\u00edts\u00e9g\u00e9vel l\u00e9trehozza a replik\u00e1ci\u00f3s ir\u00e1nyelveket \u00e9s szab\u00e1lyokat tartalmaz\u00f3 k\u00f6nyvt\u00e1rt\u00e1bl\u00e1kat. V\u00e9g\u00fcl p\u00e9ldaadatokat t\u00f6ltenek be a t\u00e1bl\u00e1kba.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vm1$&gt; cd \/usr\/local\/symmetric-server-3.9.20\/bin\nvm1$&gt; .\/dbimport --engine corp-000 --format XML create_sample.xml\nvm1$&gt; .\/symadmin --engine corp-000 create-sym-tables\nvm1$&gt; .\/dbimport --engine corp-000 insert_sample.sql<\/code><\/pre>\n<p><\/p>\n<p>A p\u00e9ld\u00e1ban az item \u00e9s item_selling_price t\u00e1bl\u00e1k automatikusan be vannak \u00e1ll\u00edtva a corp-000 \u00e9s store-001 k\u00f6z\u00f6tti replik\u00e1ci\u00f3ra, m\u00edg a sale (sale_transaction \u00e9s sale_return_line_item) t\u00e1bl\u00e1k automatikusan be vannak \u00e1ll\u00edtva a store-001 \u00e9s corp-000 k\u00f6z\u00f6tti replik\u00e1ci\u00f3ra. Most l\u00e9trehozzuk a s\u00e9m\u00e1t a PostgreSQL adatb\u00e1zisban az vm2 (store-001) hoszton, hogy felk\u00e9sz\u00fclj\u00f6n az adatok fogad\u00e1s\u00e1ra a corp-000- t\u00f3l.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vm2$&gt; cd \/usr\/local\/symmetric-server-3.9.20\/bin\nvm2$&gt; .\/dbimport --engine store-001 --format XML create_sample.xml<\/code><\/pre>\n<p><\/p>\n<p>Elengedhetetlen, hogy ellen\u0151rizz\u00fck, hogy vm1 MySQL adatb\u00e1zis\u00e1ban vannak-e p\u00e9ld\u00e1k a t\u00e1bl\u00e1kra \u00e9s a SymmetricDS katal\u00f3gust\u00e1bl\u00e1kra. Vegy\u00fck \u00e9szre, hogy a SymmetricDS rendszer t\u00e1bl\u00e1i (sym_ el\u0151taggal) jelenleg csak corp-000 csom\u00f3ponton el\u00e9rhet\u0151k, mivel itt hajtottuk v\u00e9gre a create-sym-tables parancsot, \u00e9s itt kezelj\u00fck a replik\u00e1ci\u00f3t. A store-001 csom\u00f3pont adatb\u00e1zis\u00e1ban mind\u00f6ssze 4 p\u00e9ldat\u00e1bl\u00e1nak lesz helye adat n\u00e9lk\u00fcl.<\/p>\n<p><\/p>\n<p>Ennyi. A k\u00f6rnyezet k\u00e9szen \u00e1ll a sym szerverfolyamatok elind\u00edt\u00e1s\u00e1ra mindk\u00e9t csom\u00f3ponton, ahogyan az al\u00e1bb l\u00e1that\u00f3.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vm1$&gt; cd \/usr\/local\/symmetric-server-3.9.20\/bin\nvm1$&gt; sym 2&gt;&amp;1 &amp;<\/code><\/pre>\n<p><\/p>\n<p>A napl\u00f3bejegyz\u00e9sek a SymmetricDS telep\u00edt\u00e9si k\u00f6nyvt\u00e1r\u00e1ban tal\u00e1lhat\u00f3 log f\u00e1jlba (symmetric.log) \u00e9s a standard kimenetre ker\u00fclnek. A sym kiszolg\u00e1l\u00f3 mostant\u00f3l elind\u00edthat\u00f3 a store-001 csom\u00f3ponton.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vm2$&gt; cd \/usr\/local\/symmetric-server-3.9.20\/bin\nvm2$&gt; sym 2&gt;&amp;1 &amp;<\/code><\/pre>\n<p><\/p>\n<p>Ha a sym kiszolg\u00e1l\u00f3 folyamatot a vm2 hoszton ind\u00edtjuk el, \u00faj t\u00e1bl\u00e1kat hoz l\u00e9tre a SymmetricDS katalogus\u00e1ba a PostgreSQL adatb\u00e1zisban. Ha a sym kiszolg\u00e1l\u00f3 folyamatot mindk\u00e9t csom\u00f3ponton elind\u00edtjuk, akkor azok egy\u00fcttm\u0171k\u00f6dnek, hogy replik\u00e1lj\u00e1k az adatokat a corp-000-b\u00f3l a store-001-be. Ha n\u00e9h\u00e1ny m\u00e1sodperc m\u00falva megk\u00e9rdezz\u00fck mind a 4 t\u00e1bl\u00e1t mindk\u00e9t oldalon, l\u00e1thatjuk, hogy a replik\u00e1ci\u00f3 sikeresen megt\u00f6rt\u00e9nt. Vagy az al\u00e1bbi parancs seg\u00edts\u00e9g\u00e9vel elv\u00e9gezhetj\u00fck a kezdeti bet\u00f6lt\u00e9st a store-001 csom\u00f3pontra a corp-000-b\u00f3l.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vm1$&gt; .\/symadmin --engine corp-000 reload-node 001<\/code><\/pre>\n<p><\/p>\n<p>Ezen a ponton \u00faj rekord ker\u00fcl be az item t\u00e1bl\u00e1ba a MySQL adatb\u00e1zisba a corp-000 csom\u00f3ponton (hoszt: vm1), \u00e9s ellen\u0151rizhetj\u00fck annak replik\u00e1ci\u00f3j\u00e1t a PostgreSQL adatb\u00e1zisba a store-001 csom\u00f3ponton (hoszt: vm2). A Pull m\u0171velet l\u00e1that\u00f3, amely adatokat mozgathat a corp-000-b\u00f3l a store-001-be.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">mysql&gt; insert into item values ('22000002','Jelly Bean');\nQuery OK, 1 row affected (0.00 sec)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">vm2$&gt; psql -p 5832 -U postgres pgdb_replica -c \"select * from item\"\n item_id  |   name\n----------+-----------\n 11000001 | Yummy Gum\n 22000002 | Jelly Bean\n(2 rows)<\/code><\/pre>\n<p><\/p>\n<p>Ahhoz, hogy Push m\u0171veletet hajtsunk v\u00e9gre az adatok \u00e1tk\u00f6lt\u00f6ztet\u00e9s\u00e9re a store-001-b\u0151l a corp-000-ba, be kell illeszten\u00fcnk egy rekordot a sale_transaction t\u00e1bl\u00e1ba, \u00e9s ellen\u0151rizn\u00fcnk kell, hogy a replik\u00e1ci\u00f3 megt\u00f6rt\u00e9nt-e.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/xpaste.pro\/p\/B23cJ4sP\">Eredm\u00e9ny.<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Sikeres k\u00e9tsir\u00e1ny\u00fa replik\u00e1ci\u00f3t l\u00e1thatunk a t\u00e1bl\u00e1k k\u00f6z\u00f6tt a MySQL \u00e9s PostgreSQL adatb\u00e1zisokban. \u00daj felhaszn\u00e1l\u00f3i t\u00e1bl\u00e1k replik\u00e1ci\u00f3j\u00e1nak be\u00e1ll\u00edt\u00e1s\u00e1hoz a k\u00f6vetkez\u0151 l\u00e9p\u00e9seket kell k\u00f6vetn\u00fcnk. P\u00e9ldak\u00e9nt l\u00e9trehozzuk a t1 t\u00e1bl\u00e1t, \u00e9s az al\u00e1bbiak szerint \u00e1ll\u00edtjuk be a replik\u00e1ci\u00f3s szab\u00e1lyait. Ezzel csak a corp-000-b\u00f3l a store-001-be t\u00f6rt\u00e9n\u0151 replik\u00e1ci\u00f3t \u00e1ll\u00edtjuk be.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">mysql&gt; create table t1 (no integer);\nQuery OK, 0 rows affected (0.01 sec)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">mysql&gt; insert into sym_channel (channel_id,create_time,last_update_time) \nvalues ('t1',current_timestamp,current_timestamp);\nQuery OK, 1 row affected (0.01 sec)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">mysql&gt; insert into sym_trigger (trigger_id, source_table_name,channel_id,\nlast_update_time, create_time) values ('t1', 't1', 't1', current_timestamp,\ncurrent_timestamp);\nQuery OK, 1 row affected (0.01 sec)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">mysql&gt; insert into sym_trigger_router (trigger_id, router_id,\nInitial_load_order, create_time,last_update_time) values ('t1',\n'corp-2-store-1', 1, current_timestamp,current_timestamp);\nQuery OK, 1 row affected (0.01 sec)<\/code><\/pre>\n<p><\/p>\n<p>Ezut\u00e1n a konfigur\u00e1ci\u00f3 \u00e9rtes\u00edt\u00e9st kap a s\u00e9ma v\u00e1ltoz\u00e1s\u00e1r\u00f3l, azaz egy \u00faj t\u00e1bl\u00e1zat hozz\u00e1ad\u00e1s\u00e1r\u00f3l, a symadmin parancs sync-triggers argumentum\u00e1val, amely \u00fajb\u00f3l l\u00e9trehozza a t\u00e1bl\u00e1zatdefin\u00edci\u00f3khoz illeszked\u0151 trigger-eket. A send-schema v\u00e9grehajt\u00e1sa a s\u00e9ma m\u00f3dos\u00edt\u00e1sainak elk\u00fcld\u00e9s\u00e9re a store-001 csom\u00f3pontnak, \u00e9s a t1 t\u00e1bl\u00e1zat replik\u00e1l\u00e1sa be van \u00e1ll\u00edtva.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vm1$&gt; .\/symadmin -e corp-000 --node=001 sync-triggers    \nvm1$&gt; .\/symadmin send-schema -e corp-000 --node=001 t1<\/code><\/pre>\n<p><\/p>\n<h3 id=\"preimuschestva-symmetricds\">A SymmetricDS el\u0151nyei<\/h3>\n<p><\/p>\n<p>Egyszer\u0171 telep\u00edt\u00e9s \u00e9s konfigur\u00e1ci\u00f3, bele\u00e9rtve a h\u00e1rom vagy k\u00e9t csom\u00f3pont sz\u00e1m\u00e1ra el\u0151k\u00e9sz\u00edtett f\u00e1jlok k\u00e9szlet\u00e9t a s\u00e9ma l\u00e9trehoz\u00e1s\u00e1hoz.<br \/>\nAdatb\u00e1zisok platformok k\u00f6z\u00f6tti kompatibilit\u00e1sa \u00e9s platformf\u00fcggetlens\u00e9ge, bele\u00e9rtve a szervereket, laptopokat \u00e9s mobil eszk\u00f6z\u00f6ket.<br \/>\nB\u00e1rmilyen adatb\u00e1zis replik\u00e1l\u00e1sa b\u00e1rmilyen m\u00e1s adatb\u00e1zisra helyben, WAN-on vagy felh\u0151ben.<br \/>\nOptim\u00e1lis m\u0171k\u00f6d\u00e9si lehet\u0151s\u00e9g egy p\u00e1r adatb\u00e1zissal vagy ak\u00e1r t\u00f6bb ezerrel a k\u00e9nyelmes replik\u00e1ci\u00f3 \u00e9rdek\u00e9ben.<br \/>\nFizet\u0151s verzi\u00f3 grafikus felhaszn\u00e1l\u00f3i fel\u00fclettel \u00e9s kiv\u00e1l\u00f3 t\u00e1mogat\u00e1ssal.<\/p>\n<p><\/p>\n<h3 id=\"nedostatki-symmetricds\">A SymmetricDS h\u00e1tr\u00e1nyai<\/h3>\n<p><\/p>\n<p>K\u00e9zzel kell meghat\u00e1rozni a replik\u00e1ci\u00f3s szab\u00e1lyokat \u00e9s ir\u00e1nyt az SQL oper\u00e1torok seg\u00edts\u00e9g\u00e9vel a katalogiz\u00e1l\u00e1si t\u00e1bl\u00e1zatok bet\u00f6lt\u00e9s\u00e9hez, ami n\u00e9ha k\u00e9nyelmetlen lehet.<br \/>\nSok t\u00e1bl\u00e1zat be\u00e1ll\u00edt\u00e1sa a replik\u00e1ci\u00f3hoz f\u00e1raszt\u00f3 lehet, hacsak nem haszn\u00e1lunk szkripteket az SQL oper\u00e1torok l\u00e9trehoz\u00e1s\u00e1hoz, amelyek meghat\u00e1rozz\u00e1k a szab\u00e1lyokat \u00e9s ir\u00e1nyokat.<br \/>\nT\u00fal sok inform\u00e1ci\u00f3 ker\u00fcl a napl\u00f3kba, \u00e9s n\u00e9ha rendet kell tenni a napl\u00f3f\u00e1jlban, hogy ne foglaljon el t\u00fal sok helyet.<\/p>\n<p><\/p>\n<h3 id=\"itogi-po-symmetricds\">\u00d6sszefoglal\u00e1s a SymmetricDS-r\u0151l<\/h3>\n<p><\/p>\n<p>A SymmetricDS lehet\u0151v\u00e9 teszi a k\u00e9t, h\u00e1rom \u00e9s ak\u00e1r t\u00f6bb ezer csom\u00f3pont k\u00f6z\u00f6tti k\u00e9tir\u00e1ny\u00fa replik\u00e1ci\u00f3 be\u00e1ll\u00edt\u00e1s\u00e1t, amely replik\u00e1lja \u00e9s szinkroniz\u00e1lja a f\u00e1jlokat. Ez egy egyedi eszk\u00f6z, amely \u00f6n\u00e1ll\u00f3an v\u00e9grehajt sz\u00e1mos feladatot, p\u00e9ld\u00e1ul automatikus adat-helyre\u00e1ll\u00edt\u00e1st hossz\u00fa le\u00e1ll\u00e1s ut\u00e1n a csom\u00f3ponton, v\u00e9dett \u00e9s hat\u00e9kony adat\u00e1tvitelt a csom\u00f3pontok k\u00f6z\u00f6tt HTTPS-en kereszt\u00fcl, automatikus konfliktuskezel\u00e9st szab\u00e1lyk\u00e9szlet alapj\u00e1n stb. A SymmetricDS b\u00e1rmilyen adatb\u00e1zis k\u00f6z\u00f6tt v\u00e9gez replik\u00e1ci\u00f3t, \u00edgy a legk\u00fcl\u00f6nb\u00f6z\u0151bb forgat\u00f3k\u00f6nyvekben haszn\u00e1lhat\u00f3, bele\u00e9rtve az migr\u00e1ci\u00f3t, a verzi\u00f3v\u00e1lt\u00e1st, eloszt\u00e1st, adatfeldolgoz\u00e1st \u00e9s \u00e1talak\u00edt\u00e1st k\u00fcl\u00f6nf\u00e9le platformokon.<\/p>\n<p><\/p>\n<p>A p\u00e9lda az hivatalos <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/doc\/3.9\/html\/tutorials.html\">r\u00f6vid \u00fatmutat\u00f3 alapj\u00e1n<\/a><\/noindex> a SymmetricDS-hez. A <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/doc\/3.9\/html\/user-guide.html\">felhaszn\u00e1l\u00f3i k\u00e9zik\u00f6nyvben<\/a><\/noindex> r\u00e9szletesen bemutatja azokat a k\u00fcl\u00f6nb\u00f6z\u0151 fogalmakat, amelyek a SymmetricDS seg\u00edts\u00e9g\u00e9vel t\u00f6rt\u00e9n\u0151 replik\u00e1ci\u00f3 be\u00e1ll\u00edt\u00e1s\u00e1val kapcsolatosak.<\/p>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/467313\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042f \u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 PostgreSQL \u0438 MySQL, \u0430 \u0435\u0449\u0435 \u043e \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u0431\u044b\u0447\u043d\u043e \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u043c\u0438, \u0438 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0421\u0423\u0411\u0414 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439. \u0411\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 PostgreSQL \u0438 MySQL \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438, \u043d\u043e \u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28635,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38146","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042f \u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/perekrestnaya-replikatsiya-mezhdu-postgresql-i-mysql\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043d\u0430\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 PostgreSQL \u0438 MySQL | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042f \u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/perekrestnaya-replikatsiya-mezhdu-postgresql-i-mysql\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:21:54+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:21:54+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kereszt-replik\u00e1ci\u00f3 a PostgreSQL \u00e9s a MySQL k\u00f6z\u00f6tt | ProHoster","description":"\u00c1ttekint\u00e9st adok \u00e1r\u00f3l.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/perekrestnaya-replikatsiya-mezhdu-postgresql-i-mysql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043d\u0430\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 PostgreSQL \u0438 MySQL | ProHoster","og:description":"\u042f \u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/perekrestnaya-replikatsiya-mezhdu-postgresql-i-mysql","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:21:54+00:00","article:modified_time":"2019-10-31T19:21:54+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38146","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 20:38:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:59:41","updated":"2026-01-23 20:38:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/38146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=38146"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/38146\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/28635"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=38146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=38146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=38146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}