ืงืจื™ื™ึทื– ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ PostgreSQL ืื•ืŸ MySQL

ืงืจื™ื™ึทื– ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ PostgreSQL ืื•ืŸ MySQL

ืื™ืš ื•ื•ืขื˜ ืึทื•ื˜ืœื™ื™ืŸ ืงืจื™ื™ึทื–-ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ PostgreSQL ืื•ืŸ MySQL, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืžืขื˜ื”ืึธื“ืก ืคึฟืึทืจ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืึทืจื•ื™ืฃ ืงืจื™ื™ึทื–-ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ ื“ื™ ืฆื•ื•ื™ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืกืขืจื•ื•ืขืจืก. ื˜ื™ืคึผื™ืงืึทืœืœื™, ืงืจื™ื™ึทื–-ืจืขืคึผืœื™ืงื™ื™ื˜ื™ื“ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ื–ืขื ืขืŸ ื’ืขืจื•ืคึฟืŸ ื›ืึธื•ืžืึทื“ื–ืฉื™ื ื™ืึทืก, ืื•ืŸ ืขืก ืื™ื– ืึท ื‘ืึทืงื•ื•ืขื ื•ื•ืขื’ ืฆื• ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืคื•ืŸ ืื™ื™ืŸ RDBMS ืกืขืจื•ื•ืขืจ ืฆื• ืื ื“ืขืจืŸ.

PostgreSQL ืื•ืŸ MySQL ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ื–ืขื ืขืŸ ื‘ื›ืœืœ ื’ืขืจืขื›ื ื˜ ื•ื•ื™ ืจื™ืœื™ื™ืฉืึทื ืึทืœ, ืึธื‘ืขืจ ืžื™ื˜ ื ืึธืš ื™ืงืกื˜ืขื ืฉืึทื ื– ื–ื™ื™ ืคืึธืจืฉืœืึธื’ืŸ NoSQL ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื–. ื“ืึธ ืžื™ืจ ื•ื•ืขืœืŸ ื“ื™ืกืงื•ื˜ื™ืจืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ PostgreSQL ืื•ืŸ MySQL ืคึฟื•ืŸ ืึท ืจื™ืœื™ื™ืฉืึทื ืึทืœ DBMS ืคึผืขืจืกืคึผืขืงื˜ื™ื•ื•.

ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื“ื™ ื’ืื ืฆืข ื™ื ืขืจ ื•ื•ืขืจืงื™ื ื’ื–, ื ืึธืจ ื“ื™ ื™ืงืขืจื“ื™ืง ืคึผืจื™ื ืกืึทืคึผืึทืœื– ืึทื–ื•ื™ ืึทื– ืื™ืจ ื‘ืึทืงื•ืžืขืŸ ืึท ื’ืขื“ืึทื ืง ืคื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื ื’ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ ื“ื™ื™ื˜ืึทื‘ื™ื™ืก ืกืขืจื•ื•ืขืจืก, ืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื–, ืœื™ืžื™ื˜ื™ื™ืฉืึทื ื– ืื•ืŸ ื ื•ืฆืŸ ืงืึทืกืขืก.

ื˜ื™ืคึผื™ืงืึทืœืœื™, ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ ืฆื•ื•ื™ื™ ื™ื™ื“ืขื ื™ืงืึทืœ ื“ืึทื˜ืึทื‘ื™ื™ืก ืกืขืจื•ื•ืขืจืก ืื™ื– ื’ืขื˜ืืŸ ืึธื“ืขืจ ืื™ืŸ ื‘ื™ื™ื ืขืจื™ ืžืึธื“ืข ืึธื“ืขืจ ื ื™ืฆืŸ ืคึฟืจืื’ืŸ ืฆื•ื•ื™ืฉืŸ ืึท ื‘ืขืœ (ืึทืงืึท ืึทืจื•ื™ืกื’ืขื‘ืขืจ, ื‘ืขืœ ืึธื“ืขืจ ืึทืงื˜ื™ื•ื•) ืื•ืŸ ืึท ืฉืงืœืึทืฃ (ืึทื‘ืึธื ืขื ื˜, ืกื˜ืึทื ื“ื‘ื™ื™ ืึธื“ืขืจ ืคึผืึทืกื™ื•ื•). ื“ืขืจ ืฆื™ืœ ืคื•ืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืฆื• ืฆื•ืฉื˜ืขืœืŸ ืึท ืคืึทืงื˜ื™ืฉ-ืฆื™ื™ื˜ ืงืึธืคึผื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ื‘ืขืœ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื•ื™ืฃ ื“ื™ ืฉืงืœืึทืฃ ื–ื™ื™ึทื˜. ืื™ืŸ ื“ืขื ืคืึทืœ, ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ื˜ืจืึทื ืกืคืขืจื“ ืคื•ืŸ ื‘ืขืœ ืฆื• ืฉืงืœืึทืฃ, ื“ืึธืก ืื™ื–, ืคื•ืŸ ืึทืงื˜ื™ื•ื• ืฆื• ืคึผืึทืกื™ื•ื•, ื•ื•ื™ื™ึทืœ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ื‘ืœื•ื™ื– ืื™ืŸ ืื™ื™ืŸ ืจื™ื›ื˜ื•ื ื’. ืึธื‘ืขืจ ืื™ืจ ืงืขื ืขืŸ ืฉื˜ืขืœืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ ืฆื•ื•ื™ื™ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ืื™ืŸ ื‘ื™ื™ื“ืข ืื™ื ืกื˜ืจื•ืงืฆื™ืขืก, ืึทื–ื•ื™ ืึทื– ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ื˜ืจืึทื ืกืคืขืจื“ ืคื•ืŸ ืฉืงืœืึทืฃ ืฆื• ื‘ืขืœ ืื™ืŸ ืึทืŸ ืึทืงื˜ื™ื•ื•-ืึทืงื˜ื™ื•ื• ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ. ืึทืœืข ื“ืขื, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืงืึทืกืงื™ื™ื“ื™ื ื’ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืื™ื– ืžืขื’ืœืขืš ืฆื•ื•ื™ืฉืŸ ืฆื•ื•ื™ื™ ืึธื“ืขืจ ืžืขืจ ื™ื™ื“ืขื ื™ืงืึทืœ ื“ืึทื˜ืึทื‘ื™ื™ืก ืกืขืจื•ื•ืขืจืก, ืึทืงื˜ื™ื•ื•-ืึทืงื˜ื™ื•ื• ืึธื“ืขืจ ืึทืงื˜ื™ื•ื•-ืคึผืึทืกื™ื•ื• ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ื ื•ื™ื˜, ื“ื™ ืึทื•ื•ื™ื™ืœืึทื‘ื™ืœืึทื˜ื™ ืคื•ืŸ ืึทื–ืึท ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืึธื“ืขืจ ื ื•ืฆืŸ ืคื•ืŸ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืกืึทืœื•ืฉืึทื ื– ืื•ืŸ ื™ื’ื–ื™ืกื˜ื™ื ื’ ื”ืึทื ื“ืœ-ืึธืคืก.

