{"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\/et\/blog\/administrirovanie\/perekrestnaya-replikatsiya-mezhdu-postgresql-i-mysql","title":{"rendered":"Ristrepilatsioon PostgreSQL ja MySQL vahel","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ristrepilatsioon PostgreSQL ja MySQL vahel\" src=\"\/wp-content\/uploads\/2019\/09\/47cf48f9024f406d625ecb6b21020c74.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ma r\u00e4\u00e4gin l\u00fchidalt ristrepist PostgreSQL ja MySQL vahel ning ka meetoditest, kuidas nende kahe andmebaasi serveri vahel ristrepist seadistada. T\u00fc\u00fcpiliselt nimetatakse ristrepis olevate andmebaaside puhul homogeenseid, ja see on mugav meetod \u00fcleminekuks \u00fchest relatsioonilisest DB-serverist teise.<\/p>\n<p><\/p>\n<p>PostgreSQL ja MySQL andmebaase peetakse relatsioonilisteks, kuid koos t\u00e4iendavate laiendustega pakuvad nad ka NoSQL v\u00f5imalusi. Siin arutame ristrepist PostgreSQL ja MySQL vahel relatsiooniliste andmebaasi perspektiivist.<\/p>\n<p><\/p>\n<p>Me ei kavatse kirjeldada kogu sisemist toimimist, vaid ainult p\u00f5hialuseid, et saaksite \u00fclevaate andmebaasi serverite vahelise replikatsiooni seadistamisest, eeliste, piirangute ja kasutusstsenaariumide kohta.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Tavaliselt toimub replikatsioon kahe identse andmebaasi serveri vahel kas binaarses re\u017eiimis v\u00f5i p\u00e4ringute abil peamise s\u00f5lme (tuntud ka kui v\u00e4ljaandja, peamine v\u00f5i aktiivne) ja alam s\u00f5lme (tellija, ootav v\u00f5i passiivne) vahel. Replikatsiooni eesm\u00e4rk on pakkuda reaalajas koopia peamisest andmebaasist alam pooles. Andmed edastatakse peamisest alammeheni, seega aktiivsest passiivsesse, sest replikatsioon toimub ainult \u00fches suunas. Kuid saate seadistada ka kahe andmebaasi vaheliseks replikatsiooniks m\u00f5lemat pidi, et andmed edastataks alamast peamisele aktiivselt-passiivselt. K\u00f5ik see, sealhulgas kaskaadne replikatsioon, on v\u00f5imalik kahe v\u00f5i enama identse andmebaasi serveri vahel, aktiivne-aktiivne v\u00f5i aktiivne-passiivne konfigureerimine s\u00f5ltub vajadusest, nende v\u00f5imaluste k\u00e4ttesaadavusest algses konfiguratsioonis v\u00f5i v\u00e4limiste lahenduste kasutamisest ning olemasolevatest kompromissidest.<\/p>\n<p><\/p>\n<p>\u00dclaltoodud konfiguratsioon on v\u00f5imalik erinevate andmebaasi serverite vahel. Serverit saab seadistada replikatsiooniandmete vastuv\u00f5tmiseks teiselt andmebaasi serverilt ning samal ajal hoida replikatsiooniandmete snapshot'e reaalajas. MySQL ja PostgreSQL pakuvad enamikku neist konfiguratsioonidest oma j\u00f5ududega v\u00f5i kolmandate osapoolte laiendustega, sealhulgas binaarse p\u00e4eviku, ketta lukustamise ning operaatorite ja ridade p\u00f5histe meetodite kaudu.<\/p>\n<p><\/p>\n<p>Ristkasutuse replikatsioon MySQL ja PostgreSQL vahel on vajalik andmebaasi serverite \u00fchekordseks migreerimiseks. Need andmebaasid kasutavad erinevaid protokolle, mist\u00f5ttu ei saa neid otse siduda. Andmevahetuse korraldamiseks v\u00f5ib kasutada v\u00e4list avatud koodiga t\u00f6\u00f6riista, n\u00e4iteks pg_chameleon.<\/p>\n<p><\/p>\n<h3 id=\"chto-takoe-pg_chameleon\">Mis on pg_chameleon<\/h3>\n<p><\/p>\n<p>pg_chameleon on MySQL-st PostgreSQL-i replikatsioonis\u00fcsteem Python 3-l. Sellel on kasutusel avatud koodiga raamatukogu mysql-replication, samuti Pythonis. Ridade pildid eraldatakse MySQL-i tabelitest ja salvestatakse JSONB objektidena PostgreSQL-i andmebaasi, seej\u00e4rel de\u0161ifreeritakse need pl\/pgsql-funktsiooniga ja taastatakse PostgreSQL-i andmebaasis.<\/p>\n<p><\/p>\n<h3 id=\"vozmozhnosti-pg_chameleon\">pg_chameleon'i v\u00f5imalused<\/h3>\n<p><\/p>\n<p>Mitmeid MySQL skeeme \u00fchelt klastrilt saab replitseerida \u00fchte siht PostgreSQL andmebaasi '\u00fcks paljudele' konfiguratsiooniga.<br \/>\nAlgse ja sihtskeemi nimed ei tohi kattuda.<br \/>\nReplikatsiooniandmeid saab eemaldada MySQL-i kaskaadse replikatsiooni kaudu.<br \/>\nTabelid, mis ei saa replitseerida v\u00f5i tekitavad vigu, j\u00e4etakse v\u00e4lja.<br \/>\nIga replikatsioonifunktsiooni haldavad demonid.<br \/>\nKontrollimine YAML-p\u00f5histe parameetrite ja konfiguratsioonifailidega.<\/p>\n<p><\/p>\n<h3 id=\"primer\">N\u00e4ide<\/h3>\n<p><\/p>\n<p>Host<br \/>\nvm1<br \/>\nvm2<\/p>\n<p><strong>OS versioon<\/strong><br \/>\nCentOS Linux 7.6 x86_64<br \/>\nCentOS Linux 7.5 x86_64<\/p>\n<p><strong>Andmebaasi serveri versioon<\/strong><br \/>\nMySQL 5.7.26<br \/>\nPostgreSQL 10.5<\/p>\n<p><strong>Andmebaasi port<\/strong><br \/>\n3306<br \/>\n5433<\/p>\n<p><strong>IP-aadress<\/strong><br \/>\n192.168.56.102<br \/>\n192.168.56.106<\/p>\n<p><\/p>\n<p>Alustamiseks valmistage ette k\u00f5ik vajalikud komponendid pg_chameleon'i installimiseks. Selles n\u00e4ites on paigaldatud Python 3.6.8, mis loob virtuaalse keskkonna ja aktiveerib selle.<\/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>P\u00e4rast Python 3.6 eduka installimist tuleb t\u00e4ita \u00fclej\u00e4\u00e4nud n\u00f5uded, n\u00e4iteks luua ja aktiveerida virtuaalne keskkond. Samuti uuendatakse pip moodulit kaheks viimase versioonini, et v\u00e4ltida v\u00e4rskendatud versiooniga seotud uusi vigu.<\/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>Seej\u00e4rel kutsume pg_chameleon'i (chameleon \u2014 see on k\u00e4sk) argumendiga set_configuration_files, et aktiveerida pg_chameleon ja luua oletuslikud kataloogid ja konfiguratsioonifailid.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">(venv) $&gt; chameleon set_configuration_files\nloomas katalooge \/root\/.pg_chameleon\nloomas katalooge \/root\/.pg_chameleon\/configuration\/\nloomas katalooge \/root\/.pg_chameleon\/logs\/\nloomas katalooge \/root\/.pg_chameleon\/pid\/\nkopeerimine konfiguratsiooni n\u00e4itest \/root\/.pg_chameleon\/configuration\/\/config-example.yml<\/code><\/pre>\n<p><\/p>\n<p>N\u00fc\u00fcd loome config-example.yml koopia nimega default.yml, et see saaks vaikimisi seadete failiks. Selle n\u00e4ite konfiguratsioonifaili n\u00e4idis on toodud allpool.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; cat default.yml\n---\n#globaalsettings\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 lubab kasutajal vaikimisi t\u00fc\u00fcpide konversiooni muuta teiseks.\ntype_override:\n  \"tinyint(1)\":\n    override_to: boolean\n    override_tables:\n      - \"*\"\n\n#postgresi siht\u00fchenduse seaded\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 #skipib insertid tabelis delphis_mediterranea.foo\n      delete:\n        - delphis_mediterranea #skipib kustutamised skeemis delphis_mediterranea\n      update:<\/code><\/pre>\n<p><\/p>\n<p>Antud n\u00e4ite konfiguratsioonifail on pg_chameleon'ile kohandatud versioon, millel on v\u00e4iksed muudatused vastavalt alg- ja sihtkeskkondadele, ning allpool on antud \u00fclevaade erinevatest konfiguratsioonifaili jaotustest.<\/p>\n<p><\/p>\n<p>Konfiguratsioonifailis default.yml on globaalsete seade jaotus (global settings), kus saab hallata selliseid seadeid nagu lukustusfaili asukoht, logide asukoht, logide s\u00e4ilitamise periood jne. Seej\u00e4rel on t\u00fc\u00fcpide \u00fclekuulamise jaotus (type override), kus on m\u00e4\u00e4ratud reeglite kogum t\u00fc\u00fcpide \u00fclekandmiseks replikatsiooni ajal. Vaikimisi reeglina on t\u00fc\u00fcpide \u00fclekuulamise reegel, mis konverteerib tinyint(1) booleaniks. J\u00e4rgmises jaotuses m\u00e4\u00e4rame sihtandmebaasi \u00fchenduse \u00fcksikasjad. Meie puhul on see PostgreSQL andmebaas, mida nimetatakse pg_conn-iks. Viimasena m\u00e4\u00e4rame allika andmed, st algandmebaasi \u00fchenduse parameetrid, alg- ja sihtandmebaasi skeemide vastavuse, tabelid, mida tuleb vahele j\u00e4tta, ootamise aja, m\u00e4lu, partii suuruse. Pange t\u00e4hele, et \u201esources\u201c on mitmuses, mis t\u00e4hendab, et v\u00f5ime lisada mitmeid algandmebaase \u00fche sihta jaoks, et seadistada \u201epalju \u00fchele\u201c konfiguratsioon.<\/p>\n<p><\/p>\n<p>Andmebaas world_x n\u00e4ites sisaldab 4 tabelit ridadega, mida MySQL-i kogukond pakub n\u00e4itena. Seda saab laadida <noindex><a rel=\"nofollow\" href=\"https:\/\/dev.mysql.com\/doc\/index-other.html\">siin<\/a><\/noindex>. N\u00e4idandmebaas on saadaval tar- ja tihendatud arhiivina koos juhistega ridade loomiseks ja importimiseks.<\/p>\n<p><\/p>\n<p>MySQL-i ja PostgreSQL-i andmebaasides luuakse spetsiaalne kasutaja sama nimega usr_replica. MySQL-is antakse sellele t\u00e4iendavad \u00f5igused k\u00f5igi replitseeritavate tabelite lugemiseks.<\/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>PostgreSQL-i k\u00fcljes luuakse andmebaas db_replica, mis saab muutused MySQL-i andmebaasist. Kasutaja usr_replica PostgreSQL-is konfigureeritakse automaatselt kahele skeemile pgworld_x ja sch_chameleon, mis sisaldavad vastavalt tegelikke replitseeritud tabeleid ja replitseerimise katalooge. Automaatse konfiguratsiooni tagab argument create_replica_schema, nagu allpool n\u00e4ete.<\/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>MySQL-i andmebaas seadistatakse m\u00f5nede parameetrite muutmisega, et valmistada see ette replitseerimiseks, nagu allpool n\u00e4idatud. Andmebaasi server tuleb taask\u00e4ivitada, et muudatused j\u00f5ustuksid.<\/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>Praegu on oluline kontrollida \u00fchendust m\u00f5lema andmebaasi serveriga, et pg_chameleon k\u00e4ivitamisel ei tekiks probleeme.<\/p>\n<p><\/p>\n<p>PostgreSQL-i s\u00f5lmes:<\/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>MySQL-i s\u00f5lmes:<\/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>J\u00e4rgmised kolm k\u00e4sku pg_chameleon (chameleon) valmistavad keskkonna ette, lisavad allika ja initsialiseerivad replikatsiooni. Argument create_replica_schema pg_chameleon'is loob vaikimisi skeemi (sch_chameleon) ja replitseerimise skeemi (pgworld_x) PostgreSQL-i andmebaasis, nagu me juba r\u00e4\u00e4kisime. Argument add_source lisab algse andmebaasi konfiguratsiooni, lugedes konfiguratsioonifaili (default.yml), ja meie juhul on see mysql, ning init_replica initsialiseerib konfiguratsiooni faili parameetrite p\u00f5hjal.<\/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>Nende kolme k\u00e4su v\u00e4ljund n\u00e4itab ilmselgelt nende eduka t\u00e4itmise. K\u00f5ik t\u00f5rked v\u00f5i s\u00fcntaktilised vead n\u00e4idatakse lihtsate ja arusaadavate s\u00f5numitega, mis pakuvad probleemi lahendamise vihjeid.<\/p>\n<p><\/p>\n<p>L\u00f5puks k\u00e4ivitame replikatsiooni k\u00e4suga start_replica ja saame eduka t\u00e4itmise s\u00f5numi.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; chameleon start_replica --config default --source mysql \nout: K\u00e4ivitan replikatsiooni protsessi allikast mysql<\/code><\/pre>\n<p><\/p>\n<p>Replikatsiooni staatust saab k\u00fcsida argumentidega show_status ja vead vaadata argumentide show_errors abil.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/xpaste.pro\/p\/iYMdAf0b\">Tulemus.<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Kuidas juba mainitud, iga replikatsioonifunktsiooni haldavad demonid. Nende vaatamiseks k\u00fcsime Linuxi protsesside tabelit k\u00e4suga ps, nagu allpool n\u00e4idatud.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/xpaste.pro\/p\/59GfdvHA\">Tulemus.<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Replikatsioon ei loeta seadistatud, kuni me ei testi seda reaalajas, nagu allpool n\u00e4idatud. Loome tabeli, sisestame paar kirjet MySQL andmebaasi ja kutsume argumenti sync_tables pg_chameleon'is, et uuendada demonid ja replikeerida tabelit koos kirjetega PostgreSQL andmebaasis.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">mysql&gt; create table t1 (n1 int primary key, n2 varchar(10));\nK\u00fcsimus OK, 0 rida m\u00f5jutatud (0.01 sec)\nmysql&gt; insert into t1 values (1,'one');\nK\u00fcsimus OK, 1 rida m\u00f5jutatud (0.00 sec)\nmysql&gt; insert into t1 values (2,'two');\nK\u00fcsimus OK, 1 rida m\u00f5jutatud (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\nSync tables protsess allikast mysql on alustatud.<\/code><\/pre>\n<p><\/p>\n<p>Kuidas testimise tulemusi kinnitada, k\u00fcsime tabelit PostgreSQL andmebaasist ja kuvame read.<\/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>Kui me teeme migreerimist, siis j\u00e4rgmised pg_chameleon k\u00e4sud l\u00f5petavad selle. K\u00e4sud tuleb t\u00e4ita p\u00e4rast seda, kui oleme veendunud, et k\u00f5igi siht tabelite read on replikeeritud, ja tulemuseks on korralikult \u00fcle kantud PostgreSQL andmebaas, mis ei viita algsele andmebaasile v\u00f5i replikatsiooniskeemile (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>Soovi korral saab j\u00e4rgmiste k\u00e4skudega eemaldada algse konfiguratsiooni ja replikatsiooniskeemi.<\/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\">pg_chameleon eelised<\/h3>\n<p><\/p>\n<p>Lihtne seadistus ja konfiguratsioon.<br \/>\nMugav probleemi lahendamine ja anomaaliate tuvastamine selgete veateadetega.<br \/>\nReplikatsiooni saab lisada t\u00e4iendavaid erilise tabelid p\u00e4rast initsialiseerimist, ilma et muudaks \u00fclej\u00e4\u00e4nud konfiguratsiooni.<br \/>\nSaate seadistada mitu algandmebaasi \u00fche sihtriba jaoks, mis on v\u00e4ga mugav, kui \u00fchendate andmeid \u00fchest v\u00f5i mitmest MySQL andmebaasist PostgreSQL andmebaasi.<br \/>\nV\u00f5ite valida tabelid, mida mitte replitseerida.<\/p>\n<p><\/p>\n<h3 id=\"nedostatki-pg_chameleon\">pg_chameleon puudused<\/h3>\n<p><\/p>\n<p>Toetatakse ainult MySQL 5.5 ja uuemaid versioone allikana ning PostgreSQL 9.5 ja uuemaid versioone sihtandmebaasina.<br \/>\nIgal tabelil peab olema esmase v\u00f5i unikaalne v\u00f5ti, vastasel juhul initsialiseeritakse tabelid init_replica protsessis, kuid ei replitseerita.<br \/>\n\u00dchesuunaline replikatsioon \u2014 ainult MySQL-st PostgreSQL-i. Seet\u00f5ttu sobib see ainult \u201eaktiivne-passiivne\u201d skeemile.<br \/>\nAllikas v\u00f5ib olla ainult MySQL andmebaas, samas kui PostgreSQL andmebaasi toetus allikana on alles katsefaasis ja piirangutega (rohkem teavet) <noindex><a rel=\"nofollow\" href=\"https:\/\/pgchameleon.org\/documents\/configuration_file.html#postgresql-source-type-experimental\">siin<\/a><\/noindex>)<\/p>\n<p><\/p>\n<h3 id=\"itogi-po-pg_chameleon\">Kokkuv\u00f5tted pg_chameleon kohta<\/h3>\n<p><\/p>\n<p>pg_chameleon replikatsioonimeetod sobib suurep\u00e4raselt andmebaaside migreerimiseks MySQL-st PostgreSQL-i. Oluline puudus on see, et replikatsioon on ainult \u00fchesuunaline, mist\u00f5ttu andmebaasi spetsialistid t\u00f5en\u00e4oliselt ei soovi seda kasutada muudeks kui migreerimiseks. Siiski v\u00f5ib \u00fchesuunalise replikatsiooni probleemi lahendada teise avatud l\u00e4htekoodiga t\u00f6\u00f6riistaga \u2014 SymmetricDS.<\/p>\n<p><\/p>\n<p>Lisainfot leiate ametlikust dokumentatsioonist <noindex><a rel=\"nofollow\" href=\"https:\/\/pgchameleon.org\/documents\/\">siin<\/a><\/noindex>. K\u00e4skude viidatud dokumentatsiooni leiate <noindex><a rel=\"nofollow\" href=\"https:\/\/pgchameleon.org\/documents\/usage.html#https:\/\/pgchameleon.org\/documents\/usage.html\">siin<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"obzor-symmetricds\">SymmetricDS \u00fclevaade<\/h3>\n<p><\/p>\n<p>SymmetricDS on avatud l\u00e4htekoodiga t\u00f6\u00f6riist, mis replitseerib mistahes andmebaasi mistahes teise laialt levinud andmebaasiga: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird ja teised pilveandmebaasid, n\u00e4iteks Redshift ja Azure jne. Saadaval on funktsioonid: andmebaaside ja failide s\u00fcnkroonimine, mitme peamise andmebaasi replikatsioon, filtreeritud s\u00fcnkroonimine, andmete t\u00f6\u00f6tlemine ja muud. See on Java p\u00f5hine t\u00f6\u00f6riist ning vajalik on standardsel JRE v\u00f5i JDK v\u00e4ljalase (versioon 8.0 v\u00f5i uuem). Siin saab andmete muudatusi algandmebaasis salvestada triggereid kasutades ja suunata need vastavasse sihtandmebaasi pakettidena.<\/p>\n<p><\/p>\n<h3 id=\"vozmozhnosti-symmetricds\">SymmetricDS v\u00f5imalused<\/h3>\n<p><\/p>\n<p>T\u00f6\u00f6riist ei s\u00f5ltu platvormist, st kaks v\u00f5i enam erinevat andmebaasi saavad omavahel andmeid vahetada.<br \/>\nRelatsioonilised andmebaasid s\u00fcnkroonitakse andmete muudatuste salvestamise kaudu, samas kui failis\u00fcsteemide p\u00f5hised andmebaasid kasutavad failide s\u00fcnkroonimist.<br \/>\nKahepoolne replikatsioon, kasutades Push ja Pull meetodeid, p\u00f5hinedes reeglite kogumile.<br \/>\nAndmete edastamine on v\u00f5imalik kaitstud ja madala l\u00e4bilaskev\u00f5imega v\u00f5rkude kaudu.<br \/>\nAutomaatne taastamine s\u00f5lmede taask\u00e4ivitamisel p\u00e4rast riket ja automaatne konfliktide lahendamine.<br \/>\n\u00dchildumine pilve ja t\u00f5husad laienduste API-d.<\/p>\n<p><\/p>\n<h3 id=\"primer-1\">N\u00e4ide<\/h3>\n<p><\/p>\n<p>SymmetricDS-i saab seadistada \u00fches kahest variandist:<br \/>\nJuhts\u00f5lm, mis keskse p\u00e4ringuna koordineerib andmete replikatsiooni kahe alluva s\u00f5lme vahel, ja andmevahetus alluvate s\u00f5lmede vahel toimub ainult l\u00e4bi juhi.<br \/>\nAktiivne s\u00f5lm (s\u00f5lm 1) saab vahetada andmeid replikatsiooniks teise aktiivse s\u00f5lmega (s\u00f5lm 2) ilma vahendajata.<\/p>\n<p><\/p>\n<p>M\u00f5lemas variandis toimub andmevahetus Push ja Pull abil. Selles n\u00e4ites vaatame \"aktiivne-aktiivne\" konfiguratsiooni. Kirjeldamine kogu arhitektuur oleks liiga pikk, seega uurige <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/doc\/3.10\/html\/user-guide.html#_architecture\">juhend<\/a><\/noindex>, et rohkem teada saada SymmetricDS seadistamise kohta.<\/p>\n<p><\/p>\n<p>SymmetricDS-i paigaldamine on v\u00e4ga lihtne: laadige alla avatud l\u00e4htekoodiga versioon zip-failist <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/download\">siit<\/a><\/noindex> ja ekstraktige see sinna, kuhu soovite. Allolevas tabelis on toodud teave SymmetricDS-i installimise koha ja versiooni kohta selles n\u00e4ites, samuti andmebaasi versioonid, Linuxi versioonid, IP-aadressid ja sadamad m\u00f5lema s\u00f5lme jaoks.<\/p>\n<p><\/p>\n<p>Host<br \/>\nvm1<br \/>\nvm2<\/p>\n<p><strong>OS versioon<\/strong><br \/>\nCentOS Linux 7.6 x86_64<br \/>\nCentOS Linux 7.6 x86_64<\/p>\n<p><strong>Andmebaasi serveri versioon<\/strong><br \/>\nMySQL 5.7.26<br \/>\nPostgreSQL 10.5<\/p>\n<p><strong>Andmebaasi port<\/strong><br \/>\n3306<br \/>\n5832<\/p>\n<p><strong>IP-aadress<\/strong><br \/>\n192.168.1.107<br \/>\n192.168.1.112<\/p>\n<p><strong>SymmetricDS versioon<\/strong><br \/>\nSymmetricDS 3.9<br \/>\nSymmetricDS 3.9<\/p>\n<p><strong>SymmetricDS paigaldusteed<\/strong><br \/>\n\/usr\/local\/symmetric-server-3.9.20<br \/>\n\/usr\/local\/symmetric-server-3.9.20<\/p>\n<p><strong>SymmetricDS s\u00f5lme nimi<\/strong><br \/>\ncorp-000<br \/>\nstore-001<\/p>\n<p><\/p>\n<p>Siin paigaldame SymmetricDS-i aadressile \/usr\/local\/symmetric-server-3.9.20, kus on hoiustatavad erinevad alamkaustad ja failid. Meid huvitavad alamkaustad samples ja engines. Kaustas samples hoitakse n\u00e4idiskonfiguratsiooni faile, kus on s\u00f5lme omadused, samuti SQL skripti n\u00e4iteid kiireks demo alustamiseks.<\/p>\n<p><\/p>\n<p>Kaustas samples n\u00e4eme kolme konfiguratsiooni faili s\u00f5lme omadustega \u2014 nimi n\u00e4itab s\u00f5lme iseloomu teatud skeemis.<\/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>SymmetricDS-is on k\u00f5ik vajalikud konfiguratsiooni failid kolme s\u00f5lme p\u00f5hiskeemi (variant 1) jaoks, ja neid samu faile saab kasutada kahe s\u00f5lme skeemi (variant 2) puhul. Kopeerime vajaliku konfiguratsiooni faili kaustast samples kausta engines hostis vm1. Tulemuseks on:<\/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>Selle SymmetricDS konfiguratsioonis oleva s\u00f5lme nimi on corp-000 ning andmebaasi \u00fchendust haldab mysql jdbc draiver, mis kasutab \u00fclaltoodud \u00fchendusstringi ja sisselogimisteavet. \u00dchendame end andmebaasiga replica_db ning skeemi loomisel luuakse tabelid. sync.url n\u00e4itab s\u00f5lme asukohta s\u00fcnkroniseerimiseks.<\/p>\n<p><\/p>\n<p>S\u00f5lm 2, mis asub hostis vm2, on seadistatud nimega store-001, \u00fclej\u00e4\u00e4nud teave on esitatud allpool node.properties failis. S\u00f5lm store-001 kasutab PostgreSQL andmebaasi ning pgdb_replica on replikatsiooniks etten\u00e4htud andmebaas. registration.url v\u00f5imaldab hostil vm2 \u00fchendust v\u00f5tta hostiga vm1 ja saada sellelt konfiguratsiooni \u00fcksikasjad.<\/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>Valmis SymmetricDS n\u00e4idis sisaldab parameetreid kahe andmebaasi serveeri vahelise kahepoolsuse replikatsiooni seadistamiseks (kahe s\u00f5lme vahel). Allj\u00e4rgnevaid samme tehakse hostis vm1 (corp-000), mis loob nelja tabeliga n\u00e4idisstruktuuri. Seej\u00e4rel k\u00e4ivitamine create-sym-tables k\u00e4suga symadmin loob katalooge, kus hoitakse reegleid ja replikatsiooni suundi s\u00f5lmede vahel. L\u00f5puks laaditakse tabelitesse n\u00e4idandmed.<\/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>N\u00e4ites on tabelid item ja item_selling_price automaatselt seadistatud replikatsiooniks corp-000-st store-001-sse, samas kui tabelid sale (sale_transaction ja sale_return_line_item) on automaatselt seadistatud replikatsiooniks store-001-st corp-000-sse. N\u00fc\u00fcd loome skeemi PostgreSQL andmebaasis hostis vm2 (store-001), et valmistuda andmete vastuv\u00f5tmiseks corp-000-lt.<\/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>Veenduge, et vm1-s olevas MySQL andmebaasis oleksid olemas n\u00e4idetabelid ja SymmetricDS kataloogitabelid. Pange t\u00e4hele, et SymmetricDS s\u00fcsteemitabelid (prefiksiga sym_) on hetkel saadaval ainult s\u00f5lmes corp-000, kuna seal on k\u00e4idud l\u00e4bi create-sym-tables k\u00e4sk ja me haldame replikatsiooni. Samuti, andmebaasis s\u00f5lmes store-001 on kokku ainult 4 n\u00e4idistabelit ilma andmeteta.<\/p>\n<p><\/p>\n<p>K\u00f5ik. Keskkond on valmis sym serveri protsesside k\u00e4ivitamiseks m\u00f5lemal s\u00f5lmel, nagu allpool n\u00e4idatud.<\/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>Logifailide salvestamine toimub SymmetricDS installatsioonikaustas logs kaustas (symmetric.log), samuti standardsetes v\u00e4ljundites. Sym serverit saab n\u00fc\u00fcd algatada s\u00f5lmes store-001.<\/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>Kui k\u00e4itada serveriprotsess sym s\u00f5lmes vm2, luuakse SymmetricDS kataloogi tabelid ka PostgreSQL andmebaasis. Kui k\u00e4itada serveriprotsess sym m\u00f5lemal s\u00f5lmel, s\u00fcnkroonitakse nad omavahel, et replikeerida andmeid corp-000-lt store-001-le. Kui p\u00e4rast m\u00f5ningaid sekundeid k\u00fcsida k\u00f5iki 4 tabelit m\u00f5lemal poolel, n\u00e4eme, et replikatsioon on \u00f5nnestunud. V\u00f5i saab alglaadi edastada s\u00f5lmesse store-001 corp-000-lt j\u00e4rgmise k\u00e4suga.<\/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>Selles etapis sisestatake uue kirje andmebaasi MySQL tabelisse item s\u00f5lmes corp-000 (host: vm1) ja saab kontrollida selle replikatsiooni PostgreSQL andmebaasi s\u00f5lmes store-001 (host: vm2). Me n\u00e4eme Pull operatsiooni, et andmeid liikuda corp-000-lt store-001-le.<\/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>Andmete liigutamiseks store-001-lt corp-000-le Push operatsiooni teostamiseks sisestame kirje tabelisse sale_transaction ja kontrollime, et replikatsioon on toimunud.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/xpaste.pro\/p\/B23cJ4sP\">Tulemus.<\/a><\/noindex><\/p>\n<p><\/p>\n<p>N\u00e4eme kahepoolse replikatsiooni tabelite seadistuse \u00f5nnestumist MySQL ja PostgreSQL andmebaaside vahel. Uute kasutajatabelite replikatsiooni seadistamiseks teeme j\u00e4rgmised sammud. Loome n\u00e4idisena tabeli t1 ja seadistame replikatsiooni reeglid j\u00e4rgmiselt. Seel\u00e4bi seadistame ainult replikatsiooni corp-000-lt store-001-le.<\/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>Seej\u00e4rel saa konfiguratsioon teate skeemi muutmisest, st uue tabeli lisamisest, kasutades k\u00e4sku symadmin koos argumendiga sync-triggers, mis taaskonstrueerib triggereid tabeli m\u00e4\u00e4ratlemise jaoks. K\u00e4ivitatakse send-schema, et saata skeemi muudatused s\u00f5lmele store-001, ja tabeli t1 replikeerimine on seadistatud.<\/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\">SymmetricDS eelised<\/h3>\n<p><\/p>\n<p>Lihtne paigaldamine ja seadistamine, sealhulgas valmis failikomplekt seadistuste jaoks skeemi loomisel kolmes v\u00f5i kahes s\u00f5lmes.<br \/>\nAndmebaaside platvormide\u00fclene iseseisvus, sealhulgas serverid, s\u00fclearvutid ja mobiilseadmed.<br \/>\nMis tahes andmebaasi replikeerimine mis tahes teise andmebaasi kohapeal, WAN-is v\u00f5i pilves.<br \/>\nV\u00f5ime t\u00f5husalt hallata paari andmebaasi v\u00f5i isegi tuhandeid mugavaks replikeerimiseks.<br \/>\nTasuline versioon graafilise liidesega ja suurep\u00e4rane tugi.<\/p>\n<p><\/p>\n<h3 id=\"nedostatki-symmetricds\">SymmetricDS puudused<\/h3>\n<p><\/p>\n<p>On vaja k\u00e4sitsi m\u00e4rkida k\u00e4sureal replikeerimise reeglid ja suund SQL-i operaatorite kaudu, et laadida katalooge, mis v\u00f5ib olla ebamugav.<br \/>\nPaljude tabelite seadistamine replikeerimiseks on kurnav, kui ei kasutada skripte SQL-i operaatorite loomiseks, mis m\u00e4\u00e4ratlevad reeglid ja suuna.<br \/>\nLogitesse kirjutatakse liiga palju teavet ja m\u00f5nikord on vaja logifailis korda luua, et see ei v\u00f5taks liiga palju ruumi.<\/p>\n<p><\/p>\n<h3 id=\"itogi-po-symmetricds\">SymmetricDS kokkuv\u00f5te<\/h3>\n<p><\/p>\n<p>SymmetricDS v\u00f5imaldab seadistada kahe, kolme ja isegi tuhandete s\u00f5lmede vahel kahepoolset replikeerimist, et teostada replikeerimist ja s\u00fcnkroonida faile. See on ainulaadne t\u00f6\u00f6riist, mis t\u00e4idab paljusid \u00fclesandeid automaatselt, n\u00e4iteks andmete automaatne taastamine pikaajalise seisaku j\u00e4rel s\u00f5lmes, turvaline ja efektiivne andmevahetus s\u00f5lmede vahel HTTPS-i kaudu, automaatne konfliktide haldamine reeglite p\u00f5hjal jne. SymmetricDS teostab replikeerimist k\u00f5igi andmebaaside vahel, seega saab seda kasutada k\u00f5ige erinevamates stsenaariumites, sealhulgas migreerimisel, uuele versioonile \u00fclemisel, levitamises, filtreerimises ja andmete muutmises erinevatel platvormidel.<\/p>\n<p><\/p>\n<p>N\u00e4ide on loodud ametliku <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/doc\/3.9\/html\/tutorials.html\">l\u00fchikese juhendi<\/a><\/noindex> alusel SymmetricDS. V <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/doc\/3.9\/html\/user-guide.html\">kasutaja juhendis<\/a><\/noindex> detailne kirjeldatakse erinevaid m\u00f5isteid, mis on seotud replikatsiooni seadistamisega SymmetricDS-i abil.<\/p>\n<p>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/perekrestnaya-replikatsiya-mezhdu-postgresql-i-mysql\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Ristreplikatsioon PostgreSQL ja MySQL vahel | ProHoster","description":"Annan \u00fcldise \u00fclevaate.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/perekrestnaya-replikatsiya-mezhdu-postgresql-i-mysql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/38146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=38146"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/38146\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/28635"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=38146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=38146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=38146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}