{"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":"Ristrepikatsioon PostgreSQL-i ja MySQL-i vahel","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ristrepikatsioon PostgreSQL-i ja MySQL-i vahel\" src=\"\/wp-content\/uploads\/2019\/09\/47cf48f9024f406d625ecb6b21020c74.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Annan \u00fclevaate ristrepikatsioonist PostgreSQL-i ja MySQL-i vahel ning meetoditest nende andmebaasis\u00fcsteemide vahelise ristrepikatsiooni seadistamiseks. \u00dcldiselt peetakse ristrepikatsiooni allikaid homogeenseteks, ning see on mugav meetod liikuda \u00fchest relatsioonilisest andmebaasis\u00fcsteemist teise.<\/p>\n<p><\/p>\n<p>PostgreSQL-i ja MySQL-i andmebaasid peetakse relatsioonilisteks, kuid koos lisandustega pakuvad nad ka NoSQL v\u00f5imalusi. R\u00e4\u00e4gime PostgreSQL-i ja MySQL-i vahelisest repikatsioonist relatsiooniliste andmebaasis\u00fcsteemide perspektiivist.<\/p>\n<p><\/p>\n<p>Me ei kirjeldada kogu sisemist toimingut, vaid ainult p\u00f5hialuseid, et te saaksite aimu andmebaasiserverite vahelise repikatsiooni seadistamisest, selle eelistest, piirangutest ja kasutusstsenaariumidest.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Replikatsioon kahe identse andmebaasiserveri vahel toimub tavaliselt kas binaarses re\u017eiimis v\u00f5i p\u00e4ringute kaudu peamise s\u00f5lme (tuntud ka kui v\u00e4ljaandja, peamine v\u00f5i aktiivne) ja alam-s\u00f5lme (tellija, oote- v\u00f5i passiivne) vahel. Replikatsiooni eesm\u00e4rk on reaalajas edastada peamise andmebaasi koopia alam-s\u00f5lmele. Andmed edastatakse peamiselt alammele, see t\u00e4hendab aktiivsest passiivsesse, kuna replikatsioon toimub ainult \u00fches suunas. Siiski on v\u00f5imalik seadistada replikatsioon kahe andmebaasi vahel m\u00f5lemas suunas, nii et andmed edastatakse alam-s\u00f5lmest peamisele, luues \u201eaktiivne-aktiivne\u201d konfiguratsiooni. K\u00f5ik see, sealhulgas kaskaad-replikatsioon, on v\u00f5imalik kahe v\u00f5i enama identse andmebaasiserveri vahel. \u201eAktiivne-aktiivne\u201d v\u00f5i \u201eaktiivne-passiivne\u201d konfiguratsioon s\u00f5ltub vajadusest, nende v\u00f5imaluste olemasolust algses konfiguratsioonis v\u00f5i v\u00e4listest lahendustest, mis on vajalikud seadistamiseks ja olemasolevate kompromisside tegemiseks.<\/p>\n<p><\/p>\n<p>Kirjeldatud konfiguratsioon on v\u00f5imalik erinevate andmebaasi serverite vahel. Serverit saab seadistada teiste andmebaasi serverite replitseeritud andmete vastuv\u00f5tmiseks, s\u00e4ilitades samas reaalajas replitseeritud andmete stseenid. MySQL ja PostgreSQL pakuvad enamikku neist konfiguratsioonidest oma j\u00f5ududega v\u00f5i kolmandate osapoolte laienduste abil, sealhulgas binaarsete logide, kettalukkude ja operaatorite ning ridade p\u00f5histe meetodite abil.<\/p>\n<p><\/p>\n<p>Ristreplikatsioon MySQL ja PostgreSQL vahel on vajalik \u00fchekordseks migreerimiseks \u00fchelt andmebaasi serverilt teisele. Need andmebaasid kasutavad erinevaid protokolle, seet\u00f5ttu ei saa neid otse siduda. Andmete vahetamiseks saab kasutada v\u00e4liseid avatud l\u00e4htekoodiga t\u00f6\u00f6riistu, 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 replikatsiooni s\u00fcsteem MySQL'ist PostgreSQL'i, mis on loodud Python 3 peal. See kasutab avatud l\u00e4htekoodiga mysql-replication teeki, samuti Pythonis. Ridade pildid t\u00f5mmatakse MySQL tabelitest ja salvestatakse PostgreSQL andmebaasis JSONB objektidena, seej\u00e4rel de\u0161ifreeritakse pl\/pgsql funktsiooni abil ja taastatakse PostgreSQL andmebaasis.<\/p>\n<p><\/p>\n<h3 id=\"vozmozhnosti-pg_chameleon\">pg_chameleon omadused<\/h3>\n<p><\/p>\n<p>\u00dche klaster MySQL-i mitu skeemi saab replitseerida \u00fchte siht PostgreSQL andmebaasi konfiguratsiooniga \u201e\u00fcks-\u00fchele\u201d.<br \/>\nAlgse ja sihiskeemi nimed ei saa kattuda.<br \/>\nReplitseeritud andmeid saab saada MySQL-i kaskaadiga replika kaudu.<br \/>\nTabelid, mis ei saa replitseerida v\u00f5i p\u00f5hjustavad vigu, j\u00e4etakse v\u00e4lja.<br \/>\nIga replitseerimisfunktsiooni haldavad daemonid.<br \/>\nKontroll YAML-p\u00f5histe parameetrite ja konfiguratsioonifailide abil.<\/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-i 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>Esiteks valmistage k\u00f5ik vajalikud komponendid pg_chameleon'i installimiseks. Selles n\u00e4ites on installitud 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 Python3.6 edukat installimist tuleb t\u00e4ita \u00fclej\u00e4\u00e4nud n\u00f5uded, n\u00e4iteks luua ja aktiveerida virtuaalne keskkond. Lisaks uuendatakse pip-moodul viimasele versioonile ja seda kasutatakse pg_chameleon'i installimiseks. Allpool olevates k\u00e4skudes installitakse tahtlikult pg_chameleon 2.0.9, kuigi viimane versioon on 2.0.10. See on vajalik, et v\u00e4ltida uusi vigu uuendatud versioonis.<\/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 on k\u00e4sk) argumentidega set_configuration_files, et aktiveerida pg_chameleon ja luua vaike kataloogid ja konfiguratsioonifailid.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">(venv) $ &gt; chameleon set_configuration_files\nloome katalooge \/root\/.pg_chameleon\nloome katalooge \/root\/.pg_chameleon\/configuration\/\nloome katalooge \/root\/.pg_chameleon\/logs\/\nloome katalooge \/root\/.pg_chameleon\/pid\/\nkopeerime konfiguratsiooni n\u00e4ite failisse \/root\/.pg_chameleon\/configuration\/\/config-example.yml<\/code><\/pre>\n<p><\/p>\n<p>N\u00fc\u00fcd loome faili config-example.yml koopia nimega default.yml, et sellest saaks vaike konfiguratsioonifail. Selle n\u00e4idisfaili konfiguratsioon on toodud allpool.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; cat default.yml\n---\n#globaal seadistused\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 v\u00f5imaldab kasutajal muuta vaikimisi t\u00fc\u00fcbi teisendamine teiseks.\ntype_override:\n  \"tinyint(1)\":\n    override_to: boolean\n    override_tables:\n      - \"*\"\n\n#postgresi sihtkoha \u00fchendus\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 p\u00e4ev'\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: \"keelatud\"\n    gtid_enable: No\n    type: mysql\n    skip_events:\n      insert:\n        - delphis_mediterranea.foo #vahetab v\u00e4lja sisestused tabelis delphis_mediterranea.foo\n      delete:\n        - delphis_mediterranea #vahetab v\u00e4lja kustutused skeemis delphis_mediterranea\n      update:<\/code><\/pre>\n<p><\/p>\n<p>Konfiguratsioonifail selles n\u00e4ites on pg_chameleon'i fail, millel on v\u00e4ikesed muudatused vastavalt alg- ja sihtkeskkondadele. Allpool on \u00fclevaade konfiguratsioonifaili erinevatest jaotustest.<\/p>\n<p><\/p>\n<p>Faili konfiguratsioonis default.yml on globaalsete parameetrite (global settings) jaotis, kus saab hallata selliseid seadeid nagu lukufaili asukoht, logide asukoht, logide s\u00e4ilitamise periood jne. J\u00e4rgneb t\u00fc\u00fcpide \u00fclekirjutamise (type override) jaotis, kus on m\u00e4\u00e4ratud reeglite kogum t\u00fc\u00fcpide \u00fclekirjutamiseks replikeerimise ajal. Vaikesn\u00e4idisena kasutatakse t\u00fc\u00fcpide \u00fclekirjutamise reeglit, mis muundab tinyint(1) loogiliseks v\u00e4\u00e4rtuseks. J\u00e4rgmisel jaotisel m\u00e4\u00e4rame \u00fchenduse \u00fcksikasjad sihtandmebaasiga. Meie juhul on see PostgreSQL andmebaas, mille t\u00e4histamine on pg_conn. Viimases jaotises m\u00e4\u00e4rame l\u00e4hteandmete andmed, st l\u00e4htandmebaasi \u00fchenduse parameetrid, l\u00e4hte- ja sihtandmebaasi skeemi vastavuse, tabelid, mida tuleb vahele j\u00e4tta, ooteaeg, m\u00e4lu, pakendi suurus. Pange t\u00e4hele, et \u201esources\u201d on mitmuses, seega saame lisada mitu l\u00e4hteandmebaasi \u00fche sihtandmebaasi jaoks, et seadistada \u201emitu \u00fchele\u201d konfiguratsioon.<\/p>\n<p><\/p>\n<p>N\u00e4idis andmebaas world_x sisaldab 4 tabelit ridadega, mille MySQLi kogukond on n\u00e4itena pakkunud. Selle saab alla laadida. <noindex><a rel=\"nofollow\" href=\"https:\/\/dev.mysql.com\/doc\/index-other.html\">siit<\/a><\/noindex>. N\u00e4idis andmebaas tuleb tar- ja pakitud arhiivina koos juhistega ridade loomise ja importimise kohta.<\/p>\n<p><\/p>\n<p>MySQLis ja PostgreSQLis luuakse eriline kasutaja nimega usr_replica. MySQLis antakse talle t\u00e4iendavad \u00f5igused k\u00f5igi replikeeritavate 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>PostgreSQLi poolel luuakse andmebaas db_replica, mis aktsepteerib muudatusi MySQLi andmebaasist. Kasutaja usr_replica PostgreSQLis konfigureeritakse automaatselt kahe skeemi pgworld_x ja sch_chameleon omanikuks, mis sisaldavad vastavalt tegelikke replikeeritud tabeleid ja replikatsiooni katalooge. Automaatse konfiguratsiooni eest vastutab argument create_replica_schema, nagu n\u00e4ete allpool.<\/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 andmebaas konfigureeritakse m\u00f5ningate parameetrite muutmisega, et valmistada see ette replikatsiooniks, 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'i k\u00e4ivitamisel ei tekiks probleeme.<\/p>\n<p><\/p>\n<p>PostgreSQL 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 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 replikatsiooniskeemi (pgworld_x) PostgreSQL andmebaasis, nagu oleme juba maininud. Argument add_source lisab allika andmebaasi konfiguratsiooni, lugedes konfiguratsioonifaili (default.yml), ja meie juhul on see mysql, ning init_replica initsialiseerib konfiguratsiooni, l\u00e4htudes failis m\u00e4\u00e4ratud parameetritest.<\/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 selgelt nende eduka t\u00e4itmise. K\u00f5ik t\u00f5rked v\u00f5i s\u00fcntaksivead kuvatakse lihtsate ja arusaadavate s\u00f5numitega koos vihjete jaotamiseks probleemide parandamiseks.<\/p>\n<p><\/p>\n<p>L\u00f5puks alustame replikatsiooni start_replica abil ja saame s\u00f5numi eduka t\u00e4itmise kohta.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; chameleon start_replica --config default --source mysql \noutput: Alustamine replikatsiooni protsessi allika mysql jaoks<\/code><\/pre>\n<p><\/p>\n<p>Replikatsiooni staatust saab k\u00fcsida show_status argumendi abil ja vigu vaadata show_errors argumendi kaudu.<\/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, kontrollivad iga replikatsiooni funktsiooni deemonid. Deemonite 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 seadistunuks, kui me ei testi seda reaalajas, nagu allpool n\u00e4idatud. Loome tabeli, sisestame paar kirjeid MySQL andmebaasi ja kutsume pg_chameleon'is v\u00e4lja sync_tables argumendi, et v\u00e4rskendada deemonid ja replitseerimise tabel andmetega 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 sek)\nmysql&gt; insert into t1 values (1,'one');\nK\u00fcsimus OK, 1 rida m\u00f5jutatud (0.00 sek)\nmysql&gt; insert into t1 values (2,'two');\nK\u00fcsimus OK, 1 rida m\u00f5jutatud (0.00 sek)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; chameleon sync_tables --tables world_x.t1 --config default --source mysql\nAndmete s\u00fcnkroniseerimise protsess allikast mysql on alanud.<\/code><\/pre>\n<p><\/p>\n<p>Testitulemuste kinnitamiseks k\u00fcsime tabelit PostgreSQL andmebaasist ja v\u00e4ljundime 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 | \u00fcks\n  2 | kaks<\/code><\/pre>\n<p><\/p>\n<p>Kui teeme migreerimist, siis j\u00e4rgmised pg_chameleoni k\u00e4sud l\u00f5petavad selle. K\u00e4sud tuleb t\u00e4ita p\u00e4rast seda, kui oleme kinnitanud, et k\u00f5iki sihttabeleid on replitseeritud, ja tulemuseks on korralikult \u00fcle viidud PostgreSQL andmebaas, millel ei ole viiteid algsele andmebaasile ega 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 algse konfiguratsiooni ja replikatsiooniskeemi eemaldada.<\/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_chameleoni eelised<\/h3>\n<p><\/p>\n<p>Lihtne seadistamine ja konfigureerimine.<br \/>\nMugav t\u00f5rkeotsing ja anomaaliate tuvastamine arusaadavate veateadete abil.<br \/>\nReplikatsiooni saab lisada t\u00e4iendavaid spetsiaalseid tabeleid p\u00e4rast initsialiseerimist, muutes \u00fclej\u00e4\u00e4nud konfiguratsiooni.<br \/>\nSaate seadistada mitu l\u00e4hteandmebaasi \u00fche sihtandmebaasi jaoks, mis on v\u00e4ga mugav, kui \u00fchendate andmeid \u00fchest v\u00f5i mitmest MySQL andmebaasist PostgreSQL andmebaasis.<br \/>\nValitud tabeleid ei ole v\u00f5imalik replikeerida.<\/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 allikaks ning PostgreSQL 9.5 ja uuemaid versioone sihtandmebaasina.<br \/>\nIgal tabelil peab olema peamine v\u00f5i unikaalne v\u00f5ti, vastasel juhul initsialiseeritakse tabelid init_replica protsessi k\u00e4igus, kuid neid ei replikeerita.<br \/>\n\u00dchesuunaline replikeerimine \u2014 ainult MySQL-st PostgreSQL-i. Seet\u00f5ttu sobib see ainult 'aktiivne-passiivne' skeemile.<br \/>\nAllikas v\u00f5ib olla ainult MySQL andmebaas, samas on PostgreSQL andmebaasi toetamine allikana alles katsetamisfaasis ja piirangutega (saate rohkem teada <noindex><a rel=\"nofollow\" href=\"https:\/\/pgchameleon.org\/documents\/configuration_file.html#postgresql-source-type-experimental\">siit<\/a><\/noindex>)<\/p>\n<p><\/p>\n<h3 id=\"itogi-po-pg_chameleon\">Kokkuv\u00f5tted pg_chameleonist<\/h3>\n<p><\/p>\n<p>pg_chameleon replikeerimismeetod sobib suurep\u00e4raselt andmebaasi migreerimiseks MySQL-ist PostgreSQL-i. Oluline puudus on see, et replikeerimine on ainult \u00fchesuunaline, mist\u00f5ttu andmebaasi spetsialistid t\u00f5en\u00e4oliselt ei soovi seda kasutada millegi muu jaoks peale migreerimise. Kuid \u00fchesuunalise replikeerimise probleemi saab lahendada veel \u00fche avatud l\u00e4htekoodiga t\u00f6\u00f6riista \u2014 SymmetricDS.<\/p>\n<p><\/p>\n<p>Lisage rohkem teavet ametlikus dokumentatsioonis <noindex><a rel=\"nofollow\" href=\"https:\/\/pgchameleon.org\/documents\/\">siit<\/a><\/noindex>. K\u00e4skude rida aitab leida <noindex><a rel=\"nofollow\" href=\"https:\/\/pgchameleon.org\/documents\/usage.html#https:\/\/pgchameleon.org\/documents\/usage.html\">siit<\/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 replikeerib mis tahes andmebaasi igasse teise tuntud andmebaasi: 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\u00fcnkroniseerimine, mitme juhtiva andmebaasi replikatsioon, filtreeritud s\u00fcnkroniseerimine, andmete muutmine ja palju muud. See on Java t\u00f6\u00f6riist ja n\u00f5uab standardset JRE v\u00f5i JDK versiooni 8.0 v\u00f5i k\u00f5rgemat. Siin on v\u00f5imalik salvestada andme muutusi algandmebaasi trikkide kaudu ja edastada need vastavasse sihtandmebaasi pakettidena.<\/p>\n<p><\/p>\n<h3 id=\"vozmozhnosti-symmetricds\">SymmetricDS funktsioonid<\/h3>\n<p><\/p>\n<p>T\u00f6\u00f6riist ei s\u00f5ltu platvormist, see t\u00e4hendab, et kaks v\u00f5i enam erinevat andmebaasi saavad vahetada andmeid.<br \/>\nRelatiivsed andmebaasid s\u00fcnkroniseeritakse andme muudatuste salvestamise teel, samas kui failis\u00fcsteemide p\u00f5hised andmebaasid kasutavad failide s\u00fcnkroniseerimist.<br \/>\nKahepoolne replikatsioon Push ja Pull meetodite kaudu, mis p\u00f5hinevad reeglite kogumil.<br \/>\nAndmete edastus on v\u00f5imalik kaitstud v\u00f5rkudes ja madala l\u00e4bilaskev\u00f5imega v\u00f5rkudes.<br \/>\nAutomaatne taastamine p\u00e4rast s\u00f5lmede t\u00f6\u00f6d taasalkavandamist ja automaatne konfliktide lahendamine.<br \/>\n\u00dchildatavus pilves ja efektiivsed API laiendusi.<\/p>\n<p><\/p>\n<h3 id=\"primer-1\">N\u00e4ide<\/h3>\n<p><\/p>\n<p>SymmetricDS-i saab seadistada \u00fche kahest variandist:<br \/>\nJuht (vanem) s\u00f5lm, mis keskset koordineerib andmete replikatsiooni kahe alam (t\u00fctar) s\u00f5lme vahel ning andmevahetus t\u00fctar s\u00f5lmede vahel toimub ainult vanema kaudu.<br \/>\nAktiivne s\u00f5lm (s\u00f5lm 1) saab andmeid replikatsiooni jaoks vahetada teise aktiivse s\u00f5lmega (s\u00f5lm 2) ilma vahendajata.<\/p>\n<p><\/p>\n<p>M\u00f5lemal variandil toimub andmevahetus Push ja Pull kaudu. K\u00e4esolevas n\u00e4ites vaatame 'aktiivne-aktiivne' konfiguratsiooni. Kogu arhitektuuri kirjeldamine v\u00f5taks liiga kaua aega, seet\u00f5ttu 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-i seadistusest.<\/p>\n<p><\/p>\n<p>SymmetricDS-i paigaldamine on v\u00e4ga lihtne: laadige alla avatud l\u00e4htekoodiga zip-faili versioon. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/download\">siit<\/a><\/noindex> ja t\u00f5mmake see v\u00e4lja, kuhu soovite. Allolevas tabelis on toodud SymmetricDS paigalduskoht ja versioon antud n\u00e4ites, samuti andmebaaside versioonid, Linuxi versioonid, IP-aadressid ja sadamad m\u00f5lemale s\u00f5lmele.<\/p>\n<p><\/p>\n<p>Host<br \/>\nvm1<br \/>\nvm2<\/p>\n<p><strong>OS-i 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 paigaldusteekond<\/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 aadressile \/usr\/local\/symmetric-server-3.9.20, kus hoitakse erinevaid alakaustu ja faile. Meid huvitavad alakaustad samples ja engines. Kaustas samples leidub n\u00e4idis konfiguratsioonifaile s\u00f5lme omadustega ning SQL skriptide n\u00e4idiseid kiireks demonstratsiooniks.<\/p>\n<p><\/p>\n<p>Kaustas samples n\u00e4eme kolme konfiguratsioonifaili 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-l on k\u00f5ik vajalikud konfiguratsioonifailid kolme s\u00f5lmega p\u00f5hiskeemi jaoks (valik 1), ja samu faile saab kasutada ka kahe s\u00f5lmega skeemis (valik 2). Kopsime vajaliku konfiguratsioonifaili kaustast samples kausta engines hostis vm1. Tulemus on j\u00e4rgmine:<\/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 konfiguratsiooni s\u00f5lm on nimetatud corp-000, ja andmebaasi \u00fchendust haldab mysql jdbc draiver, mis kasutab \u00fclaltoodud \u00fchendusstringi ja sissep\u00e4\u00e4sukrediite. Oleme \u00fchendatud database replica_db ja skeemi loomisel luuakse tabelid. sync.url n\u00e4itab sildumispaika s\u00f5lmega s\u00fcnkroonimise jaoks.<\/p>\n<p><\/p>\n<p>S\u00f5lm 2 hostil vm2 seadistatakse kui store-001, ja k\u00f5ik muu on m\u00e4\u00e4ratud failis node.properties, mis on toodud allpool. S\u00f5lm store-001 t\u00f6\u00f6tab PostgreSQL andmebaasiga, ja pgdb_replica on replika jaoks m\u00f5eldud andmebaas. registration.url v\u00f5imaldab hostil vm2 \u00fchenduda hostiga vm1 ja saada konfiguratsiooni \u00fcksikasju.<\/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-i n\u00e4ide sisaldab seadeid kahe andmebaasi serveri (kaks s\u00f5lme) vaheline kahepoolse replikatsiooni seadistamiseks. Allolevad sammud t\u00e4idetakse hostis vm1 (corp-000), kus luuakse nelja tabeliga skeem. Seej\u00e4rel k\u00e4ivitab k\u00e4su create-sym-tables kasutamine symadmin, et luua kataloogitabelid, kuhu salvestatakse replikatsioonireeglid ja -suunad s\u00f5lmede vahel. L\u00f5puks laaditakse tabelitesse n\u00e4idisandmed.<\/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 replikeerimiseks corp-000-st store-001-i, samas kui tabelid sale (sale_transaction ja sale_return_line_item) on automaatselt seadistatud replikeerimiseks store-001-st corp-000-sse. N\u00fc\u00fcd loome andmebaasis PostgreSQL skeemi hostis vm2 (store-001), et valmistada see ette 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>Kontrollime kindlasti, et MySQL andmebaasis vm1 on olemas SymmetricDS-i tabelite ja kataloogide tabelid. Pange t\u00e4hele, et SymmetricDS-i s\u00fcsteemitabelid (prefiksiga sym_) on praegu saadaval ainult s\u00f5lmes corp-000, sest seal t\u00e4itsime k\u00e4su create-sym-tables ja haldame replikatsiooni. Lisaks on s\u00f5lmes store-001 ainult 4 n\u00e4idetabelit, milles andmeid ei ole.<\/p>\n<p><\/p>\n<p>K\u00f5ik. Keskkond on serveriprotsesside sym k\u00e4ivitamiseks valmis 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>Logikirjed saadetakse taustalogifaili (symmetric.log) logikausta, kus SymmetricDS on paigaldatud, ja ka standardv\u00e4ljundisse. Serverit sym 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\u00e4ivitada sym serveri protsess vm2 hostis, loob see SymmetricDS katalooge PostgreSQL andmebaasis. Kui sym serveri protsess k\u00e4ivitada m\u00f5lemal s\u00f5lmel, s\u00fcnkroniseerivad nad andmeid corp-000-st store-001-esse. Kui paarisekundilise ooteaja p\u00e4rast p\u00e4rime k\u00f5iki 4 tabelit m\u00f5lemalt poolt, n\u00e4eme, et replikatsioon on edukalt toimunud. V\u00f5i v\u00f5ime edastada esialgse koormuse s\u00f5lmele store-001 corp-000-st 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>Sellel etapil sisestatakse andmebaasi MySQL tabelisse item uus rekord s\u00f5lmes corp-000 (host: vm1) ning kontrollime selle replikatsiooni PostgreSQL andmebaasi s\u00f5lmes store-001 (host: vm2). Me n\u00e4eme Pull operatsiooni andmete edastamiseks corp-000-st store-001-esse.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">mysql&gt; insert into item values ('22000002','Jelly Bean');\nK\u00fcsimus OK, 1 rida m\u00f5jutatud (0.00 sek)<\/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 rida)<\/code><\/pre>\n<p><\/p>\n<p>Andmete edastamiseks store-001-st corp-000-sse Push operatsiooni teostamiseks sisestage rekord tabelisse sale_transaction ja kontrollige, 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 edukat kahe suunalise replikatsiooni seadistamist MySQL ja PostgreSQL andmebaaside vahel. Uute kasutaja tabelite replikatsiooni seadistamiseks teeme j\u00e4rgmised sammud. Loome n\u00e4idisena tabeli t1 ja seadistame selle replikatsiooni reeglid j\u00e4rgmiselt. Nii seadistame me replikatsiooni ainult corp-000-st store-001-ks.<\/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 saab konfiguratsioon teate sch\u00e9ma muutusest, st uue tabeli lisamisest, kasutades k\u00e4sku symadmin koos argumendiga sync-triggers, mis taasluua trigger'id tabelite m\u00e4\u00e4ratlemiseks. K\u00e4ivitatakse send-schema, et saata sch\u00e9ma muudatusi s\u00f5lmele store-001, ja tabeli t1 replikatsioon 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 seadistamine ja konfigureerimine, sealhulgas valmisfailide komplekt parameetritega kolme v\u00f5i kahe s\u00f5lme skeemi loomiseks.<br \/>\nAndmebaaside platvormide\u00fclene t\u00f6\u00f6 ja s\u00f5ltumatus, sealhulgas serverid, s\u00fclearvutid ja mobiilseadmed.<br \/>\nIga andmebaasi replikatsioon igasse teise andmebaasi lokaalselt, WAN-is v\u00f5i pilves.<br \/>\nV\u00f5ime optimaalselt t\u00f6\u00f6tada paari andmebaasi v\u00f5i mitme tuhande andmebaasiga mugavaks replikatsiooniks.<br \/>\nTasuline versioon, millel on graafiline liides ja suurep\u00e4rane tugi.<\/p>\n<p><\/p>\n<h3 id=\"nedostatki-symmetricds\">SymmetricDS puudused<\/h3>\n<p><\/p>\n<p>Replikatsiooni reeglid ja suund tuleb k\u00e4sitsi m\u00e4\u00e4rata k\u00e4surealt SQL-operatsioonide abil katalooge laadides, mis v\u00f5ib olla ebamugav.<br \/>\nPaljude tabelite replikatsiooni seadmine v\u00f5ib olla kurnav, kui skripte SQL-operatsioonide loomiseks ei kasutata, mis m\u00e4\u00e4ravad replikatsiooni reeglid ja suuna.<br \/>\nLogidesse kantakse liiga palju teavet ning m\u00f5nikord on vajalik logifailis korda luua, et see ei v\u00f5taks liiga palju ruumi.<\/p>\n<p><\/p>\n<h3 id=\"itogi-po-symmetricds\">Kokkuv\u00f5tted SymmetricDS kohta<\/h3>\n<p><\/p>\n<p>SymmetricDS v\u00f5imaldab seadistada kaheastmelist replikatsiooni kahe, kolme v\u00f5i isegi tuhandete s\u00f5lme vahel failide replikatsiooni ja s\u00fcnkroonimist. See on ainulaadne t\u00f6\u00f6riist, mis t\u00e4idab ise mitmeid \u00fclesandeid, n\u00e4iteks andmete automaatne taastamine p\u00e4rast pikka seisakut s\u00f5lmes, turvaline ja efektiivne andmevahetus s\u00f5lmede vahel HTTPSi kaudu, konfliktide automaatne haldamine reeglite komplekti p\u00f5hjal jne. SymmetricDS teostab replikatsiooni mis tahes andmebaaside vahel, seet\u00f5ttu saab seda kasutada erinevates stsenaariumites, sealhulgas migratsioon, \u00fcle minemine uuele versioonile, levitamine, andmete filtreerimine ja vormindamine erinevates platvormides.<\/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\u00fchijuhendi<\/a><\/noindex> p\u00f5hjal. See <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/doc\/3.9\/html\/user-guide.html\">kasutajajuhendist<\/a><\/noindex> kirjeldab \u00fcksikasjalikult 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 4.9.10 - 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 \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\" \/>\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) 4.9.10\" \/>\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 \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\" \/>\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\udd47 PostgreSQL ja MySQL ristrepplikatsioon | ProHoster","description":"Ma r\u00e4\u00e4gin l\u00fchidalt PostgreSQL ja MySQL ristrepplikatsioonist ning meetoditest nende kahe andmebaasi serveri vahelise ristrepplikatsiooni seadistamiseks. \u00dcldiselt nimetatakse ristrepplikatsiooniga andmebaase homogeenseteks ning see on mugav meetod \u00fcleminekuks \u00fchest relatsioonilisest andmebaasis\u00fcsteemist teise. PostgreSQL ja MySQL andmebaase peetakse relatsioonilisteks, kuid","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 \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","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"},"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}]}}