ื“ื™ ื“ื™ืกืงืจื™ื™ื‘ื“ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ื– ืžืขื’ืœืขืš ืฆื•ื•ื™ืฉืŸ ืคืึทืจืฉื™ื“ืขื ืข ื“ืึทื˜ืึทื‘ื™ื™ืก ืกืขืจื•ื•ืขืจืก. ื“ืขืจ ืกืขืจื•ื•ืขืจ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื“ ืฆื• ืึธื ื ืขืžืขืŸ ืจืขืคึผืœื™ืงื™ื™ื˜ื™ื“ ื“ืึทื˜ืŸ ืคื•ืŸ ืืŸ ืื ื“ืขืจ ื“ืึทื˜ืึทื‘ื™ื™ืก ืกืขืจื•ื•ืขืจ ืื•ืŸ ื ืึธืš ื”ืึทืœื˜ืŸ ืคืึทืงื˜ื™ืฉ-ืฆื™ื™ื˜ ืกื ืึทืคึผืฉืึทืฅ ืคื•ืŸ ื“ื™ ืจืขืคึผืœื™ืงื™ื™ื˜ื™ื“ ื“ืึทื˜ืŸ. MySQL ืื•ืŸ PostgreSQL ืคืึธืจืฉืœืึธื’ืŸ ืจื•ื‘ึฟ ืคื•ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทื ื– ืื™ืŸ-ื”ื•ื™ื– ืึธื“ืขืจ ื“ื•ืจืš ื“ืจื™ื˜-ืคึผืึทืจื˜ื™ื™ ื™ืงืกื˜ืขื ืฉืึทื ื–, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ื‘ื™ื™ื ืขืจื™ ืงืœืึธืฅ ืžืขื˜ื”ืึธื“ืก, ื“ื™ืกืง ืœืึทืงื™ื ื’ ืื•ืŸ ืกื˜ืึทื˜ืขืžืขื ื˜- ืื•ืŸ ืจื•ื“ืขืจืŸ-ื‘ืื–ื™ืจื˜ ืžืขื˜ื”ืึธื“ืก.

ืงืจื™ื™ึทื– ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ MySQL ืื•ืŸ PostgreSQL ืื™ื– ื“ืืจืฃ ืคึฟืึทืจ ืึท ืื™ื™ืŸ-ืฆื™ื™ึทื˜ ืžื™ื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ ืื™ื™ืŸ ื“ืึทื˜ืึทื‘ื™ื™ืก ืกืขืจื•ื•ืขืจ ืฆื• ืื ื“ืขืจืŸ. ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ื ื•ืฆืŸ ืคืึทืจืฉื™ื“ืขื ืข ืคึผืจืึธื˜ืึธืงืึธืœืก, ืึทื–ื•ื™ ืขืก ืื™ื– ื ื™ื˜ ืžืขื’ืœืขืš ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ื–ื™ื™ ื’ืœื™ื™ึทืš. ืฆื• ืคืึทืจืœื™ื™ื’ืŸ ื“ืึทื˜ืŸ ื•ื•ืขืงืกืœ, ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ืึท ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืขืคึฟืขื ืขืŸ ืžืงื•ืจ ื’ืขืฆื™ื™ึทื’, ืœืžืฉืœ pg_chameleon.

ื•ื•ืึธืก ืื™ื– pg_chameleon

pg_chameleon ืื™ื– ืึท ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืกื™ืกื˜ืขื ืคึฟื•ืŸ MySQL ืฆื• PostgreSQL ืื™ืŸ ืคึผื™ื˜ื”ืึธืŸ 3. ืขืก ื ื™ืฆื˜ ื“ื™ ืึธืคึฟืŸ ืžืงื•ืจ ืžื™ืกืงืœ-ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ื‘ื™ื‘ืœื™ืึธื˜ืขืง, ืื•ื™ืš ืื™ืŸ ืคึผื™ื˜ื”ืึธืŸ. ืจื•ื“ืขืจืŸ ื‘ื™ืœื“ืขืจ ื–ืขื ืขืŸ ื™ืงืกื˜ืจืึทืงื˜ื™ื“ ืคื•ืŸ MySQL ื˜ื™ืฉืŸ ืื•ืŸ ืกื˜ืึธืจื“ ื•ื•ื™ JSONB ืึทื‘ื“ื–ืฉืขืงืฅ ืื™ืŸ ื“ื™ PostgreSQL ื“ืึทื˜ืึทื‘ื™ื™ืก, ืื•ืŸ ื“ืึทืŸ ื“ืขืงืจื™ืคึผื˜ืขื“ ื“ื•ืจืš ื“ื™ pl/pgsql ืคื•ื ืงืฆื™ืข ืื•ืŸ ืจื™ืคึผืจืึทื“ื•ืกื˜ ืื™ืŸ ื“ื™ PostgreSQL ื“ืึทื˜ืึทื‘ื™ื™ืก.

ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ pg_chameleon

ืงื™ื™ืคืœ MySQL ืกื˜ืฉืขืžืึทืก ืคึฟื•ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืงื ื•ื™ืœ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจืขืคึผืœื™ืงื™ื™ื˜ื™ื“ ืฆื• ืึท ืื™ื™ืŸ ืฆื™ืœ ืคึผืึธืกื˜ื’ืจืขืกืงืœ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ืŸ ืึท ืื™ื™ืŸ-ืฆื•-ืคื™ืœืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ
ื“ื™ ืžืงื•ืจ ืื•ืŸ ืฆื™ืœ ืกื˜ืฉืขืžืึท ื ืขืžืขืŸ ืงืขื ืขืŸ ื ื™ืฉื˜ ื–ื™ื™ืŸ ื“ื™ ื–ืขืœื‘ืข.
ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ื“ืึทื˜ืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจื™ื˜ืจื™ื•ื•ื“ ืคื•ืŸ ืึท ืงืึทืกืงื™ื™ื“ ืžื™ืกืงืœ ืจืขืคึผืœื™ืงืข.
ื˜ืึทื‘ืœืขืก ื•ื•ืึธืก ืงืขื ืขืŸ ื ื™ืฉื˜ ืจืขืคึผืœืึทืงื™ื™ื˜ ืึธื“ืขืจ ืคึผืจืึธื“ื•ืฆื™ืจืŸ ืขืจืจืึธืจืก ื–ืขื ืขืŸ ื™ืงืกืงืœื•ื“ื™ื“.
ื™ืขื“ืขืจ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคึฟื•ื ืงืฆื™ืข ืื™ื– ืงืึทื ื˜ืจืึธื•ืœื“ ื“ื•ืจืš ื“ื™ื™ืžืึทื ื“ื–.
ืงืึธื ื˜ืจืึธืœ ื“ื•ืจืš YAML-ื‘ืื–ื™ืจื˜ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก.

ื‘ื™ื™ึทืฉืคึผื™ืœ

ื‘ืึทืœืขื‘ืึธืก
vm1
vm2

OS ื•ื•ืขืจืกื™ืข
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

DB ืกืขืจื•ื•ืขืจ ื•ื•ืขืจืกื™ืข
ืžื™ืกืงืœ ืงืกื ื•ืžืงืก
ืคึผืึธืกื˜ื’ืจืขืกืงืœ 10.5

ื“ื‘ ืคึผืึธืจื˜
3306
5433

