ВкрстСна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ PostgreSQL ΠΈ MySQL

ВкрстСна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ PostgreSQL ΠΈ MySQL

ЌС Π½Π°Π²Π΅Π΄Π°ΠΌ вкрстСна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ PostgreSQL ΠΈ MySQL, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ вкрстСна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π΄Π²Π°Ρ‚Π° сСрвСри Π½Π° Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. Π’ΠΎΠΎΠ±ΠΈΡ‡Π°Π΅Π½ΠΎ, вкрстСно Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π°Π°Ρ‚ Ρ…ΠΎΠΌΠΎΠ³Π΅Π½ΠΈ ΠΈ Ρ‚ΠΎΠ° Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° ΠΏΡ€Π΅ΠΌΠ΅ΡΡ‚ΡƒΠ²Π°ΡšΠ΅ ΠΎΠ΄ Π΅Π΄Π΅Π½ сСрвСр RDBMS Π½Π° Π΄Ρ€ΡƒΠ³.

Π‘Π°Π·ΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL ΠΈ MySQL Π³Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ сС смСтаат Π·Π° Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½ΠΈ, Π½ΠΎ со Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ СкстСнзии Ρ‚ΠΈΠ΅ Π½ΡƒΠ΄Π°Ρ‚ NoSQL способности. ОвдС ќС Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°ΠΌΠ΅ Π·Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ PostgreSQL ΠΈ MySQL ΠΎΠ΄ Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π° DBMS пСрспСктива.

НСма Π΄Π° ја опишСмС Ρ†Π΅Π»Π°Ρ‚Π° Π²Π½Π°Ρ‚Ρ€Π΅ΡˆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°, Ρ‚ΡƒΠΊΡƒ само основнитС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π·Π° Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ идСја Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ сСрвСритС Π½Π° Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, прСдноститС, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π°ΡšΠ°Ρ‚Π° ΠΈ случаитС Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°.

Π’ΠΎΠΎΠ±ΠΈΡ‡Π°Π΅Π½ΠΎ, Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π΄Π²Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ сСрвСри Π½Π° Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС Π²Ρ€ΡˆΠΈ ΠΈΠ»ΠΈ Π²ΠΎ Π±ΠΈΠ½Π°Ρ€Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ ΠΈΠ»ΠΈ со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° ΠΏΡ€Π°ΡˆΠ°ΡšΠ° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π³Π»Π°Π²Π΅Π½ (ΠΏΠΎΠ·Π½Π°Ρ‚ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π΄Π°Π²Π°Ρ‡, Π³Π»Π°Π²Π΅Π½ ΠΈΠ»ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½) ΠΈ slave (ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΠΊ, подготвСност ΠΈΠ»ΠΈ пасивСн). Π¦Π΅Π»Ρ‚Π° Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ Π΄Π° сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ копија Π²ΠΎ Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΎΠ΄ основната Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° slave страната. Π’ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ сС прСнСсуваат ΠΎΠ΄ господар Π½Π° Ρ€ΠΎΠ±, односно ΠΎΠ΄ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π²ΠΎ пасивСн, бидСјќи Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° сС ΠΈΠ·Π²Π΅Π΄ΡƒΠ²Π° само Π²ΠΎ Π΅Π΄Π½Π° насока. Но, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° поставитС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π΄Π²Π΅ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ Π΄Π²Π΅Ρ‚Π΅ насоки, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ сС прСнСсуваат ΠΎΠ΄ slave Π²ΠΎ master Π²ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ-Π°ΠΊΡ‚ΠΈΠ²Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°. Π‘Π΅Ρ‚ΠΎ ΠΎΠ²Π°, Π²ΠΊΠ»ΡƒΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ каскадната Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π΄Π²Π° ΠΈΠ»ΠΈ повСќС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ сСрвСри Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Активно-Π°ΠΊΡ‚ΠΈΠ²Π½Π° ΠΈΠ»ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ-пасивна ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° зависи ΠΎΠ΄ ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π°, достапноста Π½Π° Ρ‚Π°ΠΊΠ²ΠΈΡ‚Π΅ моТности Π²ΠΎ ΠΏΠΎΡ‡Π΅Ρ‚Π½Π°Ρ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΈΠ»ΠΈ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ½ΠΈ конфигурациски Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π° ΠΈ постоСчкитС компромиси.

ΠžΠΏΠΈΡˆΠ°Π½Π°Ρ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π΅ ΠΌΠΎΠΆΠ½Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ сСрвСри Π·Π° Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. Π‘Π΅Ρ€Π²Π΅Ρ€ΠΎΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° Π΄Π° ΠΏΡ€ΠΈΡ„Π°ΡœΠ° Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ сСрвСр Π·Π° Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ сСпак Π΄Π° ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π° снимки ΠΎΠ΄ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅. MySQL ΠΈ PostgreSQL Π³ΠΈ Π½ΡƒΠ΄Π°Ρ‚ ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ ΠΎΠ΄ ΠΎΠ²ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π²Π½Π°Ρ‚Ρ€Π΅ΡˆΠ½ΠΎ ΠΈΠ»ΠΈ ΠΏΡ€Π΅ΠΊΡƒ СкстСнзии ΠΎΠ΄ Ρ‚Ρ€Π΅Ρ‚ΠΈ страни, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π½Π° Π±ΠΈΠ½Π°Ρ€Π½ΠΈ Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈ, Π·Π°ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° диск ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° изјави ΠΈ Ρ€Π΅Π΄ΠΎΠ²ΠΈ.

ΠŸΠΎΡ‚Ρ€Π΅Π±Π½Π° Π΅ вкрстСна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ MySQL ΠΈ PostgreSQL Π·Π° Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡ˜Π° ΠΎΠ΄ Π΅Π΄Π΅Π½ сСрвСр Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³. ОвиС Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ користат Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Π½Π΅ Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π΄Π° сС ΠΏΠΎΠ²Ρ€Π·Π°Ρ‚. Π—Π° Π΄Π° воспоставитС Ρ€Π°Π·ΠΌΠ΅Π½Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° користитС Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ½Π° Π°Π»Π°Ρ‚ΠΊΠ° со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ pg_chameleon.

Π¨Ρ‚ΠΎ Π΅ pg_chameleon

pg_chameleon Π΅ систСм Π·Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΎΠ΄ MySQL Π΄ΠΎ PostgreSQL Π²ΠΎ Python 3. Ја користи Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ mysql-Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, исто Ρ‚Π°ΠΊΠ° Π²ΠΎ Python. Π‘Π»ΠΈΠΊΠΈΡ‚Π΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²ΠΈ сС ΠΈΠ·Π²Π»Π΅ΠΊΡƒΠ²Π°Π°Ρ‚ ΠΎΠ΄ Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ MySQL ΠΈ сС складираат ΠΊΠ°ΠΊΠΎ JSONB ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL, Π° ΠΏΠΎΡ‚ΠΎΠ° сС Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΈΡ€Π°Π°Ρ‚ со Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° pl/pgsql ΠΈ сС Ρ€Π΅ΠΏΡ€ΠΎΠ΄ΡƒΡ†ΠΈΡ€Π°Π°Ρ‚ Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL.

ΠšΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΡΡ‚ΠΈΠΊΠΈ Π½Π° pg_chameleon

ПовСќС MySQL шСми ΠΎΠ΄ истиот кластСр ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ Π²ΠΎ Π΅Π΄Π½Π° Ρ†Π΅Π»Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π΅Π΄Π΅Π½-Π½Π°-ΠΌΠ½ΠΎΠ³Ρƒ
Π˜ΠΌΠΈΡšΠ°Ρ‚Π° Π½Π° ΡˆΠ΅ΠΌΠ°Ρ‚Π° Π·Π° ΠΈΠ·Π²ΠΎΡ€ ΠΈ Ρ†Π΅Π» Π½Π΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ исти.
ΠŸΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π·Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π΅Π·Π΅ΠΌΠ°Ρ‚ ΠΎΠ΄ каскадна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Π½Π° MySQL.
Π’Π°Π±Π΅Π»ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ ΠΈΠ»ΠΈ Π΄Π° ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΡƒΠ²Π°Π°Ρ‚ Π³Ρ€Π΅ΡˆΠΊΠΈ сС исклучСни.
БСкоја Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½Π° ΠΎΠ΄ Π΄Π΅ΠΌΠΎΠ½ΠΈ.
ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° ΠΏΡ€Π΅ΠΊΡƒ YAML-Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΈ конфигурациски Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π”ΠΎΠΌΠ°ΡœΠΈΠ½
vm1
vm2

Π’Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ОБ
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Π’Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° DB сСрвСр
MySQL 5.7.26
PostgreSQL 10.5

DB ΠΏΠΎΡ€Ρ‚Π°
3306
5433

IP адрСса
192.168.56.102
192.168.56.106

Π—Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊ, ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π³ΠΈ ситС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π° pg_chameleon. Овој ΠΏΡ€ΠΈΠΌΠ΅Ρ€ инсталира Python 3.6.8, кој ја ΠΊΡ€Π΅ΠΈΡ€Π° ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π°Ρ‚Π° срСдина.

$> wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
$> tar -xJf Python-3.6.8.tar.xz
$> cd Python-3.6.8
$> ./configure --enable-optimizations
$> make altinstall

По ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π° Python3.6, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ исполнитС прСостанатитС Π±Π°Ρ€Π°ΡšΠ°, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС создавањС ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΡšΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° срСдина. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ, ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚ pip сС Π°ΠΆΡƒΡ€ΠΈΡ€Π° Π½Π° Π½Π°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° ΠΈ сС користи Π·Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π° pg_chameleon. ΠšΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ Π½Π°ΠΌΠ΅Ρ€Π½ΠΎ инсталираат pg_chameleon 2.0.9, ΠΈΠ°ΠΊΠΎ Π½Π°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π΅ 2.0.10. Ова Π΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π°Ρ‚ Π½ΠΎΠ²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ Π²ΠΎ Π°ΠΆΡƒΡ€ΠΈΡ€Π°Π½Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°.

$> python3.6 -m venv venv
$> source venv/bin/activate
(venv) $> pip install pip --upgrade
(venv) $> pip install pg_chameleon==2.0.9

ΠŸΠΎΡ‚ΠΎΠ° Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ pg_chameleon (ΠΊΠ°ΠΌΠ΅Π»Π΅ΠΎΠ½ΠΎΡ‚ Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°) со Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΡ‚ set_configuration_files Π·Π° Π΄Π° сС ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ pg_chameleon ΠΈ Π΄Π° сС создадат стандардни Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°.

(venv) $> chameleon set_configuration_files
creating directory /root/.pg_chameleon
creating directory /root/.pg_chameleon/configuration/
creating directory /root/.pg_chameleon/logs/
creating directory /root/.pg_chameleon/pid/
copying configuration  example in /root/.pg_chameleon/configuration//config-example.yml

Π‘Π΅Π³Π° создавамС копија ΠΎΠ΄ config-example.yml ΠΊΠ°ΠΊΠΎ default.yml Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Ρ‚Π°Π° ќС станС стандардна конфигурациска Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΊ Π·Π° конфигурациска Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π·Π° овој ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ Π΄Π°Π΄Π΅Π½ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ.

$> cat default.yml
---
#global settings
pid_dir: '~/.pg_chameleon/pid/'
log_dir: '~/.pg_chameleon/logs/'
log_dest: file
log_level: info
log_days_keep: 10
rollbar_key: ''
rollbar_env: ''

# type_override allows the user to override the default type conversion into a different one.
type_override:
  "tinyint(1)":
    override_to: boolean
    override_tables:
      - "*"

#postgres  destination connection
pg_conn:
  host: "192.168.56.106"
  port: "5433"
  user: "usr_replica"
  password: "pass123"
  database: "db_replica"
  charset: "utf8"

sources:
  mysql:
    db_conn:
      host: "192.168.56.102"
      port: "3306"
      user: "usr_replica"
      password: "pass123"
      charset: 'utf8'
      connect_timeout: 10
    schema_mappings:
      world_x: pgworld_x
    limit_tables:
#      - delphis_mediterranea.foo
    skip_tables:
#      - delphis_mediterranea.bar
    grant_select_to:
      - usr_readonly
    lock_timeout: "120s"
    my_server_id: 100
    replica_batch_size: 10000
    replay_max_rows: 10000
    batch_retention: '1 day'
    copy_max_memory: "300M"
    copy_mode: 'file'
    out_dir: /tmp
    sleep_loop: 1
    on_error_replay: continue
    on_error_read: continue
    auto_maintenance: "disabled"
    gtid_enable: No
    type: mysql
    skip_events:
      insert:
        - delphis_mediterranea.foo #skips inserts on the table delphis_mediterranea.foo
      delete:
        - delphis_mediterranea #skips deletes on schema delphis_mediterranea
      update:

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡΠΊΠ°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π²ΠΎ овој ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΊ ΠΎΠ΄ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° pg_chameleon со ΠΌΠ°Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈ Π·Π° Π΄Π° ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Π°Ρ‚ Π½Π° ΠΈΠ·Π²ΠΎΡ€Π½Π°Ρ‚Π° ΠΈ Ρ†Π΅Π»Π½Π°Ρ‚Π° срСдина, Π° ΠΏΠΎΠ΄ΠΎΠ»Ρƒ Π΅ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π΄Π΅Π»ΠΎΠ²ΠΈ ΠΎΠ΄ конфигурациската Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°.

