{"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\/sq\/blog\/administrirovanie\/perekrestnaya-replikatsiya-mezhdu-postgresql-i-mysql","title":{"rendered":"Replikimi nd\u00ebrsjell\u00eb nd\u00ebrmjet PostgreSQL dhe MySQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Replikimi nd\u00ebrsjell\u00eb nd\u00ebrmjet PostgreSQL dhe MySQL\" src=\"\/wp-content\/uploads\/2019\/09\/47cf48f9024f406d625ecb6b21020c74.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Do t\u00eb flas n\u00eb p\u00ebrgjith\u00ebsi mbi replikimin e nd\u00ebrprer\u00eb midis PostgreSQL dhe MySQL, si dhe metodologjit\u00eb p\u00ebr konfigurimin e k\u00ebtij lloji t\u00eb replikimit nd\u00ebrmjet k\u00ebtyre dy server\u00ebve t\u00eb databaz\u00ebs. Zakonisht, databazat n\u00eb replikimin nd\u00ebrprer\u00eb quhen homogjene, dhe ky \u00ebsht\u00eb nj\u00eb metod\u00eb e p\u00ebrshtatshme p\u00ebr kalimin nga nj\u00eb server i menaxhimit t\u00eb t\u00eb dh\u00ebnave relacional n\u00eb nj\u00eb tjet\u00ebr.<\/p>\n<p><\/p>\n<p>Databazat PostgreSQL dhe MySQL konsiderohen zakonisht si relacional, por me zgjerimet e tyre t\u00eb m\u00ebtejshme ato ofrojn\u00eb mund\u00ebsi NoSQL. K\u00ebtu do t\u00eb diskutojm\u00eb replikimin midis PostgreSQL dhe MySQL, nga perspektiva e databazave relacionale.<\/p>\n<p><\/p>\n<p>Nuk do t\u00eb p\u00ebrshkruajm\u00eb t\u00eb gjitha detajet e brendshme, vet\u00ebm parimet baz\u00eb, n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb merrni nj\u00ebide mbi konfigurimin e replikimit midis server\u00ebve t\u00eb databaz\u00ebs, p\u00ebrfitimet, kufizimet dhe skenar\u00ebt e p\u00ebrdorimit.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Zakonisht, replikimi midis dy serverave identik\u00eb t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave kryhet ose n\u00eb m\u00ebnyr\u00eb binarike, ose p\u00ebrmes k\u00ebrkesave mes nodit kryesor (publikues, kryesor ose aktiv) dhe atij t\u00eb dyt\u00eb (abonent, prit\u00ebs ose pasiv). Q\u00ebllimi i replikimit \u00ebsht\u00eb t\u00eb ofroj\u00eb n\u00eb koh\u00eb reale nj\u00eb kopje t\u00eb baz\u00ebs kryesore t\u00eb t\u00eb dh\u00ebnave n\u00eb an\u00ebn e nodit t\u00eb dyt\u00eb. N\u00eb k\u00ebt\u00eb rast, t\u00eb dh\u00ebnat transmetohen nga nodi kryesor te ai i dyt\u00eb, pra nga aktiv te pasiv, sepse replikimi kryhet vet\u00ebm n\u00eb nj\u00eb drejtim. Megjithat\u00eb, mund t\u00eb konfigurohet replikimi midis dy bazave t\u00eb t\u00eb dh\u00ebnave n\u00eb t\u00eb dyja drejtimet, q\u00eb do t\u00eb thot\u00eb se t\u00eb dh\u00ebnat transmetohen nga nodi i dyt\u00eb te ai kryesor n\u00eb konfigurimin \"aktiv-aktiv\". T\u00eb gjith\u00eb k\u00ebto, duke p\u00ebrfshir\u00eb replikimin kaskad, jan\u00eb t\u00eb mundshme mes dy ose m\u00eb shum\u00eb serverave identik\u00eb t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave. Konfigurimi \"aktiv-aktiv\" ose \"aktiv-pasiv\" varet nga nevoja, disponueshm\u00ebria e k\u00ebtyre mund\u00ebsive n\u00eb konfigurimin fillestar, ose p\u00ebrdorimi i zgjidhjeve t\u00eb jashtme p\u00ebr konfigurimin dhe kompromiset ekzistuese.<\/p>\n<p><\/p>\n<p>Konfigurimi i p\u00ebrshkruar \u00ebsht\u00eb i mundsh\u00ebm midis server\u00ebve t\u00eb ndrysh\u00ebm t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave. Nj\u00eb server mund t\u00eb konfigurohet p\u00ebr t\u00eb pranuar t\u00eb dh\u00ebnat e riprodhuara nga nj\u00eb server tjet\u00ebr i baz\u00ebs s\u00eb t\u00eb dh\u00ebnave dhe n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb t\u00eb ruaj\u00eb kopje t\u00eb t\u00eb dh\u00ebnave q\u00eb riprodhohen n\u00eb koh\u00eb reale. MySQL dhe PostgreSQL ofrojn\u00eb shumic\u00ebn e k\u00ebtyre konfigurimeve ose me forcat e tyre ose me ndihm\u00ebn e zgjerimeve t\u00eb pal\u00ebve t\u00eb treta, duke p\u00ebrfshir\u00eb metodat e logarit t\u00eb dyfisht\u00eb, bllokimin e disqeve dhe metodat e bazuara n\u00eb operator\u00eb dhe rreshta.<\/p>\n<p><\/p>\n<p>Riprodhimi i kryq\u00ebzuar midis MySQL dhe PostgreSQL \u00ebsht\u00eb i nevojsh\u00ebm p\u00ebr migrimin nj\u00eb her\u00eb nga nj\u00eb server i baz\u00ebs s\u00eb t\u00eb dh\u00ebnave n\u00eb nj\u00eb tjet\u00ebr. K\u00ebto baza t\u00eb dh\u00ebnash p\u00ebrdorin protokollet t\u00eb ndryshme, prandaj nuk \u00ebsht\u00eb e mundur t'i lidhni ato drejtp\u00ebrdrejt. P\u00ebr t\u00eb vendosur shk\u00ebmbimin e t\u00eb dh\u00ebnave, mund t\u00eb p\u00ebrdorni nj\u00eb mjet t\u00eb hapur burimi, si pg_chameleon.<\/p>\n<p><\/p>\n<h3 id=\"chto-takoe-pg_chameleon\">\u00c7far\u00eb \u00ebsht\u00eb pg_chameleon<\/h3>\n<p><\/p>\n<p>pg_chameleon \u00ebsht\u00eb nj\u00eb sistem riprodhimi nga MySQL n\u00eb PostgreSQL n\u00eb Python 3. Ai p\u00ebrdor bibliotek\u00ebn e hapur mysql-replication, gjithashtu n\u00eb Python. Imazhet e rreshtave nxirren nga tabelat MySQL dhe ruhet si objekte JSONB n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave PostgreSQL, dhe pastaj dekodohen nga funksioni pl\/pgsql dhe riprodhohen n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave PostgreSQL.<\/p>\n<p><\/p>\n<h3 id=\"vozmozhnosti-pg_chameleon\">Aft\u00ebsit\u00eb e pg_chameleon<\/h3>\n<p><\/p>\n<p>Disa skema MySQL nga nj\u00eb grup mund t\u00eb replikohen n\u00eb nj\u00eb baz\u00eb t\u00eb vetme PostgreSQL me konfigurimin \"nj\u00eb me shum\u00eb\"<br \/>\nEmrat e skemave origjinale dhe t\u00eb destinacionit nuk mund t\u00eb p\u00ebrputhen.<br \/>\nT\u00eb dh\u00ebnat e replikimit mund t\u00eb nxirren nga nj\u00eb replik\u00eb kaskad MySQL.<br \/>\nTabelat q\u00eb nuk mund t\u00eb replikohen ose krijojn\u00eb gabime p\u00ebrjashtohen.<br \/>\n\u00c7do funksion replikimi menaxhohet nga demon\u00ebt.<br \/>\nKontrolli me parametra dhe skedar\u00eb konfigurimi n\u00eb baz\u00eb YAML.<\/p>\n<p><\/p>\n<h3 id=\"primer\">Shembuj<\/h3>\n<p><\/p>\n<p>Host<br \/>\nvm1<br \/>\nvm2<\/p>\n<p><strong>Versioni i OS<\/strong><br \/>\nCentOS Linux 7.6 x86_64<br \/>\nCentOS Linux 7.5 x86_64<\/p>\n<p><strong>Versioni i serverit DB<\/strong><br \/>\nMySQL 5.7.26<br \/>\nPostgreSQL 10.5<\/p>\n<p><strong>Porti i DB<\/strong><br \/>\n3306<br \/>\n5433<\/p>\n<p><strong>IP adres\u00eb<\/strong><br \/>\n192.168.56.102<br \/>\n192.168.56.106<\/p>\n<p><\/p>\n<p>S\u00eb pari, p\u00ebrgatitni t\u00eb gjith\u00eb komponent\u00ebt e nevojsh\u00ebm p\u00ebr instalimin e pg_chameleon. N\u00eb k\u00ebt\u00eb shembull, Python 3.6.8 \u00ebsht\u00eb instaluar, i cili krijon nj\u00eb ambient virtual dhe e aktivizon at\u00eb.<\/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>Pas installimit t\u00eb suksessh\u00ebm t\u00eb Python3.6, duhet t\u00eb kryhen k\u00ebrkesat e tjera, si\u00e7 \u00ebsht\u00eb krijimi dhe aktivizimi i nj\u00eb mjedisi virtual. P\u00ebrve\u00e7 k\u00ebsaj, moduli pip p\u00ebrdit\u00ebsohet n\u00eb versionin m\u00eb t\u00eb fundit dhe p\u00ebrdoret p\u00ebr t\u00eb instaluar pg_chameleon. N\u00eb komandat m\u00eb posht\u00eb, q\u00ebllimisht instalohet pg_chameleon 2.0.9, megjith\u00ebse versioni m\u00eb i fundit \u00ebsht\u00eb 2.0.10. Kjo b\u00ebhet p\u00ebr t\u00eb shmangur gabimet e reja n\u00eb versionin e p\u00ebrdit\u00ebsuar.<\/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>Pastaj, ne th\u00ebrrasim pg_chameleon (chameleon \u00ebsht\u00eb komanda) me argumentin set_configuration_files, p\u00ebr t\u00eb aktivizuar pg_chameleon dhe krijuar direktoret dhe skedar\u00ebt e konfigurimit me parametrat e paracaktuar.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">(venv) $&gt; chameleon set_configuration_files\nkrijimi i direktoris\u00eb \/root\/.pg_chameleon\nkrijimi i direktoris\u00eb \/root\/.pg_chameleon\/configuration\/\nkrijimi i direktoris\u00eb \/root\/.pg_chameleon\/logs\/\nkrijimi i direktoris\u00eb \/root\/.pg_chameleon\/pid\/\nkopjimi i konfigurimit shembuj n\u00eb \/root\/.pg_chameleon\/configuration\/\/config-example.yml<\/code><\/pre>\n<p><\/p>\n<p>Tani krijojm\u00eb nj\u00eb kopje t\u00eb config-example.yml si default.yml, q\u00eb t\u00eb b\u00ebhet skedari i konfigurimit t\u00eb paracaktuar. Shembulli i skedarit t\u00eb konfigurimit p\u00ebr k\u00ebt\u00eb rast \u00ebsht\u00eb dh\u00ebn\u00eb m\u00eb posht\u00eb.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; cat default.yml\n---\n#c settings\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 lejon p\u00ebrdoruesin t\u00eb ndryshoj\u00eb konvertimin e tipit t\u00eb parazgjedhur n\u00eb nj\u00eb tjet\u00ebr.\ntype_override:\n  \"tinyint(1)\":\n    override_to: boolean\n    override_tables:\n      - \"*\"\n\n#postgres  lidhja e destinacionit\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 dit\u00eb'\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 #b\u00ebn skip inserimet n\u00eb tabel\u00ebn delphis_mediterranea.foo\n      delete:\n        - delphis_mediterranea #b\u00ebn skip fshirjet n\u00eb skem\u00ebn delphis_mediterranea\n      update:<\/code><\/pre>\n<p><\/p>\n<p>Skedari i konfigurimit n\u00eb k\u00ebt\u00eb shembull \u00ebsht\u00eb nj\u00eb model i skedarit pg_chameleon me ndryshime t\u00eb par\u00ebnd\u00ebsishme n\u00eb p\u00ebrputhje me ambientet origjinale dhe t\u00eb destinuara, dhe m\u00eb posht\u00eb jep nj\u00eb p\u00ebrmbledhje t\u00eb seksioneve t\u00eb ndryshme t\u00eb skedarit t\u00eb konfigurimit.<\/p>\n<p><\/p>\n<p>N\u00eb skedarin e konfigurimit default.yml ka nj\u00eb seksion p\u00ebr parametrat global\u00eb (global settings), ku mund t\u00eb menaxhoni cil\u00ebsime t\u00eb tilla si vendndodhja e skedarit t\u00eb bllokimit, vendndodhja e regjistrimeve, periudha e ruajtjes s\u00eb regjistrimeve etj. M\u00eb pas vjen seksioni p\u00ebr kalimin e llojeve (type override), ku \u00ebsht\u00eb e p\u00ebrcaktuar nj\u00eb grup rregullash p\u00ebr kalimin e llojeve gjat\u00eb replikimit. N\u00eb shembullin e paracaktuar p\u00ebrdoret nj\u00eb rregull kalimi tipi q\u00eb shnd\u00ebrron tinyint(1) n\u00eb nj\u00eb vler\u00eb logjike. N\u00eb seksionin e ardhsh\u00ebm specifikoni detajet e lidhjes me baz\u00ebn e t\u00eb dh\u00ebnave target. N\u00eb rastin ton\u00eb, kjo \u00ebsht\u00eb nj\u00eb baz\u00eb t\u00eb dh\u00ebnash PostgreSQL, e cila \u00ebsht\u00eb sh\u00ebnuar si pg_conn. N\u00eb seksionin e fundit, specifikoni t\u00eb dh\u00ebnat e burimit, dometh\u00ebn\u00eb parametrat e lidhjes s\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave burimore, skem\u00ebn e p\u00ebrputhjes nd\u00ebrmjet baz\u00ebs s\u00eb t\u00eb dh\u00ebnave burimore dhe asaj target, tabelat q\u00eb duhet t\u00eb kalohen, koha e pritjes, memoria, madh\u00ebsia e paket\u00ebs. Vini re se \"sources\" \u00ebsht\u00eb e sh\u00ebnuar n\u00eb shum\u00ebs, do t\u00eb thot\u00eb se ne mund t\u00eb shtojm\u00eb disa baza t\u00eb dh\u00ebnash burimore p\u00ebr nj\u00eb t\u00eb vetme target, p\u00ebr t\u00eb konfiguruar nj\u00eb konfigurim \"shum\u00eb n\u00eb nj\u00eb\".<\/p>\n<p><\/p>\n<p>Baza e t\u00eb dh\u00ebnave world_x n\u00eb shembull p\u00ebrmban 4 tabela me rreshta q\u00eb komuniteti MySQL ofron si shembull. Ajo mund t\u00eb shkarkohet <noindex><a rel=\"nofollow\" href=\"https:\/\/dev.mysql.com\/doc\/index-other.html\">k\u00ebtu<\/a><\/noindex>. Shembulli i baz\u00ebs s\u00eb t\u00eb dh\u00ebnave ofrohet n\u00eb form\u00ebn e nj\u00eb arkivi tar dhe t\u00eb kompresuar me udh\u00ebzime p\u00ebr krijimin dhe importimin e rreshtave.<\/p>\n<p><\/p>\n<p>N\u00eb bazat e t\u00eb dh\u00ebnave MySQL dhe PostgreSQL krijohet nj\u00eb p\u00ebrdorues i ve\u00e7ant\u00eb me emrin e nj\u00ebjt\u00eb usr_replica. N\u00eb MySQL, atij i jepen t\u00eb drejta t\u00eb tjera p\u00ebr t\u00eb lexuar t\u00eb gjitha tabulat e replikueshme.<\/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>N\u00eb an\u00ebn e PostgreSQL krijohet nj\u00eb baz\u00eb e dh\u00ebnash db_replica, e cila do t\u00eb pranoj\u00eb ndryshimet nga baza e t\u00eb dh\u00ebnave MySQL. P\u00ebrdoruesi usr_replica n\u00eb PostgreSQL konfigurtohet automatikisht si pronar i dy skemave pgworld_x dhe sch_chameleon, t\u00eb cilat p\u00ebrmbajn\u00eb tabelat reale t\u00eb replik\u00ebs dhe tabelat me katalog\u00ebt e replik\u00ebs p\u00ebrkat\u00ebsisht. Konfigurimi automatik b\u00ebhet p\u00ebrmes argumentit create_replica_schema, si\u00e7 do ta shihni m\u00eb posht\u00eb.<\/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>Grupimi i MySQL konfigurohet me ndryshime t\u00eb disa parametrave p\u00ebr ta p\u00ebrgatitur at\u00eb p\u00ebr replikim, si\u00e7 tregohet m\u00eb posht\u00eb. Do t\u00eb nevojitet t\u00eb riaktivizoni serverin e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave q\u00eb ndryshimet t\u00eb hyjn\u00eb n\u00eb fuqi.<\/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>Tani \u00ebsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb kontrolloni lidhjen me t\u00eb dy server\u00ebt e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave, p\u00ebr t\u00eb siguruar q\u00eb gjat\u00eb ekzekutimit t\u00eb komandave pg_chameleon t\u00eb mos ket\u00eb probleme.<\/p>\n<p><\/p>\n<p>N\u00eb nodin PostgreSQL:<\/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>N\u00eb nodin MySQL :<\/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>Tre komandat e m\u00ebposhtme pg_chameleon (chameleon) p\u00ebrgatisin mjedisin, shtojn\u00eb burimin dhe inicializojn\u00eb replik\u00ebn. Argumenti create_replica_schema n\u00eb pg_chameleon krijon skem\u00ebn standarde (sch_chameleon) dhe skem\u00ebn e replik\u00ebs (pgworld_x) n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave PostgreSQL, si\u00e7 e p\u00ebrmend\u00ebm m\u00eb par\u00eb. Argumenti add_source shton burimin e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave n\u00eb konfigurim, duke lexuar skedarin e konfigurimit (default.yml), dhe n\u00eb rastin ton\u00eb \u00ebsht\u00eb mysql, nd\u00ebrsa init_replica inicializon konfigurimin bazuar n\u00eb parametrat n\u00eb skedarin e konfigurimit.<\/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>T\u00eb dh\u00ebnat e k\u00ebtyre tre komandave me sa duket tregojn\u00eb p\u00ebr arritjen e suksesshme t\u00eb tyre. T\u00eb gjitha d\u00ebshtimet ose gabimet sintaksore paraqiten n\u00eb mesazhe t\u00eb thjeshta dhe t\u00eb kuptueshme me sugjerime p\u00ebr korrigjimin e problemeve.<\/p>\n<p><\/p>\n<p>N\u00eb fund, le t\u00eb fillojm\u00eb replikimin me start_replica dhe t\u00eb marrim nj\u00eb mesazh p\u00ebr p\u00ebrfundimin e suksessh\u00ebm.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; chameleon start_replica --config default --source mysql \noutput: Duke filluar procesin e replikimit p\u00ebr burimin mysql<\/code><\/pre>\n<p><\/p>\n<p>Statusi i replikimit mund t\u00eb k\u00ebrkohet me argumentin show_status, nd\u00ebrsa gabimet mund t\u00eb shihen me argumentin show_errors.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/xpaste.pro\/p\/iYMdAf0b\">Rezultati.<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Si\u00e7 e p\u00ebrmend\u00ebm m\u00eb par\u00eb, \u00e7do funksion replikimi menaxhohet nga demon\u00ebt. P\u00ebr t\u00eb par\u00eb ata, do t\u00eb k\u00ebrkojm\u00eb tabel\u00ebn e proceseve me komand\u00ebn Linux ps, si\u00e7 tregohet m\u00eb posht\u00eb.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/xpaste.pro\/p\/59GfdvHA\">Rezultati.<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Replikimi nuk konsiderohet i konfiguruar derisa ta testojm\u00eb at\u00eb n\u00eb koh\u00eb reale, si\u00e7 tregohet m\u00eb posht\u00eb. Krijojm\u00eb nj\u00eb tabel\u00eb, insertojm\u00eb disa regjistrime n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave MySQL dhe th\u00ebrrasim argumentin sync_tables n\u00eb pg_chameleon p\u00ebr t\u00eb p\u00ebrdit\u00ebsuar demon\u00ebt dhe p\u00ebr t\u00eb replikuar tabel\u00ebn me regjistrat n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave PostgreSQL.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">mysql&gt; create table t1 (n1 int primary key, n2 varchar(10));\nQuery OK, 0 rows affected (0.01 sec)\nmysql&gt; insert into t1 values (1,'one');\nQuery OK, 1 row affected (0.00 sec)\nmysql&gt; insert into t1 values (2,'two');\nQuery OK, 1 row affected (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\nProcesi i sinkronizimit t\u00eb tabelave p\u00ebr burimin mysql ka filluar.<\/code><\/pre>\n<p><\/p>\n<p>P\u00ebr t\u00eb konfirmuar rezultatet e testit, ne k\u00ebrkojm\u00eb tabel\u00ebn nga baza e t\u00eb dh\u00ebnave PostgreSQL dhe e nxjerrim rreshtat.<\/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>N\u00ebse po kryejm\u00eb migrimin, komandat e ardhshme t\u00eb pg_chameleon do t\u00eb p\u00ebrfundojn\u00eb at\u00eb. Komandat duhet t\u00eb ekzekutohen pasi t\u00eb sigurohemi se t\u00eb gjith\u00eb rreshtat e tabelave q\u00ebllimore jan\u00eb replicuar, dhe rezultati do t\u00eb jet\u00eb nj\u00eb baz\u00eb t\u00eb dh\u00ebnash PostgreSQL e transferuar sakt\u00eb pa referenca n\u00eb burimin ose skem\u00ebn e replikimit (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>Si opsion, komandat e ardhshme mund t\u00eb p\u00ebrdoren p\u00ebr t\u00eb fshir\u00eb konfigurimin origjinal dhe skem\u00ebn e replikimit.<\/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\">P\u00ebrfitimet e pg_chameleon<\/h3>\n<p><\/p>\n<p>Konfigurimi dhe vendosja e thjesht\u00eb.<br \/>\nDiagnoz\u00eb e leht\u00eb dhe identifikim i anomalive me mesazhe gabimesh t\u00eb qarta.<br \/>\nT\u00eb dh\u00ebna t\u00eb ve\u00e7anta shtes\u00eb mund t\u00eb shtohen n\u00eb replikim pas inicializimit, pa ndryshuar konfigurimin e mbetur.<br \/>\nMund t\u00eb konfiguroni disa baza t\u00eb dh\u00ebnash burimore p\u00ebr nj\u00eb t\u00eb targetuar, dhe kjo \u00ebsht\u00eb shum\u00eb e dobishme kur bashkoni t\u00eb dh\u00ebnat nga nj\u00eb ose m\u00eb shum\u00eb baza t\u00eb dh\u00ebnash MySQL n\u00eb nj\u00eb baz\u00eb t\u00eb dh\u00ebnash PostgreSQL.<br \/>\nMund t\u00eb mos replikoni tabelat e zgjedhura.<\/p>\n<p><\/p>\n<h3 id=\"nedostatki-pg_chameleon\">Disavantazhet e pg_chameleon<\/h3>\n<p><\/p>\n<p>Mb\u00ebshtetet vet\u00ebm me MySQL 5.5 dhe m\u00eb lart si burim dhe PostgreSQL 9.5 dhe m\u00eb lart si baz\u00eb t\u00eb dh\u00ebnash t\u00eb targetuar.<br \/>\n\u00c7do tabel\u00eb duhet t\u00eb ket\u00eb nj\u00eb \u00e7el\u00ebs primar ose unik, p\u00ebrndryshe tabelat inicializohen gjat\u00eb procesit init_replica, por nuk replikohen.<br \/>\nReplikimi nj\u00ebansh\u00ebm \u2014 vet\u00ebm nga MySQL n\u00eb PostgreSQL. Prandaj, p\u00ebrshtatet vet\u00ebm p\u00ebr skem\u00ebn 'aktiv-pasiv'.<br \/>\nBurimi mund t\u00eb jet\u00eb vet\u00ebm nj\u00eb baz\u00eb t\u00eb dh\u00ebnash MySQL, dhe mb\u00ebshtetje p\u00ebr baz\u00ebn e t\u00eb dh\u00ebnave PostgreSQL si burim \u00ebsht\u00eb vet\u00ebm eksperimentale dhe me kufizime (merrni m\u00eb shum\u00eb informacion) <noindex><a rel=\"nofollow\" href=\"https:\/\/pgchameleon.org\/documents\/configuration_file.html#postgresql-source-type-experimental\">k\u00ebtu<\/a><\/noindex>)<\/p>\n<p><\/p>\n<h3 id=\"itogi-po-pg_chameleon\">P\u00ebrmbledhje p\u00ebr pg_chameleon<\/h3>\n<p><\/p>\n<p>Metoda e replikimit n\u00eb pg_chameleon \u00ebsht\u00eb shk\u00eblqyer p\u00ebr migrimin e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave nga MySQL n\u00eb PostgreSQL. Nj\u00eb mang\u00ebsi e r\u00ebnd\u00ebsishme \u00ebsht\u00eb se replikimi \u00ebsht\u00eb vet\u00ebm nj\u00ebansh\u00ebm, k\u00ebshtu q\u00eb specialist\u00ebt e bazave t\u00eb dh\u00ebnash me siguri nuk do t\u00eb duan ta p\u00ebrdorin at\u00eb p\u00ebr di\u00e7ka tjet\u00ebr p\u00ebrve\u00e7 migrimit. Por problemi i replikimit nj\u00ebansh\u00ebm mund t\u00eb zgjidhet me nj\u00eb mjet tjet\u00ebr me burim t\u00eb hapur \u2014 SymmetricDS.<\/p>\n<p><\/p>\n<p>M\u00eb shum\u00eb mund t\u00eb lexoni n\u00eb dokumentacionin zyrtar <noindex><a rel=\"nofollow\" href=\"https:\/\/pgchameleon.org\/documents\/\">k\u00ebtu<\/a><\/noindex>. Ndihm\u00ebn p\u00ebr komandat n\u00eb linj\u00eb mund ta gjeni <noindex><a rel=\"nofollow\" href=\"https:\/\/pgchameleon.org\/documents\/usage.html#https:\/\/pgchameleon.org\/documents\/usage.html\">k\u00ebtu<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"obzor-symmetricds\">P\u00ebrmbledhja e SymmetricDS<\/h3>\n<p><\/p>\n<p>SymmetricDS \u00ebsht\u00eb nj\u00eb veg\u00ebl open-source q\u00eb replikohet \u00e7do baz\u00eb t\u00eb dh\u00ebnash n\u00eb \u00e7do baz\u00eb tjet\u00ebr t\u00eb njohur t\u00eb dh\u00ebnash: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird dhe ekzemplar\u00eb t\u00eb tjer\u00eb t\u00eb bazave t\u00eb dh\u00ebnash n\u00eb cloud, si Redshift dhe Azure, etj. Ve\u00e7orit\u00eb e disponueshme: sinkronizimi i bazave t\u00eb t\u00eb dh\u00ebnave dhe skedar\u00ebve, replikimi i disa burimeve t\u00eb bazave t\u00eb dh\u00ebnash, sinkronizimi i filtruar, transformimi dhe t\u00eb tjera. Ky \u00ebsht\u00eb nj\u00eb veg\u00ebl n\u00eb Java, dhe k\u00ebrkon nj\u00eb version standard t\u00eb JRE ose JDK (versionet 8.0 ose m\u00eb lart). K\u00ebtu mund t\u00eb regjistrohen ndryshimet e t\u00eb dh\u00ebnave nga trigjet n\u00eb baz\u00ebn e dh\u00ebnash burimore dhe t'i drejtohen baz\u00ebs s\u00eb dh\u00ebnash q\u00ebllim n\u00eb form\u00eb paketash.<\/p>\n<p><\/p>\n<h3 id=\"vozmozhnosti-symmetricds\">Ve\u00e7orit\u00eb e SymmetricDS<\/h3>\n<p><\/p>\n<p>Vegla \u00ebsht\u00eb e pavarur nga platforma, q\u00eb do t\u00eb thot\u00eb se dy ose m\u00eb shum\u00eb baza t\u00eb ndryshme t\u00eb dh\u00ebnash mund t\u00eb shk\u00ebmbejn\u00eb t\u00eb dh\u00ebna.<br \/>\nBaza t\u00eb dh\u00ebnash relacional\u00eb sinkronizohen p\u00ebrmes regjistrimit t\u00eb ndryshimeve t\u00eb t\u00eb dh\u00ebnave, nd\u00ebrsa bazat e dh\u00ebnash q\u00eb bazohen n\u00eb sisteme skedar\u00ebsh p\u00ebrdorin sinkronizimin e skedar\u00ebve.<br \/>\nReplikimi dyt\u00ebsor duke p\u00ebrdorur metoda Push dhe Pull t\u00eb bazuara n\u00eb nj\u00eb set rregullash.<br \/>\nTransferimi i t\u00eb dh\u00ebnave \u00ebsht\u00eb i mundur p\u00ebrmes rrjetesh t\u00eb sigurta dhe rrjetesh me kapacitet t\u00eb ul\u00ebt kalimi.<br \/>\nRikuperimi automatik kur nodet rifillojn\u00eb pun\u00ebn pas nj\u00eb d\u00ebshtimi dhe zgjidhja automatikisht e konflikteve.<br \/>\nKompatibilitet me cloud dhe API efikas p\u00ebr zgjatime.<\/p>\n<p><\/p>\n<h3 id=\"primer-1\">Shembuj<\/h3>\n<p><\/p>\n<p>SymmetricDS mund t\u00eb konfigurohet n\u00eb nj\u00eb nga dy opsionet:<br \/>\nNj\u00eb nod t\u00eb kryesore (prind) q\u00eb koordinon n\u00eb m\u00ebnyr\u00eb qendrore replikimin e t\u00eb dh\u00ebnave midis dy nodet n\u00ebnshkruese (f\u00ebmij\u00eb), dhe shk\u00ebmbimi i t\u00eb dh\u00ebnave midis nod\u00ebve f\u00ebmij\u00eb ndodh vet\u00ebm p\u00ebrmes prindit.<br \/>\nNj\u00eb nod aktiv (nodi 1) mund t\u00eb shk\u00ebmbej\u00eb t\u00eb dh\u00ebna p\u00ebr replikim me nj\u00eb nod tjet\u00ebr aktiv (nodi 2) pa nd\u00ebrmjet\u00ebs.<\/p>\n<p><\/p>\n<p>N\u00eb t\u00eb dy opsionet, shk\u00ebmbimi i t\u00eb dh\u00ebnave ndodh p\u00ebrmes Push dhe Pull. N\u00eb k\u00ebt\u00eb shembull, ne do t\u00eb shqyrtojm\u00eb konfigurimin \"aktiv-aktiv\". T\u00eb p\u00ebrshkruash t\u00ebr\u00eb arkitektur\u00ebn \u00ebsht\u00eb shum\u00eb e gjat\u00eb, prandaj shqyrto <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/doc\/3.10\/html\/user-guide.html#_architecture\">nj\u00eb udh\u00ebzues<\/a><\/noindex>, p\u00ebr t\u00eb m\u00ebsuar m\u00eb shum\u00eb rreth pajisjes SymmetricDS.<\/p>\n<p><\/p>\n<p>Instalimi i SymmetricDS \u00ebsht\u00eb shum\u00eb i thjesht\u00eb: shkarko versionin open-source t\u00eb skedarit zip <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/download\">k\u00ebtu<\/a><\/noindex> dhe ta nxirrni aty ku d\u00ebshironi. N\u00eb tabel\u00ebn m\u00eb posht\u00eb paraqiten t\u00eb dh\u00ebnat p\u00ebr vendndodhjen dhe versionin e SymmetricDS n\u00eb k\u00ebt\u00eb shembull, si dhe versionet e baza t\u00eb dh\u00ebnash, versionet e Linux-it, adresat IP dhe portet p\u00ebr t\u00eb dy node-t.<\/p>\n<p><\/p>\n<p>Host<br \/>\nvm1<br \/>\nvm2<\/p>\n<p><strong>Versioni i OS<\/strong><br \/>\nCentOS Linux 7.6 x86_64<br \/>\nCentOS Linux 7.6 x86_64<\/p>\n<p><strong>Versioni i serverit DB<\/strong><br \/>\nMySQL 5.7.26<br \/>\nPostgreSQL 10.5<\/p>\n<p><strong>Porti i DB<\/strong><br \/>\n3306<br \/>\n5832<\/p>\n<p><strong>IP adres\u00eb<\/strong><br \/>\n192.168.1.107<br \/>\n192.168.1.112<\/p>\n<p><strong>Versioni i SymmetricDS<\/strong><br \/>\nSymmetricDS 3.9<br \/>\nSymmetricDS 3.9<\/p>\n<p><strong>Shtegu i instalimit t\u00eb SymmetricDS<\/strong><br \/>\n\/usr\/local\/symmetric-server-3.9.20<br \/>\n\/usr\/local\/symmetric-server-3.9.20<\/p>\n<p><strong>Emri i nodit SymmetricDS<\/strong><br \/>\ncorp-000<br \/>\nstore-001<\/p>\n<p><\/p>\n<p>K\u00ebtu po instalojm\u00eb SymmetricDS n\u00eb \/usr\/local\/symmetric-server-3.9.20, dhe k\u00ebtu do t\u00eb ruhen katalog\u00ebt e ndrysh\u00ebm dhe skedar\u00ebt. Na interesojn\u00eb katalog\u00ebt e brendsh\u00ebm samples dhe engines. N\u00eb katalogun samples gjenden shembujt e skedar\u00ebve t\u00eb konfigurimit me atributet e nodit, si dhe shembujt e skript\u00ebve SQL p\u00ebr t\u00eb filluar shpejt\u00eb demonstrimin.<\/p>\n<p><\/p>\n<p>N\u00eb katalogun samples shohim tre skedar\u00eb konfigurimi me atributet e nodit - emri tregon karakterin e nodit n\u00eb nj\u00eb skem\u00eb t\u00eb caktuar.<\/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>N\u00eb SymmetricDS ka t\u00eb gjitha skedar\u00ebt e nevojsh\u00ebm t\u00eb konfigurimit p\u00ebr skem\u00ebn baz\u00eb nga 3 nod\u00eb (opsioni 1), dhe t\u00eb nj\u00ebjt\u00ebt skedar\u00eb mund t\u00eb p\u00ebrdoren p\u00ebr skem\u00ebn nga 2 nod\u00eb (opsioni 2). Kthen skedarin e nevojsh\u00ebm t\u00eb konfigurimit nga katalogu samples n\u00eb engines n\u00eb host-in vm1. K\u00ebshtu del:<\/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>Ky ky\u00e7 i konfigurimit t\u00eb SymmetricDS quhet corp-000, dhe lidhja me baz\u00ebn e t\u00eb dh\u00ebnave trajtohet nga drejtuesi mysql jdbc, i cili p\u00ebrdor rreshtin e lidhjes t\u00eb p\u00ebrmendur m\u00eb sip\u00ebr dhe kredencialet p\u00ebr hyrje. Ne lidhemi me baz\u00ebn e t\u00eb dh\u00ebnave replica_db dhe gjat\u00eb krijimit t\u00eb skem\u00ebs do t\u00eb krijohen tabelat. sync.url tregon vendin e lidhjes me nyj\u00ebn p\u00ebr sinkronizim.<\/p>\n<p><\/p>\n<p>Nod 2 n\u00eb hostin vm2 konfigurtohet si store-001, nd\u00ebrsa pjesa tjet\u00ebr \u00ebsht\u00eb e dokumentuar n\u00eb skedarin node.properties, i cili jepet m\u00eb posht\u00eb. Nod store-001 p\u00ebrdor nj\u00eb baz\u00eb t\u00eb dh\u00ebnash PostgreSQL, dhe pgdb_replica \u00ebsht\u00eb baza e t\u00eb dh\u00ebnave p\u00ebr replikim. registration.url lejon hostin vm2 t\u00eb lidhet me hostin vm1 dhe t\u00eb marr\u00eb detajet e konfigurimit prej tij.<\/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>Shembulli i gatsh\u00ebm i SymmetricDS p\u00ebrmban parametrat p\u00ebr konfigurar replikimin dyansh\u00ebm midis dy server\u00ebve t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave (dy nyjave). Hapat e m\u00ebposht\u00ebm ekzekutohen n\u00eb hostin vm1 (corp-000), e cila do t\u00eb krijoj\u00eb nj\u00eb shembull skeme me 4 tabela. M\u00eb pas, ekzekutimi i komand\u00ebs create-sym-tables me symadmin krijon tabelat e katalogut, ku do t\u00eb ruhen rregullat dhe drejtimi i replikimit midis nyjave. N\u00eb fund, n\u00eb tabela ngarkohet nj\u00eb shembull i t\u00eb dh\u00ebnave.<\/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\u00eb shembullin e tabelave, item dhe item_selling_price jan\u00eb konfiguruar automatikisht p\u00ebr replikim nga corp-000 n\u00eb store-001, nd\u00ebrsa tabelat e shitjes (sale_transaction dhe sale_return_line_item) jan\u00eb konfiguruar automatikisht p\u00ebr replikim nga store-001 n\u00eb corp-000. Tani krijojm\u00eb nj\u00eb skem\u00eb n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave PostgreSQL n\u00eb hostin vm2 (store-001), p\u00ebr ta p\u00ebrgatitur at\u00eb p\u00ebr pranim t\u00eb t\u00eb dh\u00ebnave nga corp-000.<\/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>Ne blehni q\u00eb n\u00eb databaz\u00ebn MySQL n\u00eb vm1 ka shembuj t\u00eb tabelave dhe tabelave t\u00eb katalog\u00ebve t\u00eb SymmetricDS. Vini re se tabelat sistemike t\u00eb SymmetricDS (me prefiksin sym_) aktualisht jan\u00eb t\u00eb disponueshme vet\u00ebm n\u00eb nyj\u00ebn corp-000, sepse aty kemi ekzekutuar komand\u00ebn create-sym-tables dhe do t\u00eb menaxhojm\u00eb replikimin. Po ashtu, n\u00eb databaz\u00ebn n\u00eb nyj\u00ebn store-001 do t\u00eb ket\u00eb vet\u00ebm 4 tabela shembuj pa t\u00eb dh\u00ebna.<\/p>\n<p><\/p>\n<p>Gati. Ambienti \u00ebsht\u00eb gati p\u00ebr t\u00eb nisur proceset serverike sym n\u00eb t\u00eb dy nyjat, si\u00e7 tregohet m\u00eb posht\u00eb.<\/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>T\u00eb dh\u00ebnat e logeve d\u00ebrgohen n\u00eb skedarin e logut t\u00eb prapambetur (symmetric.log) n\u00eb dosjen e logeve n\u00eb katalogun ku \u00ebsht\u00eb instaluar SymmetricDS, si dhe n\u00eb daljet standarde. Serveri sym tani mund t\u00eb iniciohet n\u00eb nyj\u00ebn 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>N\u00ebse e aktivizoni procesin e serverit sym n\u00eb hostin vm2, ai do t\u00eb krijoj\u00eb tabelat e katalogut t\u00eb SymmetricDS gjithashtu n\u00eb databaz\u00ebn PostgreSQL. N\u00ebse aktivizoni procesin e serverit sym n\u00eb t\u00eb dy nodet, ato do t\u00eb koordinohen me nj\u00ebra-tjetr\u00ebn p\u00ebr t\u00eb riplikuar t\u00eb dh\u00ebnat nga corp-000 n\u00eb store-001. N\u00ebse pas disa sekondash k\u00ebrkojm\u00eb t\u00eb gjitha 4 tabelat nga t\u00eb dy an\u00ebt, do t\u00eb shohim se riplikimi \u00ebsht\u00eb kryer me sukses. Ose mund t\u00eb d\u00ebrgojm\u00eb nj\u00eb ngarkes\u00eb fillestare n\u00eb nodin store-001 nga corp-000 me komand\u00ebn e ardhshme.<\/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>N\u00eb k\u00ebt\u00eb pik\u00eb, n\u00eb tabel\u00ebn item n\u00eb databaz\u00ebn MySQL n\u00eb nodin corp-000 (host: vm1), shtohet nj\u00eb regjistrim i ri dhe mund t\u00eb verifikohet riplikimi i saj n\u00eb databaz\u00ebn PostgreSQL n\u00eb nodin store-001 (host: vm2). Ne shohim operacionin Pull p\u00ebr t\u00eb transferuar t\u00eb dh\u00ebnat nga corp-000 n\u00eb store-001.<\/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>P\u00ebr t\u00eb kryer operacionin Push p\u00ebr transferimin e t\u00eb dh\u00ebnave nga store-001 n\u00eb corp-000, shtoni nj\u00eb regjistrim n\u00eb tabel\u00ebn sale_transaction dhe kontrolloni q\u00eb riplikimi \u00ebsht\u00eb kryer.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/xpaste.pro\/p\/B23cJ4sP\">Rezultati.<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Ne kemi nj\u00eb konfigurim t\u00eb suksessh\u00ebm t\u00eb replikimit dypal\u00ebsh t\u00eb tabelave nd\u00ebrmjet bazave t\u00eb t\u00eb dh\u00ebnave MySQL dhe PostgreSQL. P\u00ebr t\u00eb ngritur replikimin p\u00ebr tabelat e reja t\u00eb p\u00ebrdoruesve, ndjekim hapat e m\u00ebposht\u00ebm. Krijojm\u00eb tabel\u00ebn t1 p\u00ebr shembull dhe konfigurojm\u00eb rregullat e replikimit si vijon. K\u00ebshtu, ne konfigurojm\u00eb vet\u00ebm replikimin nga corp-000 n\u00eb store-001.<\/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>Pastaj, konfigurimi merr nj\u00eb njoftim p\u00ebr ndryshimin e skem\u00ebs, q\u00eb do t\u00eb thot\u00eb shtimi i nj\u00eb tabele t\u00eb re, p\u00ebrmes komand\u00ebs symadmin me argumentin sync-triggers, i cili rip\u00ebrqendron trigjerat p\u00ebr t\u00eb p\u00ebrputhur p\u00ebrkufizimet e tabelave. Kryhet send-schema p\u00ebr t\u00eb d\u00ebrguar ndryshimet n\u00eb skem\u00eb n\u00eb nyj\u00ebn store-001, dhe replikimi i tabel\u00ebs t1 \u00ebsht\u00eb i konfiguruar.<\/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\">P\u00ebrfitimet e SymmetricDS<\/h3>\n<p><\/p>\n<p>Instalimi dhe konfigurimi i thjesht\u00eb, duke p\u00ebrfshir\u00eb nj\u00eb set t\u00eb gatsh\u00ebm skedash me parametra p\u00ebr krijimin e skemave me tri ose dy nyje.<br \/>\nKryqplatform\u00ebsia e bazave t\u00eb dh\u00ebnash dhe pavar\u00ebsia nga platforma t\u00eb ndryshme, duke p\u00ebrfshir\u00eb server\u00eb, laptop\u00eb dhe pajisje celulare.<br \/>\nReplika e \u00e7do baze t\u00eb dh\u00ebnash n\u00eb \u00e7do baz\u00eb tjet\u00ebr lokalisht, n\u00eb WAN ose n\u00eb cloud.<br \/>\nMund\u00ebsia p\u00ebr optimizimin e pun\u00ebs me nj\u00eb grup t\u00eb vog\u00ebl bazash t\u00eb dh\u00ebnash ose me qindra p\u00ebr replikim t\u00eb leht\u00eb.<br \/>\nVersioni i paguar me nj\u00eb nd\u00ebrfaqe grafike dhe mb\u00ebshtetje t\u00eb shk\u00eblqyer.<\/p>\n<p><\/p>\n<h3 id=\"nedostatki-symmetricds\">Disavantazhet e SymmetricDS<\/h3>\n<p><\/p>\n<p>Duhet t\u00eb p\u00ebrcaktohen manualisht n\u00eb komand\u00ebn e linj\u00ebs rregullat dhe drejtimi i replikimit p\u00ebrmes operator\u00ebve SQL p\u00ebr t\u00eb ngarkuar tabelat e katalogut, q\u00eb ndonj\u00ebher\u00eb \u00ebsht\u00eb e pak\u00ebndshme.<br \/>\nRregullimi i shum\u00eb tabelave p\u00ebr replikim mund t\u00eb jet\u00eb lodh\u00ebs, n\u00ebse nuk p\u00ebrdoren skriptet p\u00ebr t\u00eb krijuar operator\u00eb SQL q\u00eb p\u00ebrcaktojn\u00eb rregullat dhe drejtimin e replikimit.<br \/>\nShkruhen shum\u00eb informacione n\u00eb log, dhe ndonj\u00ebher\u00eb duhet t\u00eb organizohet skedari i logut q\u00eb t\u00eb mos z\u00ebr\u00eb shum\u00eb hap\u00ebsir\u00eb.<\/p>\n<p><\/p>\n<h3 id=\"itogi-po-symmetricds\">P\u00ebrmbledhje mbi SymmetricDS<\/h3>\n<p><\/p>\n<p>SymmetricDS lejon\u00eb t\u00eb konfiguroj\u00eb replikimin dyansh\u00ebm midis dy, tre dhe madje shum\u00eb mij\u00ebra nyjeve, p\u00ebr t\u00eb realizuar replikimin dhe sinkronizimin e skedareve. Ky \u00ebsht\u00eb nj\u00eb mjet unik q\u00eb kryen shum\u00eb detyra vet\u00eb, si rinovimin automatik t\u00eb t\u00eb dh\u00ebnave pas nj\u00eb pezullimi t\u00eb gjat\u00eb n\u00eb nyje, ndarjen e sigurt dhe efikase t\u00eb t\u00eb dh\u00ebnave midis nyjeve p\u00ebrmes HTTPS, menaxhimin automatik t\u00eb konflikteve bazuar n\u00eb nj\u00eb grup rregullash, etj. SymmetricDS realizon replikimin midis \u00e7do baze t\u00eb dh\u00ebnash, k\u00ebshtu q\u00eb mund t\u00eb p\u00ebrdoret p\u00ebr nj\u00eb gam\u00eb t\u00eb gjer\u00eb skenar\u00ebsh, duke p\u00ebrfshir\u00eb migrimin, kalimin n\u00eb nj\u00eb version t\u00eb ri, shp\u00ebrndarjen, filtrimin dhe transformimin e t\u00eb dh\u00ebnave n\u00eb platformat e ndryshme.<\/p>\n<p><\/p>\n<p>Shembulli \u00ebsht\u00eb krijuar mbi baz\u00ebn e zyrtare <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/doc\/3.9\/html\/tutorials.html\">udh\u00ebzuesit t\u00eb shkurt\u00ebr<\/a><\/noindex> p\u00ebr SymmetricDS. N\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.symmetricds.org\/doc\/3.9\/html\/user-guide.html\">udh\u00ebzuesin e p\u00ebrdoruesit<\/a><\/noindex> p\u00ebrshkruhen n\u00eb detaje konceptet e ndryshme t\u00eb lidhura me konfigurimin e replikimit me SymmetricDS.<\/p>\n<p>Burimi: <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\/sq\/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=\"sq_AL\" \/>\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\/sq\/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\udd47Replikimi Kryq\u00ebzor Nd\u00ebrmjet PostgreSQL dhe MySQL | ProHoster","description":"N\u00eb k\u00ebt\u00eb artikull, do t\u00eb flas n\u00eb p\u00ebrgjith\u00ebsi p\u00ebr replikimin kryq\u00ebzor midis PostgreSQL dhe MySQL, si dhe p\u00ebr metodat e konfigurimit t\u00eb replikimit kryq\u00ebzor mes k\u00ebtyre dy server\u00ebve t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave. Zakonisht, bazat e t\u00eb dh\u00ebnave n\u00eb replikimin kryq\u00ebzor quhen homogjene, dhe kjo \u00ebsht\u00eb nj\u00eb metod\u00eb e p\u00ebrshtatshme p\u00ebr t\u00eb kaluar nga nj\u00eb server i nj\u00eb sistemi menaxhimi t\u00eb t\u00eb dh\u00ebnave relacional n\u00eb nj\u00eb tjet\u00ebr. Bazat e t\u00eb dh\u00ebnave PostgreSQL dhe MySQL konsiderohen si relacionales, por me","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/perekrestnaya-replikatsiya-mezhdu-postgresql-i-mysql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/38146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=38146"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/38146\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/28635"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=38146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=38146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=38146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}