ื™ืคึผ ืึทื“ืจืขืก
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, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคืึทืจืขื ื“ื™ืงืŸ ื“ื™ ืจื•ืขืŸ ืจืขืงื•ื•ื™ืจืขืžืขื ืฅ, ืึทื–ืึท ื•ื•ื™ ืงืจื™ื™ื™ื˜ื™ื ื’ ืื•ืŸ ืึทืงื˜ืึทื•ื•ื™ื™ื˜ื™ื ื’ ืึท ื•ื•ื™ืจื˜ื•ืึทืœ ืกื•ื•ื™ื•ื•ืข. ืึทื“ื“ื™ื˜ื™ืึธื ืึทืœืœื™, ื“ื™ ืคึผื™ืคึผ ืžืึธื“ื•ืœืข ืื™ื– ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ ืฆื• ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืข ืื•ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ 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 (ื˜ืฉืึทืžืขืœืขืึธืŸ ืื™ื– ืึท ื‘ืึทืคึฟืขืœ) ืžื™ื˜ ื“ื™ ืกืขื˜_ืงืึธื ืคื™ื’ื•ืจืึทื˜ื™ืึธืŸ_ืคื™ืœืขืก ืึทืจื’ื•ืžืขื ื˜ ืฆื• ื’ืขื‘ืŸ 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 ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข ืขืก ืื™ื– ืึท ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืคื•ืŸ ื’ืœืื‘ืืœืข ืกืขื˜ื˜ื™ื ื’ืก, ื•ื•ื• ืื™ืจ ืงืขื ืขืŸ ืคื™ืจืŸ ืกืขื˜ื˜ื™ื ื’ืก ืึทื–ืึท ื•ื•ื™ ื“ื™ ืึธืจื˜ ืคื•ืŸ ื“ื™ ืฉืœืึธืก ื˜ืขืงืข, ื“ื™ ืึธืจื˜ ืคื•ืŸ ืœืึธื’ืก, ื“ื™ ืกื˜ืึธืจื™ื“ื–ืฉ ืฆื™ื™ึทื˜ ืคึฟืึทืจ ืœืึธื’ืก, ืืื–"ื• ื•. ื•ื•ื™ื™ึทื˜ืขืจ ืงื•ืžื˜ ื“ืขืจ ื˜ื™ืคึผ ืึธื•ื•ื•ืขืจืจื™ื™ื“ ืึธืคึผื˜ื™ื™ืœื•ื ื’, ื•ื•ื• ืึท ืกื›ื•ื ืคื•ืŸ ื›ึผืœืœื™ื ืคึฟืึทืจ ืึธื•ื•ื•ืขืจืจื™ื™ื“ื™ื ื’ ื˜ื™ื™ืคึผืก ื‘ืขืฉืึทืก ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ. ื“ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ื“ื™ืคืึธืœืฅ ืฆื• ืึท ื˜ื™ืคึผ ืึธื•ื•ื•ืขืจืจื™ื™ื“ื™ื ื’ ื”ืขืจืฉืŸ ื•ื•ืึธืก ืงืึทื ื•ื•ืขืจืฅ ื˜ื™ื ื™ื™ื ื˜ (1) ืฆื• ืึท ื‘ื•ืœื™ืึทืŸ ื•ื•ืขืจื˜. ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืึธืคึผื˜ื™ื™ืœื•ื ื’, ืžื™ืจ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืงืฉืจ ื“ืขื˜ืึทื™ืœืก ืฆื• ื“ื™ ืฆื™ืœ ื“ืึทื˜ืึทื‘ื™ื™ืก. ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ื“ืึธืก ืื™ื– ืึท PostgreSQL ื“ืึทื˜ืึทื‘ื™ื™ืก, ื“ืขื–ื™ื’ื ื™ื™ื˜ื™ื“ pg_conn. ืื™ืŸ ื“ื™ ืœืขืฆื˜ืข ืึธืคึผื˜ื™ื™ืœื•ื ื’, ืžื™ืจ ืึธื ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืžืงื•ืจ ื“ืึทื˜ืŸ, ื“ืึธืก ืื™ื– ื“ื™ ืงืฉืจ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืคื•ืŸ ื“ื™ ืžืงื•ืจ ื“ืึทื˜ืึทื‘ื™ื™ืก, ื“ื™ ืžืึทืคึผื™ื ื’ ืกื›ืขืžืข ืฆื•ื•ื™ืฉืŸ ื“ื™ ืžืงื•ืจ ืื•ืŸ ืฆื™ืœ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื–, ื˜ื™ืฉืŸ ื•ื•ืึธืก ื–ืึธืœ ื–ื™ื™ืŸ ืกืงื™ืคึผื˜, ื•ื•ืึทืจื˜ืŸ ืฆื™ื™ื˜, ื–ื›ึผืจื•ืŸ, ืคึผืขืงืœ ื’ืจื™ื™ืก. ื‘ืึทืžืขืจืงื•ื ื’ ืึทื– "ืงื•ื•ืืœืŸ" ืื™ื– ืžืขืจืฆืึธืœ, ื˜ื™ื™ึทื˜ืฉ ืžื™ืจ ืงืขื ืขืŸ ืœื™ื™ื’ืŸ ืงื™ื™ืคืœ ืžืงื•ืจ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ืฆื• ืึท ืื™ื™ืŸ ืฆื™ืœ ื“ืึทื˜ืึทื‘ื™ื™ืก ืฆื• ืฉื˜ืขืœืŸ ืึทืจื•ื™ืฃ ืึท ืคื™ืœืข-ืฆื•-ืื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ.

ื“ืขืจ ื‘ื™ื™ืฉืคึผื™ืœ ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ืขืœื˜_ืงืก ื›ึผื•ืœืœ 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, ื•ื•ืึธืก ืจื™ืกืคึผืขืงื˜ื™ื•ื•ืœื™ ืึทื ื˜ื”ืึทืœื˜ืŸ ื“ื™ ืคืึทืงื˜ื™ืฉ ืจืขืคึผืœื™ืงื™ื™ื˜ื™ื“ ื˜ื™ืฉืŸ ืื•ืŸ ื“ื™ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ Directory ื˜ื™ืฉืŸ. ื“ื™ ืึทืจื’ื•ืžืขื ื˜ 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 ื“ืึทื˜ืึทื‘ื™ื™ืก, ืื•ืŸ ืจื•ืคืŸ ื“ื™ ืกื™ื ืง_ื˜ืึทื‘ืœืขืก ืึทืจื’ื•ืžืขื ื˜ ืื™ืŸ 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 ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ืื™ืŸ ืึท ืื™ื™ืŸ ืคึผืึธืกื˜ื’ืจืขืกืงืœ ื“ืึทื˜ืึทื‘ื™ื™ืก.
ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืฆื• ืจืขืคึผืœืึทืงื™ื™ื˜ ื“ื™ ืื•ื™ืกื’ืขืงืœื™ื‘ืŸ ื˜ื™ืฉืŸ.

ื“ื™ืกืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื– ืคื•ืŸ pg_chameleon

ื‘ืœื•ื™ื– ื’ืขืฉื˜ื™ืฆื˜ ืžื™ื˜ MySQL 5.5 ืื•ืŸ ื”ืขื›ืขืจ ื•ื•ื™ ืžืงื•ืจ ืื•ืŸ PostgreSQL 9.5 ืื•ืŸ ื”ืขื›ืขืจ ื•ื•ื™ ืฆื™ืœ ื“ืึทื˜ืึทื‘ื™ื™ืก.
ื™ืขื“ืขืจ ื˜ื™ืฉ ืžื•ื–ืŸ ื”ืึธื‘ืŸ ืึท ืขืจืฉื˜ื™ืง ืึธื“ืขืจ ื™ื™ื ืฆื™ืง ืฉืœื™ืกืœ, ืึทื ื“ืขืจืฉ ื“ื™ ื˜ื™ืฉืŸ ื–ืขื ืขืŸ ื™ื ื™ื˜ื™ืึทืœื™ื™ื–ื“ ื‘ืขืฉืึทืก ื“ื™ init_replica ืคึผืจืึธืฆืขืก ืึธื‘ืขืจ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืจืขืคึผืœื™ืงื™ื™ื˜ื™ื“.
ืื™ื™ืŸ-ื•ื•ืขื’ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ - ื‘ืœื•ื™ื– ืคึฟื•ืŸ MySQL ืฆื• PostgreSQL. ื“ืขืจื™ื‘ืขืจ, ืขืก ืื™ื– ื‘ืœื•ื™ื– ืคึผืึทืกื™ืง ืคึฟืึทืจ ื“ื™ "ืึทืงื˜ื™ื•ื•-ืคึผืึทืกื™ื•ื•" ืงืจื™ื™ึทื–.
ื“ืขืจ ืžืงื•ืจ ืงืขื ืขืŸ ื‘ืœื•ื™ื– ื–ื™ื™ืŸ ืึท MySQL ื“ืึทื˜ืึทื‘ื™ื™ืก, ืื•ืŸ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืึท PostgreSQL ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ื™ ืึท ืžืงื•ืจ ืื™ื– ื‘ืœื•ื™ื– ื™ืงืกืคึผืขืจืžืขื ืึทืœ ืื•ืŸ ืžื™ื˜ ืœื™ืžื™ื˜ื™ื™ืฉืึทื ื– (ืœืขืจื ืขืŸ ืžืขืจ ื“ืึธ)

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคึฟืึทืจ pg_chameleon