Π’ΠΎ конфигурациската Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° default.yml ΠΈΠΌΠ° Π΄Π΅Π» ΠΎΠ΄ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡ‚Π΅ поставки, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Ρ‚Π΅ со поставкитС ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π·Π° Π·Π°ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅, Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈΡ‚Π΅, ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΡ‚ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π·Π° Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈ ΠΈΡ‚Π½. Π·Π±ΠΈΡ€ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Π½Π°Π΄ΠΌΠΈΠ½Π°Ρ‚ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ ΠΏΡ€ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ ΠΈΠΌΠ° стандардно ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π° ΠΏΡ€Π΅ΠΎΠ²Π»Π°Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ‚ΠΈΠΏΠΎΡ‚ ΡˆΡ‚ΠΎ Π³ΠΎ ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€Π° tinyint(1) Π²ΠΎ Π±ΡƒΠ»ΠΎΠ²Π° врСдност. Π’ΠΎ слСдниот Π΄Π΅Π», Π³ΠΈ ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π°ΠΌΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈΡ‚Π΅ Π·Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ со Ρ†Π΅Π»Π½Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. Π’ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜, ΠΎΠ²Π° Π΅ Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL, ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π° ΠΊΠ°ΠΊΠΎ pg_conn. Π’ΠΎ послСдниот Π΄Π΅Π», Π³ΠΈ Π½Π°Π²Π΅Π΄ΡƒΠ²Π°ΠΌΠ΅ ΠΈΠ·Π²ΠΎΡ€Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, односно ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π·Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΈΠ·Π²ΠΎΡ€Π½Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, ΡˆΠ΅ΠΌΠ°Ρ‚Π° Π·Π° ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ΅ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΈΠ·Π²ΠΎΡ€Π½Π°Ρ‚Π° ΠΈ Ρ†Π΅Π»Π½Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС прСскокнат, Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ‡Π΅ΠΊΠ°ΡšΠ΅, ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π°, Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚. Π—Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° β€žΠΈΠ·Π²ΠΎΡ€ΠΈβ€œ Π΅ ΠΌΠ½ΠΎΠΆΠΈΠ½Π°, ΡˆΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ повСќС Π±Π°Π·ΠΈ Π½Π° ΠΈΠ·Π²ΠΎΡ€Π½ΠΈ Π±Π°Π·ΠΈ Π½Π° Π΅Π΄Π½Π° Ρ†Π΅Π»Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° Π΄Π° поставимС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΌΠ½ΠΎΠ³Ρƒ-Π½Π°-Π΅Π΄Π΅Π½.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ world_x содрТи 4 Ρ‚Π°Π±Π΅Π»ΠΈ со Ρ€Π΅Π΄ΠΎΠ²ΠΈ ΠΊΠΎΠΈ MySQL Π·Π°Π΅Π΄Π½ΠΈΡ†Π°Ρ‚Π° Π³ΠΈ Π½ΡƒΠ΄ΠΈ ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ. МоТС Π΄Π° сС ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅ Ρ‚ΡƒΠΊΠ°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΊΠΎΡ‚ Π·Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π΄ΠΎΠ°Ρ“Π° ΠΊΠ°ΠΊΠΎ ΠΊΠ°Ρ‚Ρ€Π°Π½ ΠΈ компрСсирана Π°Ρ€Ρ…ΠΈΠ²Π° со инструкции Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΈ ΡƒΠ²ΠΎΠ· Π½Π° Ρ€Π΅Π΄ΠΎΠ²ΠΈ.

Π’ΠΎ Π±Π°Π·ΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ MySQL ΠΈ PostgreSQL, сС ΠΊΡ€Π΅ΠΈΡ€Π° ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π΅Π½ корисник со истото ΠΈΠΌΠ΅ usr_replica. Π’ΠΎ MySQL, ΠΌΡƒ сС Π΄Π°Π²Π°Π°Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΡ€Π°Π²Π° Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ Π½Π° ситС Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π½ΠΈ Ρ‚Π°Π±Π΅Π»ΠΈ.

mysql> CREATE USER usr_replica ;
mysql> SET PASSWORD FOR usr_replica='pass123';
mysql> GRANT ALL ON world_x.* TO 'usr_replica';
mysql> GRANT RELOAD ON *.* to 'usr_replica';
mysql> GRANT REPLICATION CLIENT ON *.* to 'usr_replica';
mysql> GRANT REPLICATION SLAVE ON *.* to 'usr_replica';
mysql> FLUSH PRIVILEGES;

На страната PostgreSQL, сС ΠΊΡ€Π΅ΠΈΡ€Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ db_replica која ќС ΠΏΡ€ΠΈΡ„Π°ΡœΠ° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΎΠ΄ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ MySQL. ΠšΠΎΡ€ΠΈΡΠ½ΠΈΠΊΠΎΡ‚ usr_replica Π²ΠΎ PostgreSQL автоматски сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° ΠΊΠ°ΠΊΠΎ сопствСник Π½Π° Π΄Π²Π΅ шСми, pgworld_x ΠΈ sch_chameleon, ΠΊΠΎΠΈ Π³ΠΈ содрТат вистинскитС Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π½ΠΈ Ρ‚Π°Π±Π΅Π»ΠΈ ΠΈ Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π·Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, соодвСтно. АргумСнтот create_replica_schema Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° автоматска ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ ќС Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ.

postgres=# CREATE USER usr_replica WITH PASSWORD 'pass123';
CREATE ROLE
postgres=# CREATE DATABASE db_replica WITH OWNER usr_replica;
CREATE DATABASE

Π‘Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ MySQL Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π° со Π½Π΅ΠΊΠΎΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π·Π° Π΄Π° сС ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈ Π·Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ. ЌС Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ рСстартиратС сСрвСрот Π·Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΄Π° стапат Π½Π° сила.

$> vi /etc/my.cnf
binlog_format= ROW
binlog_row_image=FULL
log-bin = mysql-bin
server-id = 1

Π‘Π΅Π³Π° Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ врската со Π΄Π²Π°Ρ‚Π° сСрвСри Π½Π° Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° Π΄Π° Π½Π΅ΠΌΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡ€ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ pg_chameleon.

На Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚ PostgreSQL:

$> mysql -u usr_replica -Ap'admin123' -h 192.168.56.102 -D world_x

На Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚ MySQL:

$> psql -p 5433 -U usr_replica -h 192.168.56.106 db_replica

Π‘Π»Π΅Π΄Π½ΠΈΡ‚Π΅ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ pg_chameleon (ΠΊΠ°ΠΌΠ΅Π»Π΅ΠΎΠ½) ја ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΡƒΠ²Π°Π°Ρ‚ ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π°, Π³ΠΎ Π΄ΠΎΠ΄Π°Π²Π°Π°Ρ‚ ΠΈΠ·Π²ΠΎΡ€ΠΎΡ‚ ΠΈ ја ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·ΠΈΡ€Π°Π°Ρ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚Π°. АргумСнтот create_replica_schema Π΄ΠΎ pg_chameleon создава стандардна шСма (sch_chameleon) ΠΈ шСма Π·Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° (pgworld_x) Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ вСќС Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°Π²ΠΌΠ΅. АргумСнтот add_source Π΄ΠΎΠ΄Π°Π²Π° ΠΈΠ·Π²ΠΎΡ€Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° со Ρ‡ΠΈΡ‚Π°ΡšΠ΅ Π½Π° конфигурациската Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° (default.yml), Π° Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜ Ρ‚ΠΎΠ° Π΅ mysql, Π° init_replica ја ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π²Ρ€Π· основа Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π²ΠΎ конфигурациската Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°.