ื“ื™ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ืคึฟืŸ ืื™ืŸ pg_chameleon ืื™ื– ื’ืจื•ื™ืก ืคึฟืึทืจ ืžื™ื™ื’ืจื™ื™ื˜ื™ื ื’ ืึท ื“ืึทื˜ืึทื‘ื™ื™ืก ืคึฟื•ืŸ MySQL ืฆื• PostgreSQL. ื“ื™ ื‘ืึทื˜ื™ื™ื˜ื™ืง ื“ืึทื•ื ืกื™ื™ื“ ืื™ื– ืึทื– ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ื‘ืœื•ื™ื– ืื™ื™ืŸ-ื•ื•ืขื’, ืึทื–ื•ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืคึผืจืึธืคืขืกืกื™ืึธื ืึทืœืก ื–ืขื ืขืŸ ืึทื ืœื™ื™ืงืœื™ ืฆื• ื•ื•ืขืœืŸ ืฆื• ื ื•ืฆืŸ ืขืก ืคึฟืึทืจ ืขืคึผืขืก ืึทื ื“ืขืจืฉ ื•ื•ื™ ืžื™ื™ื’ืจื™ื™ืฉืึทืŸ. ืึธื‘ืขืจ ื“ื™ ืคึผืจืึธื‘ืœืขื ืคื•ืŸ ืื™ื™ืŸ-ื•ื•ืขื’ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืกืึทืœื•ื•ื“ ืžื™ื˜ ืืŸ ืื ื“ืขืจ ืขืคึฟืขื ืขืŸ ืžืงื•ืจ ื’ืขืฆื™ื™ึทื’ - ืกื™ืžืžืขื˜ืจื™ืงื“ืก.

ืœื™ื™ืขื ืขืŸ ืžืขืจ ืื™ืŸ ื“ืขืจ ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ื“ืึธ. ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื” ื”ื™ืœืฃ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ื“ืึธ.

ืื™ื‘ืขืจื‘ืœื™ืง ืคื•ืŸ ืกื™ืžืžืขื˜ืจื™ืงื“ืก

SymmetricDS ืื™ื– ืึทืŸ ืึธืคึฟืŸ ืžืงื•ืจ ื’ืขืฆื™ื™ึทื’ ื•ื•ืึธืก ืจืขืคึผืœืึทืงื™ื™ื˜ ืงื™ื™ืŸ ื“ืึทื˜ืึทื‘ื™ื™ืก ืฆื• ืงื™ื™ืŸ ืื ื“ืขืจืข ืคึผืจืึธืกื˜ ื“ืึทื˜ืึทื‘ื™ื™ืก: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird ืื•ืŸ ืื ื“ืขืจืข ื•ื•ืึธืœืงืŸ ื“ืึทื˜ืึทื‘ื™ื™ืก ืงืึทืกืขืก, ืœืžืฉืœ Azure, ืขื˜ืง ื‘ื ื™ืžืฆื ืคึฟืขื™ึดืงื™ื™ื˜ืŸ: ื“ื™ื™ื˜ืึทื‘ื™ื™ืก ืื•ืŸ ื˜ืขืงืข ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ, ืžื•ืœื˜ื™-ื‘ืขืœ ื“ืึทื˜ืึทื‘ื™ื™ืก ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืคื™ืœื˜ืขืจื“ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ, ื˜ืจืึทื ืกืคืึธืจืžืึทืฆื™ืข ืื•ืŸ ืื ื“ืขืจืข. ื“ืึธืก ืื™ื– ืึท Java ื’ืขืฆื™ื™ึทื’ ืื•ืŸ ืจื™ืงื•ื•ื™ื™ืขืจื– ืึท ื ืึธืจืžืึทืœ ืžืขืœื“ื•ื ื’ ืคื•ืŸ ื“ื™ JRE ืึธื“ืขืจ JDK (ื•ื•ืขืจืกื™ืข 8.0 ืึธื“ืขืจ ื”ืขื›ืขืจ). ื“ืึธ, ื“ืึทื˜ืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ืฆื• ื˜ืจื™ื’ืขืจื– ืื™ืŸ ื“ื™ ืžืงื•ืจ ื“ืึทื˜ืึทื‘ื™ื™ืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจืขืงืึธืจื“ืขื“ ืื•ืŸ ื’ืขืฉื™ืงื˜ ืฆื• ื“ื™ ืฆื•ื ืขืžืขืŸ ืฆื™ืœ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ืŸ ื“ื™ ืคืึธืจืขื ืคื•ืŸ ื‘ืึทื˜ืฉืึทื–.

ืกื™ืžืžืขื˜ืจื™ืงื“ืก ืคึฟืขื™ึดืงื™ื™ื˜ืŸ

ื“ื™ ื’ืขืฆื™ื™ึทื’ ืื™ื– ืคึผืœืึทื˜ืคืึธืจืžืข ืคืจื™ื™ึท, ื˜ื™ื™ึทื˜ืฉ ืฆื•ื•ื™ื™ ืึธื“ืขืจ ืžืขืจ ืคืึทืจืฉื™ื“ืขื ืข ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ืงืขื ืขืŸ ื•ื•ืขืงืกืœ ื“ืึทื˜ืŸ.
ืจื™ืœื™ื™ืฉืึทื ืึทืœ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ื–ืขื ืขืŸ ืกื™ื ื’ืงืจืึทื ื™ื™ื–ื“ ื ื™ืฆืŸ ื“ืึทื˜ืŸ ื˜ื•ื™ืฉืŸ ืจืขืงืึธืจื“ืก, ื‘ืฉืขืช ื˜ืขืงืข ืกื™ืกื˜ืขื-ื‘ืื–ื™ืจื˜ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ื ื•ืฆืŸ ื˜ืขืงืข ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ.
ืฆื•ื•ื™ื™-ื•ื•ืขื’ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ื ื™ืฆืŸ ืคึผื•ืฉ ืื•ืŸ ืคึผื•ืœ ืžืขื˜ื”ืึธื“ืก ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืึท ืกื›ื•ื ืคื•ืŸ ื›ึผืœืœื™ื.
ื“ืึทื˜ืŸ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืื™ื– ืžืขื’ืœืขืš ืื™ื‘ืขืจ ื–ื™ื›ืขืจ ืื•ืŸ ื ื™ื“ืขืจื™ืง-ื‘ืึทื ื“ื•ื•ื™ื“ื˜ ื ืขื˜ื•ื•ืึธืจืงืก.
ืึธื˜ืึทืžืึทื˜ื™ืง ืึธืคึผื–ื•ืš ื•ื•ืขืŸ ื ืึธื•ื“ื– ื ืขืžืขื  ื–ื™ื› ื•ื•ื™ื“ืขืจ ืึธืคึผืขืจืึทืฆื™ืข ื ืึธืš ืึท ื“ื•ืจื›ืคืึทืœ ืื•ืŸ ืึธื˜ืึทืžืึทื˜ื™ืง ืงืึธื ืคืœื™ืงื˜ ื”ืึทื›ืœืึธื˜ืข.
ื•ื•ืึธืœืงืŸ ืงืึทืžืคึผืึทื˜ืึทื‘ืึทืœ ืื•ืŸ ืฉื˜ืึทืจืง ืคืึทืจืœืขื ื’ืขืจื•ื ื’ ืึทืคึผื™ืก.

ื‘ื™ื™ึทืฉืคึผื™ืœ

ืกื™ืžืžืขื˜ืจื™ืงื“ืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื“ ืื™ืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ืฆื•ื•ื™ื™ ื•ื•ืขื’ืŸ:
ื ื‘ืขืœ (ืคืึธื˜ืขืจ) ื ืึธื“ืข ืึทื– ืกืขื ื˜ืจืึทืœื™ ืงืึธื•ืึธืจื“ืึทื ืึทืฅ ื“ืึทื˜ืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ ืฆื•ื•ื™ื™ ืฉืงืœืึทืฃ (ืงื™ื ื“) ื ืึธื•ื“ื–, ืื•ืŸ ืงืึธืžื•ื ื™ืงืึทืฆื™ืข ืฆื•ื•ื™ืฉืŸ ืงื™ื ื“ ื ืึธื•ื“ื– ืึทืงืขืจื– ื‘ืœื•ื™ื– ื“ื•ืจืš ื“ื™ ืคืึธื˜ืขืจ.
ืึทืŸ ืึทืงื˜ื™ื•ื• ื ืึธื“ืข (ื ืึธื“ืข 1) ืงืขื ืขืŸ ื™ื‘ืขืจื’ืขื‘ืŸ ืคึฟืึทืจ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืžื™ื˜ ืืŸ ืื ื“ืขืจ ืึทืงื˜ื™ื•ื• ื ืึธื“ืข (ื ืึธื“ืข 2) ืึธืŸ ืึท ื™ื ื˜ืขืจืžื™ื“ื™ืขืจื™.

ืื™ืŸ ื‘ื™ื™ื“ืข ืึธืคึผืฆื™ืขืก, ื“ืึทื˜ืŸ ื•ื•ืขืงืกืœ ืึทืงืขืจื– ืžื™ื˜ ืคึผื•ืฉ ืื•ืŸ ืคึผื•ืœ. ืื™ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทื˜ืจืึทื›ื˜ืŸ ืึทืŸ ืึทืงื˜ื™ื•ื•-ืึทืงื˜ื™ื•ื• ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ. ืขืก ื•ื•ืึธืœื˜ ื ืขืžืขืŸ ืฆื• ืœืึทื ื’ ืฆื• ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื“ื™ ื’ืื ืฆืข ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ, ืึทื–ื•ื™ ื˜ืึธืŸ ื“ื™ื™ืŸ ืคืึธืจืฉื•ื ื’. ืคื™ืจืขืจืฉืึทืคื˜ืฆื• ืœืขืจื ืขืŸ ืžืขืจ ื•ื•ืขื’ืŸ ื“ื™ SymmetricDS ืžื™ื˜ืœ.

ื™ื ืกื˜ืึธืœื™ื ื’ SymmetricDS ืื™ื– ื–ื™ื™ืขืจ ืคึผืฉื•ื˜: ืืจืืคืงืืคื™ืข ื“ื™ ืขืคึฟืขื ืขืŸ ืžืงื•ืจ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ืคืึทืจืฉืœืขืกืœืขืŸ ื˜ืขืงืข ืคื•ื  ื“ืึทื ืขื˜ ืื•ืŸ ื ืขืžืขืŸ ืขืก ืื•ื™ืก ื•ื•ืื•ื”ื™ืŸ ืื™ืจ ื•ื•ื™ืœื˜. ื“ื™ ื˜ื™ืฉ ืื•ื ื˜ืŸ ื’ื™ื˜ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ื™ ื™ื™ึทื ืžืึธื ื˜ื™ืจื•ื ื’ ืึธืจื˜ ืื•ืŸ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹SymmetricDS ืื™ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ืขืจืกื™ืขืก, ืœื™ื ื•ืงืก ื•ื•ืขืจืกื™ืขืก, IP ืึทื“ืจืขืกืขืก ืื•ืŸ ืคึผืึธืจืฅ ืคึฟืึทืจ ื‘ื™ื™ื“ืข ื ืึธื•ื“ื–.

ื‘ืึทืœืขื‘ืึธืก
vm1
vm2

OS ื•ื•ืขืจืกื™ืข
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

DB ืกืขืจื•ื•ืขืจ ื•ื•ืขืจืกื™ืข
ืžื™ืกืงืœ ืงืกื ื•ืžืงืก
ืคึผืึธืกื˜ื’ืจืขืกืงืœ 10.5

ื“ื‘ ืคึผืึธืจื˜
3306
5832

ื™ืคึผ ืึทื“ืจืขืก
192.168.1.107
192.168.1.112

ืกื™ืžืžืขื˜ืจื™ืงื“ืก ื•ื•ืขืจืกื™ืข
ืกื™ืžืžืขื˜ืจื™ืงื“ืก 3.9
ืกื™ืžืžืขื˜ืจื™ืงื“ืก 3.9

ืกื™ืžืžืขื˜ืจื™ืงื“ืก ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ื“ืจืš
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

ืกื™ืžืžืขื˜ืจื™ืงื“ืก ื ืึธื“ืข ื ืึธืžืขืŸ
ืงืึธืจืคึผ-000
ืงืจืึธื-001

ื“ืึธ ืžื™ืจ ื™ื ืกื˜ืึทืœื™ืจืŸ SymmetricDS ืื™ืŸ /usr/local/symmetric-server-3.9.20, ืื•ืŸ ืคืึทืจืฉื™ื“ืŸ ืกื•ื‘ื“ื™ืจืขืงื˜ืึธืจื™ืขืก ืื•ืŸ ื˜ืขืงืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืกื˜ืึธืจื“ ื“ืึธืจื˜. ืžื™ืจ ื–ืขื ืขืŸ ืื™ื ื˜ืขืจืขืกื™ืจื˜ ืื™ืŸ ื“ื™ ืกืึทืžืคึผืึทืœื– ืื•ืŸ ืขื ื“ื–ืฉืึทื ื– ืกื•ื‘ื“ื™ืจืขืงื˜ืึธืจื™ืขืก. ื“ื™ ืกืึทืžืคึผืึทืœื– ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ื›ึผื•ืœืœ ื‘ื™ื™ืฉืคื™ืœืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก ืžื™ื˜ ื ืึธื“ืข ืคึผืจืึธืคึผืขืจื˜ื™ืขืก, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื‘ื™ื™ืฉืคื™ืœืŸ SQL ืกืงืจื™ืคึผืก ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ื’ืขืฉื•ื•ื™ื ื“.

ืื™ืŸ ื“ื™ ืกืึทืžืคึผืึทืœื– ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืžื™ืจ ื–ืขืŸ ื“ืจื™ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก ืžื™ื˜ ื ืึธื“ืข ืคึผืจืึธืคึผืขืจื˜ื™ืขืก - ื“ืขืจ ื ืึธืžืขืŸ ื•ื•ื™ื™ื–ื˜ ื“ื™ ื ืึทื˜ื•ืจ ืคื•ืŸ ื“ื™ ื ืึธื“ืข ืื™ืŸ ืึท ื–ื™ื›ืขืจ ืกื›ืขืžืข.

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

ืกื™ืžืžืขื˜ืจื™ืงื“ืก ื”ืื˜ ืึทืœืข ื“ื™ ื ื™ื™ื˜ื™ืง ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก ืคึฟืึทืจ ืึท ื™ืงืขืจื“ื™ืง 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 ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ื– ื’ืขืจื•ืคึฟืŸ ืงืึธืจืคึผ-000, ืื•ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ ืื™ื– ื›ืึทื ื“ืึทืœื“ ื“ื•ืจืš ื“ื™ mysql jdbc ืฉืึธืคืขืจ, ื•ื•ืึธืก ื ื™ืฆื˜ ื“ื™ ืงืึทื ืขืงืฉืึทืŸ ืฉื˜ืจื™ืงืœ ืื•ื™ื‘ืŸ ืื•ืŸ ื“ื™ ืœืึธื’ื™ืŸ ืงืจืึทื“ืขื ื˜ืฉืึทืœื–. ืžื™ืจ ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื“ื™ ืจืขืคึผืœื™ืงืข_ื“ื‘ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื•ืŸ ื˜ื™ืฉืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื‘ืืฉืืคืŸ ื‘ืขืฉืึทืก ืกื˜ืฉืขืžืึท ืฉืึทืคื•ื ื’. sync.url ื•ื•ื™ื™ื–ื˜ ื“ื™ ืึธืจื˜ ืคื•ืŸ ื“ื™ ืงืฉืจ ืฆื• ื“ื™ ื ืึธื“ืข ืคึฟืึทืจ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ.