$> chameleon create_replica_schema --debug
$> chameleon add_source --config default --source mysql --debug
$> chameleon init_replica --config default --source mysql --debug

Π˜Π·Π»Π΅Π·ΠΎΡ‚ Π½Π° ΠΎΠ²ΠΈΠ΅ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ јасно ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° Π΄Π΅ΠΊΠ° Ρ‚ΠΈΠ΅ Π±ΠΈΠ»Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠ΅Π½ΠΈ. Π‘ΠΈΡ‚Π΅ ΠΏΠ°Π΄ΠΎΠ²ΠΈ ΠΈΠ»ΠΈ синтаксички Π³Ρ€Π΅ΡˆΠΊΠΈ сС ΠΏΡ€ΠΈΡ˜Π°Π²Π΅Π½ΠΈ Π²ΠΎ Сдноставни, јасни ΠΏΠΎΡ€Π°ΠΊΠΈ со совСти Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° сС Ρ€Π΅ΡˆΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π°ΠΌΠ΅ со Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ start_replica ΠΈ Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½Π° ΠΏΠΎΡ€Π°ΠΊΠ°.

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

Бтатусот Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ±Π°Ρ€Π° со помош Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΡ‚ show_status, Π° Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΈΠ΄Π°Ρ‚ со помош Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΡ‚ show_errors.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚.

Како ΡˆΡ‚ΠΎ вСќС Ρ€Π΅ΠΊΠΎΠ²ΠΌΠ΅, сСкоја Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½Π° ΠΎΠ΄ Π΄Π΅ΠΌΠΎΠ½ΠΈ. Π—Π° Π΄Π° Π³ΠΈ Π²ΠΈΠ΄ΠΈΡ‚Π΅, ја Π±Π°Ρ€Π°ΠΌΠ΅ Ρ‚Π°Π±Π΅Π»Π°Ρ‚Π° со процСси со ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Linux ps, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚.

Π Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π΅ сС смСта Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π° Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ ја тСстирамС Π²ΠΎ Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ. Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ Ρ‚Π°Π±Π΅Π»Π°, Π²ΠΌΠ΅Ρ‚Π½ΡƒΠ²Π°ΠΌΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ записи Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ MySQL ΠΈ Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΡ‚ sync_tables Π²ΠΎ pg_chameleon Π·Π° Π΄Π° Π³ΠΈ Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ Π΄Π΅ΠΌΠΎΠ½ΠΈΡ‚Π΅ ΠΈ Π΄Π° ја Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π°Π±Π΅Π»Π°Ρ‚Π° со записитС Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL.

mysql> create table t1 (n1 int primary key, n2 varchar(10));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values (1,'one');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values (2,'two');
Query OK, 1 row affected (0.00 sec)

$> chameleon sync_tables --tables world_x.t1 --config default --source mysql
Sync tables process for source mysql started.

Π—Π° Π΄Π° Π³ΠΈ ΠΏΠΎΡ‚Π²Ρ€Π΄ΠΈΠΌΠ΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ тСстот, ја Π±Π°Ρ€Π°ΠΌΠ΅ Ρ‚Π°Π±Π΅Π»Π°Ρ‚Π° ΠΎΠ΄ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL ΠΈ Π³ΠΈ ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΠΌΠ΅ Ρ€Π΅Π΄ΠΎΠ²ΠΈΡ‚Π΅.

$> psql -p 5433 -U usr_replica -d db_replica -c "select * from pgworld_x.t1";
 n1 |  n2
----+-------
  1 | one
  2 | two

Ако ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡ˜Π°, слСднитС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ pg_chameleon ќС Π±ΠΈΠ΄Π°Ρ‚ ΠΊΡ€Π°Ρ˜ Π½Π° Π½Π΅Π°. НарСдбитС Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠ°Ρ‚ ΠΎΡ‚ΠΊΠ°ΠΊΠΎ ќС Π±ΠΈΠ΄Π΅ΠΌΠ΅ сигурни Π΄Π΅ΠΊΠ° Ρ€Π΅Π΄ΠΎΠ²ΠΈΡ‚Π΅ Π½Π° ситС Ρ†Π΅Π»Π½ΠΈ Ρ‚Π°Π±Π΅Π»ΠΈ сС Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚, Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ќС Π±ΠΈΠ΄Π΅ ΡƒΡ€Π΅Π΄Π½ΠΎ ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Π½Π° PostgreSQL Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π±Π΅Π· Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈ Π΄ΠΎ ΠΈΠ·Π²ΠΎΡ€Π½Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΠ»ΠΈ ΡˆΠ΅ΠΌΠ°Ρ‚Π° Π·Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° (sch_chameleon).

$> chameleon stop_replica --config default --source mysql 
$> chameleon detach_replica --config default --source mysql --debug

Π”ΠΎΠΊΠΎΠ»ΠΊΡƒ сакатС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ користитС слСднитС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° Π΄Π° ја ΠΈΠ·Π±Ρ€ΠΈΡˆΠ΅Ρ‚Π΅ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π°Ρ‚Π° шСма Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°.

$> chameleon drop_source --config default --source mysql --debug
$> chameleon drop_replica_schema --config default --source mysql --debug

ΠŸΡ€Π΅Π΄Π½ΠΎΡΡ‚ΠΈ Π½Π° pg_chameleon

ЛСсно ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΡšΠ΅.
ЛСсно Ρ€Π΅ΡˆΠ°Π²Π°Ρ˜Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°Ρ˜Ρ‚Π΅ Π³ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈΡ‚Π΅ со јасни ΠΏΠΎΡ€Π°ΠΊΠΈ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ°.
Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½ΠΈ Ρ‚Π°Π±Π΅Π»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄ΠΎΠ΄Π°Π΄Π°Ρ‚ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΏΠΎ ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½Π° Π½Π° остатокот ΠΎΠ΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°.
МоТно Π΅ Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π°Ρ‚ повСќС ΠΈΠ·Π²ΠΎΡ€Π½ΠΈ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° Π΅Π΄Π½Π° Ρ†Π΅Π»Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, ΠΈ ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³Ρƒ корисно Π°ΠΊΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ Π΅Π΄Π½Π° ΠΈΠ»ΠΈ повСќС MySQL Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ Π΅Π΄Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL.
НС ΠΌΠΎΡ€Π° Π΄Π° Π³ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Ρ‚Π΅ ΠΈΠ·Π±Ρ€Π°Π½ΠΈΡ‚Π΅ Ρ‚Π°Π±Π΅Π»ΠΈ.