ื ืึธื“ืข 2 ืื•ื™ืฃ ื‘ืึทืœืขื‘ืึธืก ื•ื•ืž2 ืื™ื– ืงืึทื ืคื™ื’ื™ืขืจื“ ื•ื•ื™ ืงืจืึธื-001 ืื•ืŸ ื“ื™ ืžื ื•ื—ื” ืื™ื– ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ ื ืึธื“ืข.ืคึผืจืึธืคึผืขืจื˜ื™ืขืก ื˜ืขืงืข ืื•ื ื˜ืŸ. Node store-001 ืœื•ื™ืคื˜ ื“ื™ PostgreSQL ื“ืึทื˜ืึทื‘ื™ื™ืก ืื•ืŸ pgdb_replica ืื™ื– ื“ื™ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ื“ืึทื˜ืึทื‘ื™ื™ืก. registration.url ืึทืœืึทื•ื– ื‘ืึทืœืขื‘ืึธืก ื•ื•ืž2 ืฆื• ืงืึธื ื˜ืึทืงื˜ ื‘ืึทืœืขื‘ืึธืก ื•ื•ืž1 ืื•ืŸ ื‘ืึทืงื•ืžืขืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื“ืขื˜ืึทื™ืœืก ืคื•ืŸ ืขืก.

$> 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

ื“ื™ ื’ืขืขื ื“ื™ืงื˜ ืกื™ืžืžืขื˜ืจื™ืงื“ืก ื‘ื™ื™ืฉืคึผื™ืœ ื›ึผื•ืœืœ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืคึฟืึทืจ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืฆื•ื•ื™ื™-ื•ื•ืขื’ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ ืฆื•ื•ื™ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืกืขืจื•ื•ืขืจืก (ืฆื•ื•ื™ื™ ื ืึธื•ื“ื–). ื“ื™ ืกื˜ืขืคึผืก ืื•ื ื˜ืŸ ื–ืขื ืขืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืื•ื™ืฃ host vm1 (corp-000), ื•ื•ืึธืก ื•ื•ืขื˜ ืžืึทื›ืŸ ืึท ื‘ื™ื™ืฉืคึผื™ืœ ืกื˜ืฉืขืžืึท ืžื™ื˜ 4 ื˜ื™ืฉืŸ. ื“ืขืจื ืึธืš, ืคืœื™ืกื ื“ื™ืง create-sym-tables ืžื™ื˜ ื“ื™ ืกื™ืžืึทื“ืžื™ืŸ ื‘ืึทืคึฟืขืœ ืงืจื™ื™ื™ืฅ Directory ื˜ื™ืฉืŸ ื•ื•ื• ื“ื™ ื›ึผืœืœื™ื ืื•ืŸ ืจื™ื›ื˜ื•ื ื’ ืคื•ืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ ื ืึธื•ื“ื– ื•ื•ืขื˜ ื–ื™ื™ืŸ ืกื˜ืึธืจื“. ืฆื•ื ืกื•ืฃ, ืžื•ืกื˜ืขืจ ื“ืึทื˜ืŸ ืื™ื– ืœืึธื•ื“ื™ื“ ืื™ืŸ ื“ื™ ื˜ื™ืฉืŸ.

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 ื˜ื™ืฉืŸ ื–ืขื ืขืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืงืึทื ืคื™ื’ื™ืขืจื“ ืฆื• ืจืขืคึผืœืึทืงื™ื™ื˜ ืคึฟื•ืŸ ืงืึธืจืคึผ-000 ืฆื• ืงืจืึธื-001, ืื•ืŸ ื“ื™ ืคืึทืจืงื•ื™ืฃ ื˜ื™ืฉืŸ (ืกืึทืœืข_ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืื•ืŸ ืกืึทืœืข_ืจืขื˜ื•ืจืŸ_ืœื™ื ืข_ื™ื˜ืขื) ื–ืขื ืขืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืงืึทื ืคื™ื’ื™ืขืจื“ ืฆื• ืจืขืคึผืœืึทืงื™ื™ื˜ ืคึฟื•ืŸ ืงืจืึธื-001 ืฆื• ืงืึธืจืคึผ-000. ืื™ืฆื˜ ืžื™ืจ ืžืึทื›ืŸ ืึท ืกื›ืขืžืข ืื™ืŸ ื“ื™ PostgreSQL ื“ืึทื˜ืึทื‘ื™ื™ืก ืื•ื™ืฃ ื‘ืึทืœืขื‘ืึธืก vm2 (store-001) ืฆื• ืฆื•ื’ืจื™ื™ื˜ืŸ ืขืก ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ืึทื˜ืŸ ืคึฟื•ืŸ ืงืึธืจืคึผ-000.

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

ื–ื™ื™ื˜ ื–ื™ื›ืขืจ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืึทื– ื“ื™ MySQL ื“ืึทื˜ืึทื‘ื™ื™ืก ืื•ื™ืฃ vm1 ื”ืื˜ ื‘ื™ื™ืฉืคื™ืœืŸ ื˜ื™ืฉืŸ ืื•ืŸ ืกื™ืžืžืขื˜ืจื™ืงื“ืก ืงืึทื˜ืึทืœืึธื’ ื˜ื™ืฉืŸ. ื‘ืึทืžืขืจืงื•ื ื’ ืึทื– ื“ื™ SymmetricDS ืกื™ืกื˜ืขื ื˜ื™ืฉืŸ (ืคึผืจืขืคื™ืงืกืขื“ ืžื™ื˜ sym_) ื–ืขื ืขืŸ ื“ืขืจื•ื•ื™ื™ึทืœ ื‘ืœื•ื™ื– ื‘ื ื™ืžืฆื ืื•ื™ืฃ ื ืึธื“ืข ืงืึธืจืคึผ-000 ื•ื•ื™ื™ึทืœ ื“ืึธืก ืื™ื– ื•ื•ื• ืžื™ืจ ืœื•ื™ืคืŸ ื“ื™ create-sym-tables ื‘ืึทืคึฟืขืœ ืื•ืŸ ื•ื•ืขื˜ ืคื™ืจืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ. ืื•ืŸ ืื™ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื•ื™ืฃ ื ืึธื“ืข ืงืจืึธื-001 ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื‘ืœื•ื™ื– 4 ื‘ื™ื™ืฉืคึผื™ืœ ื˜ื™ืฉืŸ ืึธืŸ ื“ืึทื˜ืŸ.

ืึทืœืข. ื“ื™ ืกื•ื•ื™ื•ื•ืข ืื™ื– ื’ืจื™ื™ื˜ ืฆื• ืœื•ื™ืคืŸ ืกื™ืž ืกืขืจื•ื•ืขืจ ืคึผืจืึทืกืขืกืึทื– ืื•ื™ืฃ ื‘ื™ื™ื“ืข ื ืึธื•ื“ื– ื•ื•ื™ ื’ืขื•ื•ื™ื–ืŸ ืื•ื ื˜ืŸ.

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

ืงืœืึธืฅ ืื™ื™ื ืกืŸ ื–ืขื ืขืŸ ื’ืขืฉื™ืงื˜ ืฆื• ืึท ื”ื™ื ื˜ืขืจื’ืจื•ื ื˜ ืงืœืึธืฅ ื˜ืขืงืข (symmetric.log) ืื™ืŸ ื“ื™ ืœืึธื’ืก ื˜ืขืงืข ืื™ืŸ ื“ื™ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ื•ื•ื• ืกื™ืžืžืขื˜ืจื™ืงื“ืก ืื™ื– ืื™ื ืกื˜ืึทืœื™ืจืŸ, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืฆื• ื ืึธืจืžืึทืœ ืจืขื–ื•ืœื˜ืึทื˜. ื“ื™ ืกื™ืž ืกืขืจื•ื•ืขืจ ืงืขื ืขืŸ ืื™ืฆื˜ ื–ื™ื™ืŸ ื™ื ื™ืฉื™ื™ื™ื˜ื™ื“ ืื•ื™ืฃ ื ืึธื“ืข ืงืจืึธื-001.

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