НСдостатоци Π½Π° pg_chameleon

ΠŸΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½ΠΎ само со MySQL 5.5 ΠΈ ΠΏΠΎΠ³ΠΎΡ€Π΅ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π²ΠΎΡ€ ΠΈ PostgreSQL 9.5 ΠΈ ΠΏΠΎΠ³ΠΎΡ€Π΅ ΠΊΠ°ΠΊΠΎ Ρ†Π΅Π»Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ.
БСкоја Ρ‚Π°Π±Π΅Π»Π° ΠΌΠΎΡ€Π° Π΄Π° ΠΈΠΌΠ° ΠΏΡ€ΠΈΠΌΠ°Ρ€Π΅Π½ ΠΈΠ»ΠΈ СдинствСн ΠΊΠ»ΡƒΡ‡, ΠΈΠ½Π°ΠΊΡƒ Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ сС ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·ΠΈΡ€Π°Π°Ρ‚ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° процСсот init_replica, Π½ΠΎ Π½Π΅ сС Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚.
Еднонасочна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° - само ΠΎΠ΄ MySQL Π΄ΠΎ PostgreSQL. Π—Π°Ρ‚ΠΎΠ°, Ρ‚ΠΎΡ˜ Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π΅Π½ само Π·Π° β€žΠ°ΠΊΡ‚ΠΈΠ²Π½ΠΎ-ΠΏΠ°ΡΠΈΠ²Π½ΠΎβ€œ ΠΊΠΎΠ»ΠΎ.
Π˜Π·Π²ΠΎΡ€ΠΎΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ само MySQL Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ°Ρ‚Π° Π·Π° PostgreSQL Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π²ΠΎΡ€ Π΅ само СкспСримСнтална ΠΈ со ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π°ΡšΠ° (Π΄ΠΎΠ·Π½Π°Ρ˜Ρ‚Π΅ повСќС Ρ‚ΡƒΠΊΠ°)

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π·Π° pg_chameleon

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π²ΠΎ pg_chameleon Π΅ ΠΎΠ΄Π»ΠΈΡ‡Π΅Π½ Π·Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ MySQL Π²ΠΎ PostgreSQL. Π—Π½Π°Ρ‡Π°Ρ˜Π½ΠΈΠΎΡ‚ нСдостаток Π΅ Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ само Сднонасочна, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ профСсионалцитС Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ Π½Π΅ΠΌΠ° Π΄Π° сакаат Π΄Π° ја користат Π·Π° Π½Π΅ΡˆΡ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ освСн Π·Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡ˜Π°. Но, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ со Сднонасочната Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π΅ΡˆΠΈ со Π΄Ρ€ΡƒΠ³Π° Π°Π»Π°Ρ‚ΠΊΠ° со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ - SymmetricDS.

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ˜Ρ‚Π΅ повСќС Π²ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½Π°Ρ‚Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Ρ‚ΡƒΠΊΠ°. МоТС Π΄Π° сС најдС помош Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија Ρ‚ΡƒΠΊΠ°.

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° SymmetricDS

SymmetricDS Π΅ Π°Π»Π°Ρ‚ΠΊΠ° со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ која Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π° која Π±ΠΈΠ»ΠΎ Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° која Π±ΠΈΠ»ΠΎ Π΄Ρ€ΡƒΠ³Π° Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠ° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ ΠΎΠ±Π»Π°ΠΊ, Π½Π° ΠΏΡ€ Azure, ΠΈΡ‚Π½. Достапни карактСристики: ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, ΠΌΡƒΠ»Ρ‚ΠΈ-мастСр Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π° ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°, Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ. Ова Π΅ Java Π°Π»Π°Ρ‚ΠΊΠ° ΠΈ Π±Π°Ρ€Π° стандардно ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° JRE ΠΈΠ»ΠΈ JDK (Π²Π΅Ρ€Π·ΠΈΡ˜Π° 8.0 ΠΈΠ»ΠΈ повисока). ОвдС, ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π΄ΠΎ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΡƒΠ²Π°Ρ‡ΠΈΡ‚Π΅ Π²ΠΎ ΠΈΠ·Π²ΠΎΡ€Π½Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС снимат ΠΈ Π΄Π° сС испратат Π΄ΠΎ соодвСтната Ρ†Π΅Π»Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π° сСрии.

ΠšΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΡΡ‚ΠΈΠΊΠΈ Π½Π° SymmetricDS

Алатката Π΅ нСзависна ΠΎΠ΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΡˆΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° Π΄Π²Π΅ ΠΈΠ»ΠΈ повСќС Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Ρ€Π°Π·ΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ.
Π Π΅Π»Π°Ρ†ΠΈΠΎΠ½ΠΈΡ‚Π΅ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС синхронизираат ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ записи Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π΄ΠΎΠ΄Π΅ΠΊΠ° Π±Π°Π·ΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΠΎΡ‚ систСм користат ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ.
Двонасочна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Push ΠΈ Pull Π²Ρ€Π· основа Π½Π° мноТСство ΠΏΡ€Π°Π²ΠΈΠ»Π°.
ΠŸΡ€Π΅Π½ΠΎΡΠΎΡ‚ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π΅ ΠΌΠΎΠΆΠ΅Π½ ΠΏΡ€Π΅ΠΊΡƒ Π±Π΅Π·Π±Π΅Π΄Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΈ ΠΈ ΠΌΡ€Π΅ΠΆΠΈ со Π½ΠΈΠ·ΠΎΠΊ опсСг.
Автоматско Π²Ρ€Π°ΡœΠ°ΡšΠ΅ ΠΊΠΎΠ³Π° Ρ˜Π°Π·Π»ΠΈΡ‚Π΅ ќС ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ со Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ Π΄Π΅Ρ„Π΅ΠΊΡ‚ ΠΈ автоматско Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΡ‚.
ΠšΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π½ΠΈ со ΠΎΠ±Π»Π°ΠΊ ΠΈ моќни API Π·Π° СкстСнзии.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

SymmetricDS ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° Π½Π° Π΅Π΄Π΅Π½ ΠΎΠ΄ Π΄Π²Π°Ρ‚Π° Π½Π°Ρ‡ΠΈΠ½ΠΈ:
Π“Π»Π°Π²Π΅Π½ (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π») јазол кој Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π½ΠΎ ја ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π΄Π²Π° Ρ€ΠΎΠ±ΠΎΠ²ΠΈ (дСтски) јазли, Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ дСтскитС јазли сС Ρ˜Π°Π²ΡƒΠ²Π° само ΠΏΡ€Π΅ΠΊΡƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΎΡ‚.
АктивСн јазол (Јазол 1) ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π° Π·Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° со Π΄Ρ€ΡƒΠ³ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ јазол (Јазол 2) Π±Π΅Π· посрСдник.

Π’ΠΎ Π΄Π²Π΅Ρ‚Π΅ ΠΎΠΏΡ†ΠΈΠΈ, Ρ€Π°Π·ΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС случува со помош Π½Π° Push ΠΈ Pull. Π’ΠΎ овој ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ќС Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ-Π°ΠΊΡ‚ΠΈΠ²Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°. Π‘ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ ΠΏΡ€Π΅ΠΌΠ½ΠΎΠ³Ρƒ Π΄ΠΎΠ»Π³ΠΎ Π·Π° Π΄Π° сС опишС Ρ†Π΅Π»Π°Ρ‚Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΠΏΠ° Π½Π°ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ Π³ΠΎ Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΈΡΡ‚Ρ€Π°ΠΆΡƒΠ²Π°ΡšΠ΅. лидСрствоза Π΄Π° Π΄ΠΎΠ·Π½Π°Π΅Ρ‚Π΅ повСќС Π·Π° ΡƒΡ€Π΅Π΄ΠΎΡ‚ SymmetricDS.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° SymmetricDS Π΅ ΠΌΠ½ΠΎΠ³Ρƒ Сдноставно: ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅ ја Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° zip ΠΎΡ‚Ρ‚ΡƒΠΊΠ° ΠΈ ΠΈΠ·Π²Π°Π΄ΠΈ Π³ΠΎ ΠΊΠ°Π΄Π΅ сакаш. Π’Π°Π±Π΅Π»Π°Ρ‚Π° ΠΏΠΎΠ΄ΠΎΠ»Ρƒ Π΄Π°Π²Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° ΠΈ Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° Π½Π° SymmetricDS Π²ΠΎ овој ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊΠΎ ΠΈ Π·Π° Π²Π΅Ρ€Π·ΠΈΠΈΡ‚Π΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π²Π΅Ρ€Π·ΠΈΠΈΡ‚Π΅ Π½Π° Linux, IP адрСситС ΠΈ ΠΏΠΎΡ€Ρ‚ΠΈΡ‚Π΅ Π·Π° Π΄Π²Π°Ρ‚Π° јазли.

Π”ΠΎΠΌΠ°ΡœΠΈΠ½
vm1
vm2

Π’Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ОБ
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Π’Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° DB сСрвСр
MySQL 5.7.26
PostgreSQL 10.5

DB ΠΏΠΎΡ€Ρ‚Π°
3306
5832

IP адрСса
192.168.1.107
192.168.1.112

Π’Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

ΠŸΠ°Ρ‚Π΅ΠΊΠ° Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° Π½Π° SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS имС на јазол
ΠΊΠΎΡ€-000
ΠΏΡ€ΠΎΠ΄Π°Π²Π½ΠΈΡ†Π°-001

ОвдС инсталирамС SymmetricDS Π²ΠΎ /usr/local/symmetric-server-3.9.20 ΠΈ Ρ‚Π°ΠΌΡƒ ќС сС складираат Ρ€Π°Π·Π½ΠΈ ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ. ЗаинтСрСсирани смС Π·Π° ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ ΠΈ ΠΌΠΎΡ‚ΠΎΡ€ΠΈ. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ со ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ содрТи ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° конфигурациски Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π° Π½Π° јазли, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° SQL скрипти Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π±Ρ€Π·ΠΎ.

Π’ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ‚Ρ€ΠΈ конфигурациски Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π° Π½Π° јазол - ΠΈΠΌΠ΅Ρ‚ΠΎ ја ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π°Ρ‚Π° Π½Π° Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚ Π²ΠΎ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° шСма.

corp-000.properties
store-001.properties
store-002.properties

SymmetricDS Π³ΠΈ ΠΈΠΌΠ° ситС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ конфигурациски Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π·Π° основСн дизајн со 3 јазли (ΠΎΠΏΡ†ΠΈΡ˜Π° 1), Π° иститС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користат Π·Π° дизајн со 2 јазли (ΠΎΠΏΡ†ΠΈΡ˜Π° 2). ΠšΠΎΠΏΠΈΡ€Π°Ρ˜Ρ‚Π΅ ја ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π°Ρ‚Π° конфигурациска Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ Π²ΠΎ ΠΌΠΎΡ‚ΠΎΡ€ΠΈ Π½Π° хостот vm1. Π˜Π·Π»Π΅Π³ΡƒΠ²Π° Π²Π°ΠΊΠ°:

$> cat engines/corp-000.properties
engine.name=corp-000
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://192.168.1.107:3306/replica_db?autoReconnect=true&useSSL=false
db.user=root
db.password=admin123
registration.url=
sync.url=http://192.168.1.107:31415/sync/corp-000
group.id=corp
external.id=000

Овој јазол Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° SymmetricDS сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π° corp-000, Π° врската со Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ја ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π° Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΎΡ‚ mysql jdbc, кој ја користи Π½ΠΈΠ·Π°Ρ‚Π° Π·Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠ³ΠΎΡ€Π΅ ΠΈ ΠΈΠ½Π³Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° Π½Π°Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅. Π‘Π΅ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΠΌΠ΅ со Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ replica_db ΠΈ Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ ќС сС ΠΊΡ€Π΅ΠΈΡ€Π°Π°Ρ‚ ΠΏΡ€ΠΈ ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΡˆΠ΅ΠΌΠ°Ρ‚Π°. sync.url ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° ΠΊΠ°Π΄Π΅ Π΄Π° сС ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π° Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚ Π·Π° ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°.

ΠˆΠ°Π·ΠΎΠ»ΠΎΡ‚ 2 Π½Π° хостот vm2 Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ ΠΊΠ°ΠΊΠΎ store-001, Π° остатокот Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° node.properties ΠΏΠΎΠ΄ΠΎΠ»Ρƒ. Node store-001 ја ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL, Π° pgdb_replica Π΅ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°. register.url ΠΌΡƒ Π΄ΠΎΠ·Π²ΠΎΠ»ΡƒΠ²Π° Π½Π° хостот vm2 Π΄Π° ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π° со Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚ vm1 ΠΈ Π΄Π° Π΄ΠΎΠ±ΠΈΠ²Π° Π΄Π΅Ρ‚Π°Π»ΠΈ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΎΠ΄ Π½Π΅Π³ΠΎ.

$> cat engines/store-001.properties
engine.name=store-001
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://192.168.1.112:5832/pgdb_replica
db.user=postgres
db.password=admin123
registration.url=http://192.168.1.107:31415/sync/corp-000
group.id=store
external.id=001

Π—Π°Π²Ρ€ΡˆΠ΅Π½ΠΈΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° SymmetricDS содрТи ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ двонасочна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π΄Π²Π° сСрвСри Π½Π° Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ (Π΄Π²Π° јазли). Π§Π΅ΠΊΠΎΡ€ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ сС ΠΈΠ·Π²Π΅Π΄ΡƒΠ²Π°Π°Ρ‚ Π½Π° хост vm1 (corp-000), ΡˆΡ‚ΠΎ ќС создадС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ шСма со 4 Ρ‚Π°Π±Π΅Π»ΠΈ. ΠŸΠΎΡ‚ΠΎΠ°, со ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° create-sym-tables со ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° symadmin сС создаваат Ρ‚Π°Π±Π΅Π»ΠΈ со Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ќС сС складираат ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΈ насоката Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Ρ˜Π°Π·Π»ΠΈΡ‚Π΅. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΊΠΎΡ‚ сС Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅.

vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> ./dbimport --engine corp-000 --format XML create_sample.xml
vm1$> ./symadmin --engine corp-000 create-sym-tables
vm1$> ./dbimport --engine corp-000 insert_sample.sql

Π’ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚, Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ Π·Π° ставка ΠΈ item_selling_price автоматски сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π°Ρ‚ Π΄Π° сС Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ ΠΎΠ΄ corp-000 Π²ΠΎ store-001, Π° Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ Π·Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π° (sale_transaction ΠΈ sale_return_line_item) автоматски сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π°Ρ‚ Π΄Π° сС Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ ΠΎΠ΄ store-001 Π΄ΠΎ corp-000. Π‘Π΅Π³Π° создавамС шСма Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL Π½Π° хост vm2 (store-001) Π·Π° Π΄Π° ја ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΠΌΠ΅ Π΄Π° ΠΏΡ€ΠΈΠΌΠ° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ corp-000.

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

ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° MySQL Π½Π° vm1 ΠΈΠΌΠ° Ρ‚Π°Π±Π΅Π»ΠΈ Π·Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ Ρ‚Π°Π±Π΅Π»ΠΈ со ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ SymmetricDS. Π—Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° систСмскитС Ρ‚Π°Π±Π΅Π»ΠΈ Π½Π° SymmetricDS (со прСфикс sym_) ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ сС достапни само Π½Π° јазол corp-000 бидСјќи Ρ‚Π°ΠΌΡƒ ја ΠΈΠ·Π²Ρ€ΡˆΠΈΠ²ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° create-sym-tables ΠΈ ќС ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΠΌΠ΅ со Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°. И Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° node store-001 ќС ΠΈΠΌΠ° само 4 ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΈ Ρ‚Π°Π±Π΅Π»ΠΈ Π±Π΅Π· ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ.

Π‘ΠΈΡ‚Π΅. ΠžΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½Π° Π΄Π° Π³ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° процСситС Π½Π° sym-сСрвСрот Π½Π° Π΄Π²Π°Ρ‚Π° јазли ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ.

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

ЗаписитС Π²ΠΎ Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ‚ сС ΠΈΡΠΏΡ€Π°ΡœΠ°Π°Ρ‚ Π΄ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π·Π° Π΅Π²ΠΈΠ΄Π΅Π½Ρ†ΠΈΡ˜Π° Π²ΠΎ Π·Π°Π΄Π½ΠΈΠ½Π° (symmetric.log) Π²ΠΎ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° Π»ΠΎΠ³ΠΎΠ²ΠΈ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ Π΅ инсталиран SymmetricDS, ΠΊΠ°ΠΊΠΎ ΠΈ Π΄ΠΎ стандардниот ΠΈΠ·Π»Π΅Π·. Sym-сСрвСрот сСга ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ½ΠΈΡ†ΠΈΡ€Π° Π½Π° node store-001.

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

Ако Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ процСсот Π½Π° сСрвСрот sym Π½Π° хостот vm2, Ρ‚ΠΎΡ˜ исто Ρ‚Π°ΠΊΠ° ќС создадС Ρ‚Π°Π±Π΅Π»ΠΈ со ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ SymmetricDS Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL. Ако Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ процСсот Π½Π° sym-сСрвСр Π½Π° Π΄Π²Π°Ρ‚Π° јазли, Ρ‚ΠΈΠ΅ сС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€Π°Π°Ρ‚ Π΅Π΄Π΅Π½ со Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Π° Π³ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΎΠ΄ corp-000 Π²ΠΎ store-001. Ако ΠΏΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ сСкунди Π³ΠΈ ΠΏΠΎΠ±Π°Ρ€Π°ΠΌΠ΅ ситС 4 Ρ‚Π°Π±Π΅Π»ΠΈ ΠΎΠ΄ Π΄Π²Π΅Ρ‚Π΅ страни, ќС Π²ΠΈΠ΄ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½Π°. Или ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ испратитС bootstrap Π΄ΠΎ node store-001 ΠΎΠ΄ corp-000 со слСднава ΠΊΠΎΠΌΠ°Π½Π΄Π°.

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

Π’ΠΎ овој ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½ΠΎΠ² запис Π΅ Π²ΠΌΠ΅Ρ‚Π½Π°Ρ‚ Π²ΠΎ Ρ‚Π°Π±Π΅Π»Π°Ρ‚Π° со ставки Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ MySQL Π½Π° јазол corp-000 (домаќин: vm1), ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ PostgreSQL Π½Π° јазол ΠΏΡ€ΠΎΠ΄Π°Π²Π½ΠΈΡ†Π°-001 (домаќин: vm2). Π“Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π° Pull Π·Π° ΠΏΡ€Π΅ΠΌΠ΅ΡΡ‚ΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ corp-000 Π²ΠΎ store-001.

mysql> insert into item values ('22000002','Jelly Bean');
Query OK, 1 row affected (0.00 sec)

vm2$> psql -p 5832 -U postgres pgdb_replica -c "select * from item"
 item_id  |   name
----------+-----------
 11000001 | Yummy Gum
 22000002 | Jelly Bean
(2 rows)

Π—Π° Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅ Push ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π° Π·Π° ΠΏΡ€Π΅ΠΌΠ΅ΡΡ‚ΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ store-001 Π²ΠΎ corp-000, Π²ΠΌΠ΅Ρ‚Π½ΡƒΠ²Π°ΠΌΠ΅ запис Π²ΠΎ Ρ‚Π°Π±Π΅Π»Π°Ρ‚Π° sale_transaction ΠΈ ΠΏΠΎΡ‚Π²Ρ€Π΄ΡƒΠ²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½Π°.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚.

Π“Π»Π΅Π΄Π°ΠΌΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° двонасочна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΈΡ‚Π΅ Ρ‚Π°Π±Π΅Π»ΠΈ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ MySQL ΠΈ PostgreSQL Π±Π°Π·ΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. Π—Π° Π΄Π° поставитС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° Π½ΠΎΠ²ΠΈ кориснички Ρ‚Π°Π±Π΅Π»ΠΈ, слСдСтС Π³ΠΈ ΠΎΠ²ΠΈΠ΅ Ρ‡Π΅ΠΊΠΎΡ€ΠΈ: На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, создавамС Ρ‚Π°Π±Π΅Π»Π° t1 ΠΈ Π³ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° слСдниов Π½Π°Ρ‡ΠΈΠ½. На овој Π½Π°Ρ‡ΠΈΠ½ ја ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ само Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΎΠ΄ corp-000 Π²ΠΎ store-001.