ืื•ื™ื‘ ืื™ืจ ืœื•ื™ืคืŸ ื“ื™ sym ืกืขืจื•ื•ืขืจ ืคึผืจืึธืฆืขืก ืื•ื™ืฃ ื“ื™ vm2 ื‘ืึทืœืขื‘ืึธืก, ืขืก ื•ื•ืขื˜ ืื•ื™ืš ืฉืึทืคึฟืŸ SymmetricDS ืงืึทื˜ืึทืœืึธื’ ื˜ื™ืฉืŸ ืื™ืŸ ื“ื™ PostgreSQL ื“ืึทื˜ืึทื‘ื™ื™ืก. ืื•ื™ื‘ ืื™ืจ ืœื•ื™ืคืŸ ื“ื™ ืกื™ืž ืกืขืจื•ื•ืขืจ ืคึผืจืึธืฆืขืก ืื•ื™ืฃ ื‘ื™ื™ื“ืข ื ืึธื•ื“ื–, ื–ื™ื™ ืงืึธื•ืึธืจื“ืึทื ืึทื˜ ืžื™ื˜ ื™ืขื“ืขืจ ืื ื“ืขืจืข ืฆื• ืจืขืคึผืœืึทืงื™ื™ื˜ ื“ืึทื˜ืŸ ืคึฟื•ืŸ ืงืึธืจืคึผ-000 ืฆื• ืงืจืึธื-001. ืื•ื™ื‘ ื ืึธืš ืึท ื‘ื™ืกืœ ืกืขืงื•ื ื“ืขืก ืžื™ืจ ืึธื ืคึฟืจืขื’ ืึทืœืข 4 ื˜ื™ืฉืŸ ืื•ื™ืฃ ื‘ื™ื™ื“ืข ื–ื™ื™ื˜ืŸ, ืžื™ืจ ื•ื•ืขืœืŸ ื–ืขืŸ ืึทื– ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขืจืึธื˜ืŸ. ืึธื“ืขืจ ืื™ืจ ืงืขื ืขืŸ ืฉื™ืงืŸ ื“ื™ ื‘ืึธืึธื˜ืกื˜ืจืึทืคึผ ืฆื• ื ืึธื“ืข ืงืจืึธื-001 ืคึฟื•ืŸ ืงืึธืจืคึผ-000 ืžื™ื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ื‘ืึทืคึฟืขืœ.

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

ืื™ืŸ ื“ืขื ืคื•ื ื˜, ืึท ื ื™ื™ึทืข ืจืขืงืึธืจื“ ืื™ื– ื™ื ืกืขืจื˜ืึทื“ ืื™ืŸ ื“ื™ ื ื•ืžืขืจ ื˜ื™ืฉ ืื™ืŸ ื“ื™ MySQL ื“ืึทื˜ืึทื‘ื™ื™ืก ืื•ื™ืฃ ื ืึธื“ืข ืงืึธืจืคึผ-000 (ื‘ืึทืœืขื‘ืึธืก: vm1), ืื•ืŸ ืื™ืจ ืงืขื ืขืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• ื“ื™ ืคึผืึธืกื˜ื’ืจืขืกืงืœ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื•ื™ืฃ ื ืึธื“ืข ืงืจืึธื-001 (ื‘ืึทืœืขื‘ืึธืก: vm2). ืžื™ืจ ื–ืขืŸ ืึท ืคึผื•ืœ ืึธืคึผืขืจืึทืฆื™ืข ืฆื• ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ืึทื˜ืŸ ืคื•ืŸ ืงืึธืจืคึผ-000 ืฆื• ืงืจืึธื-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)

ืฆื• ื“ื•ืจื›ืคื™ืจืŸ ืึท ืคึผื•ืฉ ืึธืคึผืขืจืึทืฆื™ืข ืฆื• ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ืึทื˜ืŸ ืคื•ืŸ ืงืจืึธื-001 ืฆื• ืงืึธืจืคึผ-000, ืžื™ืจ ืึทืจื™ื™ึทื ืœื™ื™ื’ืŸ ืึท ืจืขืงืึธืจื“ ืื™ืŸ ื“ื™ sale_transaction ื˜ื™ืฉ ืื•ืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืึทื– ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ื’ืขืจืึธื˜ืŸ.

ืจืขื–ื•ืœื˜ืึทื˜.

ืžื™ืจ ื–ืขืŸ ื“ื™ ื’ืขืจืึธื˜ืŸ ืกืขื˜ืึทืคึผ ืคื•ืŸ ืฆื•ื•ื™ื™-ื•ื•ืขื’ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ื‘ื™ื™ืฉืคึผื™ืœ ื˜ื™ืฉืŸ ืฆื•ื•ื™ืฉืŸ MySQL ืื•ืŸ PostgreSQL ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื–. ืฆื• ืฉื˜ืขืœืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคึฟืึทืจ ื ื™ื™ึทืข ื‘ืึทื ื™ืฆืขืจ ื˜ื™ืฉืŸ, ื ืึธื›ื’ื™ื™ืŸ ื“ื™ ืกื˜ืขืคึผืก: ืžื™ืจ ืฉืึทืคึฟืŸ ื˜ื™ืฉ ื˜ 1 ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ื›ึผืœืœื™ื ื•ื•ื™ ื’ื™ื™ื˜. ื“ืขื ื•ื•ืขื’ ืžื™ืจ ืงืึทื ืคื™ื’ื™ืขืจ ื‘ืœื•ื™ื– ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคื•ืŸ ืงืึธืจืคึผ-000 ืฆื• ืงืจืึธื-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)

ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ื– ื“ืขืจื ืึธืš ื ืึธื•ื˜ืึทืคื™ื™ื“ ืคื•ืŸ ื“ื™ ืกื˜ืฉืขืžืึท ืขื ื“ืขืจื•ื ื’, ื“ืึธืก ืื™ื– ื“ื™ ืึทื“ื™ืฉืึทืŸ ืคื•ืŸ ืึท ื ื™ื™ึทืข ื˜ื™ืฉ, ื ื™ืฆืŸ ื“ื™ ืกื™ืžืึทื“ืžื™ืŸ ื‘ืึทืคึฟืขืœ ืžื™ื˜ ื“ื™ ืกื™ื ืง-ื˜ืจื™ื’ืขืจืก ืึทืจื’ื•ืžืขื ื˜, ื•ื•ืึธืก ืจื™ืงืจื™ื™ื™ืฅ ื“ื™ ื˜ืจื™ื’ืขืจื– ืฆื• ืžืึทืคึผืข ื“ื™ ื˜ื™ืฉ ื–ื•ืš. ืฉื™ืงืŸ-ืกื˜ืฉืขืžืึท ืื™ื– ืขืงืกืึทืงื™ื•ื˜ืึทื“ ืฆื• ืฉื™ืงืŸ ืกื˜ืฉืขืžืึท ืขื ื“ืขืจื•ื ื’ืขืŸ ืฆื• ื ืึธื“ืข ืงืจืึธื-001, ืื•ืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคื•ืŸ ื˜ื™ืฉ ื˜ 1 ืื™ื– ืงืึทื ืคื™ื’ื™ืขืจื“.

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

ื“ื™ ื‘ืขื ืขืคื™ืฅ ืคื•ืŸ ืกื™ืžืžืขื˜ืจื™ืงื“ืก