mysql> create table  t1 (no integer);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into sym_channel (channel_id,create_time,last_update_time) 
values ('t1',current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)

mysql> insert into sym_trigger (trigger_id, source_table_name,channel_id,
last_update_time, create_time) values ('t1', 't1', 't1', current_timestamp,
current_timestamp);
Query OK, 1 row affected (0.01 sec)

mysql> insert into sym_trigger_router (trigger_id, router_id,
Initial_load_order, create_time,last_update_time) values ('t1',
'corp-2-store-1', 1, current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)

ΠŸΠΎΡ‚ΠΎΠ°, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ извСстСна Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΡˆΠ΅ΠΌΠ°Ρ‚Π°, односно додавањС Π½ΠΎΠ²Π° Ρ‚Π°Π±Π΅Π»Π°, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° symadmin со Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΡ‚ sync-triggers, кој Π³ΠΈ Ρ€Π΅ΠΊΡ€Π΅ΠΈΡ€Π° ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΡƒΠ²Π°Ρ‡ΠΈΡ‚Π΅ Π·Π° Π΄Π° Π³ΠΈ ΠΌΠ°ΠΏΠΈΡ€Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ‚Π΅ Π½Π° Ρ‚Π°Π±Π΅Π»Π°Ρ‚Π°. send-schema сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Π·Π° Π΄Π° сС испратат ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π° ΡˆΠ΅ΠΌΠ°Ρ‚Π° Π²ΠΎ јазол ΠΏΡ€ΠΎΠ΄Π°Π²Π½ΠΈΡ†Π°-001, Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° Ρ‚Π°Π±Π΅Π»Π°Ρ‚Π° t1 Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π°.

vm1$> ./symadmin -e corp-000 --node=001 sync-triggers    
vm1$> ./symadmin send-schema -e corp-000 --node=001 t1

ΠŸΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²ΠΊΠΈ ΠΎΠ΄ SymmetricDS

ЛСсна ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ Π³ΠΎΡ‚ΠΎΠ² сСт Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° создавањС ΠΊΠΎΠ»ΠΎ со Ρ‚Ρ€ΠΈ јазли ΠΈΠ»ΠΈ Π΄Π²Π° јазли.
ΠšΡ€ΠΎΡ-платформски Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ нСзависност Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ сСрвСри, Π»Π°ΠΏΡ‚ΠΎΠΏΠΈ ΠΈ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΡƒΡ€Π΅Π΄ΠΈ.
Π Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Ρ˜Ρ‚Π΅ која Π±ΠΈΠ»ΠΎ Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° која Π±ΠΈΠ»ΠΎ Π΄Ρ€ΡƒΠ³Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π½Π° WAN ΠΈΠ»ΠΈ Π²ΠΎ ΠΎΠ±Π»Π°ΠΊΠΎΡ‚.
ΠœΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° со Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ илјади Π·Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°ΡšΠ΅.
ΠŸΠ»Π°Ρ‚Π΅Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° со GUI ΠΈ ΠΎΠ΄Π»ΠΈΡ‡Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ°.

НСдостатоци Π½Π° SymmetricDS

Π’Ρ€Π΅Π±Π° Ρ€Π°Ρ‡Π½ΠΎ Π΄Π° Π³ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΈ насоката Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија ΠΏΡ€Π΅ΠΊΡƒ SQL изјави Π·Π° Π΄Π° Π³ΠΈ Π²Ρ‡ΠΈΡ‚Π°Ρ‚Π΅ Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ со ΠΊΠ°Ρ‚Π°Π»ΠΎΠ·ΠΈ, ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ Π½Π΅Π·Π³ΠΎΠ΄Π½ΠΎ.
ΠŸΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³Ρƒ Ρ‚Π°Π±Π΅Π»ΠΈ Π·Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ досадно, освСн Π°ΠΊΠΎ Π½Π΅ користитС скрипти Π·Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ SQL изјави ΠΊΠΎΠΈ Π³ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π°Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΈ насоката Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°.
Π’ΠΎ Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈΡ‚Π΅ сС Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ ΠΏΡ€Π΅ΠΌΠ½ΠΎΠ³Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π° понСкогаш Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја срСдитС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π·Π° Π΅Π²ΠΈΠ΄Π΅Π½Ρ†ΠΈΡ˜Π° Π·Π° Π΄Π° Π½Π΅ Π·Π°Π·Π΅ΠΌΠ° ΠΏΡ€Π΅ΠΌΠ½ΠΎΠ³Ρƒ простор.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π·Π° SymmetricDS

SymmetricDS Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° поставитС двонасочна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π΄Π²Π°, Ρ‚Ρ€ΠΈ, ΠΏΠ° Π΄ΡƒΡ€ΠΈ ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ илјади јазли Π·Π° Π΄Π° Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Ρ‚Π΅ ΠΈ синхронизиратС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ. Ова Π΅ ΡƒΠ½ΠΈΠΊΠ°Ρ‚Π½Π° Π°Π»Π°Ρ‚ΠΊΠ° која ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡ˜Π½ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° ΠΌΠ½ΠΎΠ³Ρƒ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС автоматско Π²Ρ€Π°ΡœΠ°ΡšΠ΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΏΠΎ Π΄ΠΎΠ»Π³ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π½Π° ΠΏΡ€Π΅ΠΊΠΈΠ½ Π½Π° Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚, сигурна ΠΈ Сфикасна Ρ€Π°Π·ΠΌΠ΅Π½Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Ρ˜Π°Π·Π»ΠΈΡ‚Π΅ ΠΏΡ€Π΅ΠΊΡƒ HTTPS, автоматско ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ Π²Ρ€Π· основа Π½Π° Π·Π±ΠΈΡ€ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΈΡ‚Π½. SymmetricDS Π²Ρ€ΡˆΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΊΠΎΠΈ Π±ΠΈΠ»ΠΎ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π·Π°Ρ‚ΠΎΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи Π·Π° ΡˆΠΈΡ€ΠΎΠΊ спСктар Π½Π° ΡΡ†Π΅Π½Π°Ρ€ΠΈΡ˜Π°, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡ˜Π°, ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡ˜Π°, Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π°, Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°ΡšΠ΅ ΠΈ Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½ΠΈΠ· ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ сС Π±Π°Π·ΠΈΡ€Π° Π½Π° слуТбСното Π»ΠΈΡ†Π΅ Π±Ρ€Π· Π²ΠΎΠ΄ΠΈΡ‡ ΠΎΠ΄ SymmetricDS. Π’Πž Упатство Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π”Π΅Ρ‚Π°Π»Π½ΠΎ Π³ΠΈ ΠΎΠΏΠΈΡˆΡƒΠ²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΈ Π²ΠΊΠ»ΡƒΡ‡Π΅Π½ΠΈ Π²ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° со SymmetricDS.

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€