ื’ืจื™ื ื’ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืึท ืคืึทืจื˜ื™ืง ื’ืึทื ื’ ืคื•ืŸ ื˜ืขืงืขืก ืžื™ื˜ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ื“ืจื™ื™-ื ืึธื“ืข ืึธื“ืขืจ ืฆื•ื•ื™ื™-ื ืึธื“ืข ืงืจื™ื™ึทื–.
ืงืจื™ื™ึทื–-ืคึผืœืึทื˜ืคืึธืจืžืข ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ืื•ืŸ ืคึผืœืึทื˜ืคืึธืจืžืข ื–ืขืœื‘ืกื˜ืฉื˜ืขื ื“ื™ืงื™ื™ึทื˜, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืกืขืจื•ื•ืขืจืก, ืœืึทืคึผื˜ืึทืคึผืก ืื•ืŸ ืจื™ืจืขื•ื•ื“ื™ืง ื“ืขื•ื•ื™ืกืขืก.
ืจืขืคึผืœืึทืงื™ื™ื˜ ืงื™ื™ืŸ ื“ืึทื˜ืึทื‘ื™ื™ืก ืฆื• ืงื™ื™ืŸ ืื ื“ืขืจืข ื“ืึทื˜ืึทื‘ื™ื™ืก ืœืึธื•ืงืึทืœื™, ืื•ื™ืฃ ื“ื™ ื•ื•ืึทืŸ ืึธื“ืขืจ ืื™ืŸ ื“ื™ ื•ื•ืึธืœืงืŸ.
ืžืขื’ืœืขื›ืงื™ื™ื˜ ืคื•ืŸ ืึธืคึผื˜ื™ืžืึทืœ ืึทืจื‘ืขื˜ ืžื™ื˜ ืึท ืคึผืึธืจ ืคื•ืŸ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ืึธื“ืขืจ ืขื˜ืœืขื›ืข ื˜ื•ื™ื–ื ื˜ ืคึฟืึทืจ ื‘ืึทืงื•ื•ืขื ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ.
ื‘ืึทืฆืึธืœื˜ ื•ื•ืขืจืกื™ืข ืžื™ื˜ GUI ืื•ืŸ ื•ื™ืกื’ืขืฆื™ื™ื›ื ื˜ ืฉื˜ื™ืฆืŸ.

ื“ื™ืกืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื– ืคื•ืŸ ืกื™ืžืžืขื˜ืจื™ืงื“ืก

ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืžืึทื ื™ื•ืึทืœื™ ื“ืขืคื™ื ื™ืจืŸ ื“ื™ ื›ึผืœืœื™ื ืื•ืŸ ืจื™ื›ื˜ื•ื ื’ ืคื•ืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ื™ืฃ ื“ื™ ื‘ืึทืคึฟืขืœ ืฉื•ืจื” ื“ื•ืจืš ืกืงืœ ืกื˜ื™ื™ื˜ืžืึทื ืฅ ืฆื• ืžืึทืกืข ืงืึทื˜ืึทืœืึธื’ ื˜ื™ืฉืŸ, ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื•ืžื‘ืึทืงื•ื•ืขื.
ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืคื™ืœืข ื˜ื™ืฉืŸ ืคึฟืึทืจ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื˜ื™ื“ื™ืึทืก ืกื™ื™ึทื“ืŸ ืื™ืจ ื ื•ืฆืŸ ืกืงืจื™ืคึผืก ืฆื• ืฉืึทืคึฟืŸ ืกืงืœ ืกื˜ื™ื™ื˜ืžืึทื ืฅ ื•ื•ืึธืก ื“ืขืคื™ื ื™ืจืŸ ื“ื™ ื›ึผืœืœื™ื ืื•ืŸ ืจื™ื›ื˜ื•ื ื’ ืคื•ืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ.
ืขืก ืื™ื– ืฆื• ืคื™ืœ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืจืขืงืึธืจื“ืขื“ ืื™ืŸ ื“ื™ ืœืึธื’ืก, ืื•ืŸ ืžืืœ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืจื™ื™ื ื™ืงืŸ ื“ื™ ืงืœืึธืฅ ื˜ืขืงืข ืึทื–ื•ื™ ืึทื– ืขืก ื–ืึธืœ ื ื™ืฉื˜ ื ืขืžืขืŸ ืฆื• ืคื™ืœ ืคึผืœืึทืฅ.

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคึฟืึทืจ SymmetricDS

ืกื™ืžืžืขื˜ืจื™ืงื“ืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืฉื˜ืขืœืŸ ืฆื•ื•ื™ื™-ื•ื•ืขื’ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ ืฆื•ื•ื™ื™, ื“ืจื™ื™ ืึธื“ืขืจ ืืคื™ืœื• ืขื˜ืœืขื›ืข ื˜ื•ื™ื–ื ื˜ ื ืึธื•ื“ื– ืฆื• ืจืขืคึผืœืึทืงื™ื™ื˜ ืื•ืŸ ืกื™ื ื’ืงืจืึทื ื™ื™ื– ื˜ืขืงืขืก. ื“ืึธืก ืื™ื– ืึท ื™ื™ื ืฆื™ืง ื’ืขืฆื™ื™ึทื’ ื•ื•ืึธืก ื™ื ื“ื™ืคึผืขื ื“ืึทื ื˜ืœื™ ืคึผืขืจืคืึธืจืžื– ืคื™ืœืข ื˜ืึทืกืงืก, ืึทื–ืึท ื•ื•ื™ ืึธื˜ืึทืžืึทื˜ื™ืง ื“ืึทื˜ืŸ ืึธืคึผื–ื•ืš ื ืึธืš ืึท ืœืึทื ื’ ืฆื™ื™ื˜ ืคื•ืŸ ื“ืึทื•ื ื˜ื™ื™ื ืื•ื™ืฃ ืึท ื ืึธื“ืข, ื–ื™ื›ืขืจ ืื•ืŸ ืขืคืขืงื˜ื™ื•ื• ื“ืึทื˜ืŸ ื•ื•ืขืงืกืœ ืฆื•ื•ื™ืฉืŸ ื ืึธื•ื“ื– ื“ื•ืจืš ื”ื˜ื˜ืคึผืก, ืึธื˜ืึทืžืึทื˜ื™ืง ืงืึธื ืคืœื™ืงื˜ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืึท ื’ืึทื ื’ ืคื•ืŸ ื›ึผืœืœื™ื, ืืื–"ื• ื•. ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ ืงื™ื™ืŸ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื–, ื“ืขืจื™ื‘ืขืจ, ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืคึฟืึทืจ ืึท ื‘ืจื™ื™ื˜ ืคืึทืจืฉื™ื™ื“ื ืงื™ื™ึทื˜ ืคื•ืŸ ืกื™ื ืขืจื™ืึธื•ื–, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืžื™ื™ื’ืจื™ื™ืฉืึทืŸ, ืžื™ื™ื’ืจื™ื™ืฉืึทืŸ, ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’, ืคึฟื™ืœื˜ืจื™ืจื•ื ื’ ืื•ืŸ ื˜ืจืึทื ืกืคืึธืจืžืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹ื“ืึทื˜ืŸ ืึทืจื™ื‘ืขืจ ืคึผืœืึทื˜ืคืึธืจืžืก.

ื“ืขืจ ื‘ื™ื™ืฉืคึผื™ืœ ืื™ื– ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ืขืจ ื‘ืึทืึทืžื˜ืขืจ ืฉื ืขืœ ืคื™ืจืŸ ื“ื•ืจืš SymmetricDS. ืื™ืŸ ื‘ืื ื•ืฆืขืจ ืื ื•ื•ื™ื™ื–ืขืจ ื‘ืืฉืจื™ื™ื‘ื˜ ืื™ืŸ ื“ืขื˜ืึทืœ ื“ื™ ืคืึทืจืฉื™ื“ืŸ ืงืึทื ืกืขืคึผืก ื™ื ื•ื•ืึทืœื•ื•ื“ ืื™ืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืžื™ื˜ SymmetricDS.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’