เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบšเบšเบ‚เป‰เบฒเบกเบฅเบฐเบซเบงเปˆเบฒเบ‡ PostgreSQL เปเบฅเบฐ MySQL

เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบšเบšเบ‚เป‰เบฒเบกเบฅเบฐเบซเบงเปˆเบฒเบ‡ PostgreSQL เปเบฅเบฐ MySQL

เบ‚เป‰เบญเบเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบšเบšเบ‚เป‰เบฒเบกเบฅเบฐเบซเบงเปˆเบฒเบ‡ PostgreSQL เปเบฅเบฐ MySQL, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบšเบšเบ‚เป‰เบฒเบกเบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเบˆเปเบฒเบฅเบญเบ‡เปเบšเบšเบ‚เป‰เบฒเบกเปเบกเปˆเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒ homogeneous, เปเบฅเบฐเบกเบฑเบ™เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ RDBMS เบซเบ™เบถเปˆเบ‡เป„เบ›เบซเบฒเบญเบทเปˆเบ™.

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ PostgreSQL เปเบฅเบฐ MySQL เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™เบ–เบทเบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡, เปเบ•เปˆเบ”เป‰เบงเบเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบžเบงเบเป€เบ‚เบปเบฒเบชเบฐเป€เบซเบ™เบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ” NoSQL. เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡ PostgreSQL เปเบฅเบฐ MySQL เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐ DBMS เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบžเบฒเบเปƒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบเบเบฒเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เบ‚เปเป‰เบ”เบต, เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เปเบฅเบฐเบเปเบฅเบฐเบ™เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰.

เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡เป€เบŠเบตเบšเป€เบงเบตเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ„เบทเบเบฑเบ™เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบขเบนเปˆเปƒเบ™เป‚เบซเบกเบ”เบ–เบฒเบ™เบชเบญเบ‡เบซเบผเบทเปƒเบŠเป‰เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบฅเบฐเบซเบงเปˆเบฒเบ‡เปเบกเปˆเบšเบปเบ” (เบœเบนเป‰เป€เบœเบตเบเปเบœเปˆ, เปเบกเปˆเบšเบปเบ”, เบซเบผเบทเป€เบฎเบฑเบ”เบงเบฝเบ) เปเบฅเบฐเบ—เบฒเบ” (เบœเบนเป‰เบˆเบญเบ‡, เบชเบฐเปเบ•เบ™เบšเบฒเบ, เบซเบผเบทเบ•เบปเบงเบ•เบฑเป‰เบ‡เบ•เบปเบงเบ•เบต). เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบชเปเบฒเป€เบ™เบปเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเปƒเบ™เบ”เป‰เบฒเบ™เบชเปเบฒเบฅเบญเบ‡. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเป‚เบญเบ™เบˆเบฒเบเปเบกเปˆเปเบšเบšเป„เบ›เบซเบฒเบชเปเบฒเบฅเบญเบ‡, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบˆเบฒเบเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเป„เบ›เบชเบนเปˆเบ•เบปเบงเบ•เบฑเป‰เบ‡เบ•เบปเบงเบ•เบต, เป€เบžเบฒเบฐเบงเปˆเบฒเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบ”เบฝเบงเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ replication เบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ—เบฑเบ‡เบชเบญเบ‡เบ—เบดเบ”เบ—เบฒเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เปเป‰เบกเบนเบ™เป„เบ”เป‰เบ–เบทเบเป‚เบญเบ™เบˆเบฒเบ slave เบเบฑเบšเปเบกเปˆเบšเบปเบ”เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง. เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰, เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบšเบš cascading, เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเบญเบ‡เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Active-active เบซเบผเบท active-passive เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™, เบ„เบงเบฒเบกเบžเป‰เบญเบกเบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบซเบผเบทเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เปเบเป‰เป„เบ‚เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบžเบฒเบเบ™เบญเบเปเบฅเบฐเบเบฒเบ™เบ„เป‰เบฒเบ—เบตเปˆเบกเบตเบขเบนเปˆ.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเปเบกเปˆเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เป€เบŠเบตเบšเป€เบงเบตเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบซเป‰เบเบญเบกเบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบˆเบณเบฅเบญเบ‡เบˆเบฒเบเป€เบŠเบตเบšเป€เบงเบตเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบญเบทเปˆเบ™ เปเบฅเบฐเบเบฑเบ‡เบฎเบฑเบเบชเบฒเบเบฒเบ™เบ–เปˆเบฒเบเบžเบฒเบšเปเบšเบšเบชเบปเบ”เป†เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบณเป€เบ™เบปเบฒเป„เบงเป‰. MySQL เปเบฅเบฐ PostgreSQL เบชเบฐเป€เบซเบ™เบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเปˆเบงเบ™เปƒเบซเบเปˆเบขเบนเปˆเปƒเบ™เป€เบฎเบทเบญเบ™เบซเบผเบทเป‚เบ”เบเบœเปˆเบฒเบ™เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบ‚เบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบก, เบฅเบงเบกเบ—เบฑเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ„เบนเปˆ, เบเบฒเบ™เบฅเบฑเบญเบเปเบœเปˆเบ™, เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆเปเบ–เบง.

เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบšเบšเบ‚เป‰เบฒเบกเบฅเบฐเบซเบงเปˆเบฒเบ‡ MySQL เปเบฅเบฐ PostgreSQL เปเบกเปˆเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบเป‰เบฒเบเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบซเบ™เบถเปˆเบ‡เป„เบ›เบซเบฒเบญเบทเปˆเบ™. เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปƒเบŠเป‰เป‚เบ›เป‚เบ•เบ„เบญเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบžเบงเบเบกเบฑเบ™เป‚เบ”เบเบเบปเบ‡. เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบ‚เปเป‰เบกเบนเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบžเบฒเบเบ™เบญเบ, เบ•เบปเบงเบขเปˆเบฒเบ‡ pg_chameleon.

pg_chameleon เปเบกเปˆเบ™เบซเบเบฑเบ‡

pg_chameleon เปเบกเปˆเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบˆเบฒเบ MySQL เบเบฑเบš PostgreSQL เปƒเบ™ Python 3. เบกเบฑเบ™เปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” mysql-replication เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”, เบเบฑเบ‡เบขเบนเปˆเปƒเบ™ Python. เบฎเบนเบšเบžเบฒเบšเปเบ–เบงเบ–เบทเบเบชเบฐเบเบฑเบ”เบญเบญเบเบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ MySQL เปเบฅเบฐเป€เบเบฑเบšเป„เบงเป‰เป€เบ›เบฑเบ™เบงเบฑเบ”เบ–เบธ JSONB เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ PostgreSQL, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เป‚เบ”เบเบŸเบฑเบ‡เบŠเบฑเบ™ pl/pgsql เปเบฅเบฐเบœเบฐเบฅเบดเบ”เบ„เบทเบ™เปƒเบซเบกเปˆเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ PostgreSQL.

เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡ pg_chameleon

schemas MySQL เบซเบผเบฒเบเบญเบฑเบ™เบˆเบฒเบเบเบธเปˆเบกเบ”เบฝเบงเบเบฑเบ™เบชเบฒเบกเบฒเบ” replicated เบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ PostgreSQL เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ”เบฝเบงเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบซเบ™เบถเปˆเบ‡เบซเบฒเบซเบผเบฒเบ.
เบŠเบทเปˆ schema เบ—เบตเปˆเบกเบฒ เปเบฅเบฐเป€เบ›เบปเป‰เบฒเปเบฒเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ„เบทเบเบฑเบ™เป„เบ”เป‰.
เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบชเบฒเบกเบฒเบ”เบ”เบถเบ‡เบกเบฒเบˆเบฒเบเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡ MySQL เปเบšเบš cascaded.
เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป€เบฅเบทเป‰เบกเบ„เบทเบ™เบซเบผเบทเบชเป‰เบฒเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปเบกเปˆเบ™เป„เบ”เป‰เบ–เบทเบเบเบปเบเป€เบงเบฑเป‰เบ™.
เปเบ•เปˆเบฅเบฐเบซเบ™เป‰เบฒเบ—เบตเปˆเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ–เบทเบเบ„เบงเบšเบ„เบธเบกเป‚เบ”เบ daemon.
เบ„เบงเบšเบ„เบธเบกเบœเปˆเบฒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆ YAML เปเบฅเบฐเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ.

เบ•เบปเบงเบขเปˆเบฒเบ‡:

เป€เบˆเบปเป‰เบฒเบžเบฒเบš
vm1
vm2

เบฅเบธเป‰เบ™ OS
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, เป€เบŠเบดเปˆเบ‡เบชเป‰เบฒเบ‡เปเบฅเบฐเป€เบ›เบตเบ”เปƒเบŠเป‰เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก virtual.

$> 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 เบชเปเบฒเป€เบฅเบฑเบ”เปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบชเปเบฒเป€เบฅเบฑเบ”เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญ, เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบฅเบฐเป€เบ›เบตเบ”เปƒเบŠเป‰เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก virtual. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เป‚เบกเบ”เบนเบ™ 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 (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 เบกเบตเบžเบฒเบเบชเปˆเบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบปเปˆเบงเป‚เบฅเบ, เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบŠเบฑเปˆเบ™: เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบฅเบฑเบญเบ, เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบ, เป„เบฅเบเบฐเป€เบงเบฅเบฒเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบ—เบถเบ, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบžเบฒเบเบชเปˆเบงเบ™ override เบ›เบฐเป€เบžเบ”, เบšเปˆเบญเบ™เบ—เบตเปˆ เบŠเบธเบ”เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ overriding เบ›เบฐเป€เบžเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™ replication. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™ overriding เบ—เบตเปˆเบ›เปˆเบฝเบ™ tinyint(1) เป€เบ›เบฑเบ™เบ„เปˆเบฒ boolean. เปƒเบ™เบžเบฒเบเบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ™เบตเป‰เปเบกเปˆเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ PostgreSQL, เบเปเบฒเบ™เบปเบ” pg_conn. เปƒเบ™เบžเบฒเบเบชเบธเบ”เบ—เป‰เบฒเบ, เบžเบงเบเป€เบฎเบปเบฒเบŠเบตเป‰เบšเบญเบเบ‚เปเป‰เบกเบนเบ™เปเบซเบผเปˆเบ‡, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบซเบผเปˆเบ‡, เป‚เบ„เบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบซเบผเปˆเบ‡เปเบฅเบฐเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ, เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เป‰เบฒเบก, เป€เบงเบฅเบฒเบฅเปเบ–เป‰เบฒ, เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบ‚เบฐเบซเบ™เบฒเบ”เบŠเบธเบ”. เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ "เปเบซเบผเปˆเบ‡" เปเบกเปˆเบ™เบซเบผเบฒเบ, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบซเบผเปˆเบ‡เบซเบผเบฒเบเป„เบ›เบซเบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ”เบฝเบงเป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบซเบผเบฒเบเบ•เปเปˆเบซเบ™เบถเปˆเบ‡.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ world_x เบกเบต 4 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบกเบตเปเบ–เบงเบ—เบตเปˆเบŠเบธเบกเบŠเบปเบ™ MySQL เบชเบฐเป€เบซเบ™เบตเป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡. เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ”เบฒเบงเป‚เบซเบผเบ”เป„เบ”เป‰ เบ—เบตเปˆเบ™เบตเป‰. เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบกเบฒเป€เบ›เบฑเบ™ tar เปเบฅเบฐ compressed archive เบเบฑเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เปเบฅเบฐเบ™เปเบฒเป€เบ‚เบปเป‰เบฒเปเบ–เบง.

เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ 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 เป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบชเบญเบ‡ schemas, 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 node:

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

เบชเบฒเบกเบ„เปเบฒเบชเบฑเปˆเบ‡ pg_chameleon (chameleon) เบ•เปเปˆเป„เบ›เบเบฐเบเบฝเบกเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก, เป€เบžเบตเปˆเบกเปเบซเบผเปˆเบ‡, เปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡. เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡ create_replica_schema เบเบฑเบš pg_chameleon เบชเป‰เบฒเบ‡ schema เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ (sch_chameleon) เปเบฅเบฐ schema replication (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 argument, เปเบฅเบฐเบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰ show_errors argument.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš.

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเปˆเบฒเบงเปเบฅเป‰เบง, เปเบ•เปˆเบฅเบฐเบซเบ™เป‰เบฒเบ—เบตเปˆเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ–เบทเบเบ„เบงเบšเบ„เบธเบกเป‚เบ”เบ daemon. เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบžเบงเบเบกเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบญเบšเบ–เบฒเบกเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡ Linux ps, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš.

Replication เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ configured เบˆเบปเบ™เบเปˆเบงเบฒเบžเบงเบเป€เบฎเบปเบฒเบ—เบปเบ”เบชเบญเบšเบกเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰. เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เปƒเบชเปˆเบชเบญเบ‡เบชเบฒเบกเบšเบฑเบ™เบ—เบถเบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ MySQL, เปเบฅเบฐเป‚เบ—เบซเบฒ sync_tables argument เปƒเบ™ pg_chameleon เป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡ daemons เปเบฅเบฐ replicate เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบกเบตเบšเบฑเบ™เบ—เบถเบเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ 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 เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™เบˆเบธเบ”เบชเบดเป‰เบ™เบชเบธเบ”เบ‚เบญเบ‡เบกเบฑเบ™. เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเปเบ–เบงเบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เบ–เบทเบ replicated, เปเบฅเบฐเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฐเป€เบ›เบฑเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ PostgreSQL เบ—เบตเปˆเบ–เบทเบเบเบปเบเบเป‰เบฒเบเบขเปˆเบฒเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบซเบผเปˆเบ‡เบซเบผเบทเป‚เบ„เบ‡เบเบฒเบ™ replication (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. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบงเบปเบ‡เบˆเบญเบ™ "active-passive" เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.
เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ MySQL เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เปเบฅเบฐเบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ PostgreSQL เป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เปเบฅเบฐเบกเบตเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ” (เบฎเบฝเบ™เบฎเบนเป‰เป€เบžเบตเปˆเบกเป€เบ•เบตเบก เบ—เบตเปˆเบ™เบตเป‰)

เบœเบปเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบชเปเบฒเบฅเบฑเบš pg_chameleon

เบงเบดเบ—เบตเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปƒเบ™ pg_chameleon เปเบกเปˆเบ™เบ”เบตเป€เบฅเบตเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเป‰เบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบ MySQL เป„เบ› PostgreSQL. เบเบฒเบ™เบซเบผเบธเบ”เบฅเบปเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบงเบดเบ—เบตเบ”เบฝเบง, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบœเบนเป‰เบŠเปˆเบฝเบงเบŠเบฒเบ™เบ”เป‰เบฒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเบซเบ™เป‰เบฒเบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบ. เปเบ•เปˆเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบšเบšเบ”เบฝเบงเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เป„เบ”เป‰เบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบญเบทเปˆเบ™ - SymmetricDS.

เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™ เบ—เบตเปˆเบ™เบตเป‰. เบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰ เบ—เบตเปˆเบ™เบตเป‰.

เบžเบฒเบšเบฅเบงเบกเบ‚เบญเบ‡ SymmetricDS

SymmetricDS เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบ—เบตเปˆ replicates เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ”เป†เบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบปเปˆเบงเป„เบ›เบญเบทเปˆเบ™เป†: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird เปเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบŸเบฑเบ‡เบญเบทเปˆเบ™เป†, e.g. Redshift, เปเบฅเบฐ Azure, เปเบฅเบฐเบญเบทเปˆเบ™เป† เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆ: เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเป„เบŸเบฅเปŒ synchronization, multi-master database replication, filtered synchronization, transformation เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบท Java เปเบฅเบฐเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ›เปˆเบญเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เบญเบ‡ JRE เบซเบผเบท JDK (เบฎเบธเปˆเบ™ 8.0 เบซเบผเบทเบชเบนเบ‡เบเบงเปˆเบฒ). เบ—เบตเปˆเบ™เบตเป‰, เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบซเบผเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ batches.

เบฅเบฑเบเบชเบฐเบ™เบฐ SymmetricDS

เป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบกเปˆเบ™เป€เบงเบ—เบตเป€เบญเบเบฐเบฅเบฒเบ”, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบชเบญเบ‡เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเบฒเบกเบฒเบ”เปเบฅเบเบ›เปˆเบฝเบ™เบ‚เปเป‰เบกเบนเบ™.
เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบ–เบทเบ synchronized เป‚เบ”เบเปƒเบŠเป‰เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เปเป‰เบกเบนเบ™, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเปƒเบŠเป‰ synchronization เป„เบŸเบฅเปŒ.
เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบšเบšเบชเบญเบ‡เบ—เบฒเบ‡เป‚เบ”เบเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™ Push เปเบฅเบฐ Pull เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰.
เบเบฒเบ™เป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบœเปˆเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž เปเบฅเบฐ เปเบšเบ™เบงเบดเบ”เบ•เปเปˆเบฒ.
เบเบฒเบ™เบŸเบทเป‰เบ™เบ•เบปเบงเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบกเบทเปˆเบญ nodes เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ•เปเปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเปเบฅเบฐเบเบฒเบ™เปเบเป‰เป„เบ‚เบ‚เปเป‰เบ‚เบฑเบ”เปเบเปˆเบ‡เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.
Cloud เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰ เปเบฅเบฐ APIs เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš.

เบ•เบปเบงเบขเปˆเบฒเบ‡:

SymmetricDS เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบชเบญเบ‡เบงเบดเบ—เบต:
เปเบกเปˆเบšเบปเบ” (เบžเปเปˆเปเบกเปˆ) node เบ—เบตเปˆเบ›เบฐเบชเบฒเบ™เบ‡เบฒเบ™เบชเบนเบ™เบเบฒเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡ slave (child) nodes, เปเบฅเบฐเบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡ node เบ‚เบญเบ‡เป€เบ”เบฑเบเบ™เป‰เบญเบเป€เบเบตเบ”เบ‚เบถเป‰เบ™เป‚เบ”เบเบœเปˆเบฒเบ™เบžเปเปˆเปเบกเปˆเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.
node เบ—เบตเปˆเปƒเบŠเป‰เบงเบฝเบ (Node 1) เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เปเปˆเบชเบทเปˆเบชเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบเบฑเบš node เบญเบทเปˆเบ™เบ—เบตเปˆเปƒเบŠเป‰เบงเบฝเบ (Node 2) เป‚เบ”เบเบšเปเปˆเบกเบตเบ•เบปเบงเบเบฒเบ‡.

เปƒเบ™เบ—เบฑเบ‡เบชเบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบเบตเบ”เบ‚เบทเป‰เบ™เป‚เบ”เบเปƒเบŠเป‰ Push เปเบฅเบฐ Pull. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง. เบกเบฑเบ™เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เป€เบเบตเบ™เป„เบ›เบ—เบตเปˆเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”, เบชเบฐเบ™เบฑเป‰เบ™เป€เบฎเบฑเบ”เบเบฒเบ™เบ„เบปเป‰เบ™เบ„เบงเป‰เบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบ„เบนเปˆเบกเบทเป€เบžเบทเปˆเบญเบฎเบฝเบ™เบฎเบนเป‰เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™ SymmetricDS.

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ SymmetricDS เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ: เบ”เบฒเบงเป‚เบซเบฅเบ”เป€เบงเบตเบŠเบฑเบ™เป€เบ›เบตเบ”เบ‚เบญเบ‡เป„เบŸเบฅเปŒ zip เบˆเบฒเบเบ™เบตเป‰ เปเบฅเบฐเป€เบญเบปเบฒเบกเบฑเบ™เบญเบญเบเป„เบ›เบšเปˆเบญเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™. เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบชเบฐเบซเบ™เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡ SymmetricDS เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบชเบฐเบšเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เบชเบฐเบšเบฑเบš Linux, เบ—เบตเปˆเบขเบนเปˆ IP, เปเบฅเบฐเบžเบญเบ”เบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡เบชเบญเบ‡ nodes.

เป€เบˆเบปเป‰เบฒเบžเบฒเบš
vm1
vm2

เบฅเบธเป‰เบ™ OS
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 node
Corp-000
เบฎเป‰เบฒเบ™-001

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เบฑเป‰เบ‡ SymmetricDS เปƒเบ™ /usr/local/symmetric-server-3.9.20, เปเบฅเบฐเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเบ•เปˆเบฒเบ‡เป†เปเบฅเบฐเป„เบŸเบฅเปŒเบˆเบฐเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบ•เบปเบงเบŠเบตเป‰เบšเบญเบเบเปˆเบญเบเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเปเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡. เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ•เบปเบงเบขเปˆเบฒเบ‡เบกเบตเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡ node, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡ SQL scripts เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ.

เปƒเบ™เบšเบฑเบ™เบŠเบตเบ•เบปเบงเบขเปˆเบฒเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบชเบฒเบกเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡ node - เบŠเบทเปˆเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡ node เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบซเบ™เบถเปˆเบ‡.

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

SymmetricDS เบกเบตเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเบญเบเปเบšเบš 3-node เบžเบทเป‰เบ™เบ–เบฒเบ™ (เบ—เบฒเบ‡เป€เบฅเบทเบญเบ 1), เปเบฅเบฐเป„เบŸเบฅเปŒเบ”เบฝเบงเบเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเบญเบเปเบšเบš 2-node (เบ—เบฒเบ‡เป€เบฅเบทเบญเบ 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

node เปƒเบ™ SymmetricDS configuration เป€เบญเบตเป‰เบ™เบงเปˆเบฒ corp-000, เปเบฅเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบˆเบฑเบ”เบเบฒเบ™เป‚เบ”เบเป„เบ”เป€เบงเบต mysql jdbc, เป€เบŠเบดเปˆเบ‡เปƒเบŠเป‰เบชเบฒเบเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš. เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ replica_db เปเบฅเบฐเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ schema. sync.url เบชเบฐเปเบ”เบ‡เบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบ•เปเปˆเบเบฑเบš node เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ synchronization.

Node 2 เปƒเบ™ host vm2 เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ›เบฑเบ™ store-001 เปเบฅเบฐเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเปเบกเปˆเบ™เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เป„เบŸเบฅเปŒ node.properties เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰. Node store-001 เปเบฅเปˆเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ PostgreSQL เปเบฅเบฐ pgdb_replica เปเบกเปˆเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ replication. 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 เบ—เบตเปˆเบชเปเบฒเป€เบฅเบฑเบ”เบกเบตเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบšเบšเบชเบญเบ‡เบ—เบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ (เบชเบญเบ‡เป‚เบซเบ™เบ”). เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™ host vm1 (corp-000), เป€เบŠเบดเปˆเบ‡เบˆเบฐเบชเป‰เบฒเบ‡ schema เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบต 4 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เปเบฅเปˆเบ™ create-sym-tables เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡ symadmin เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบเบปเบ”เบฅเบฐเบšเบฝเบšเปเบฅเบฐเบ—เบดเบ”เบ—เบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡ nodes เบˆเบฐเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰. เบชเบธเบ”เบ—เป‰เบฒเบ, เบ‚เปเป‰เบกเบนเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ–เบทเบเป‚เบซเบฅเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡.

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 เป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบžเบทเปˆเบญ replicate เบˆเบฒเบ corp-000 เบเบฑเบš store-001, เปเบฅเบฐเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบเบฒเบ™เบ‚เบฒเบ (sale_transaction เปเบฅเบฐ sale_return_line_item) เป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบžเบทเปˆเบญ replicate เบˆเบฒเบ store-001 เบซเบฒ corp-000. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ schema เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ PostgreSQL เปƒเบ™ host 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_) เบ›เบฐเบˆเบธเบšเบฑเบ™เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™ node corp-000 เป€เบžเบฒเบฐเบงเปˆเบฒเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ create-sym-tables เปเบฅเบฐเบˆเบฐเบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡. เปเบฅเบฐเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™ node store-001 เบˆเบฐเบกเบตเบžเบฝเบ‡ 4 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบšเปเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™.

เบ—เบฑเบ‡เปเบปเบ”. เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบกเปˆเบ™เบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบŠเบตเบŸเป€เบงเบต sym เปƒเบ™เบ—เบฑเบ‡เบชเบญเบ‡ nodes เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰.

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 เปƒเบ™เบ—เบฑเบ‡เบชเบญเบ‡ nodes, เบžเบงเบเป€เบ‚เบปเบฒเบ›เบฐเบชเบฒเบ™เบ‡เบฒเบ™เบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™เป€เบžเบทเปˆเบญ replicate เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบ corp-000 เบเบฑเบš store-001. เบ–เป‰เบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบชเบญเบ‡เบชเบฒเบกเบงเบดเบ™เบฒเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบญเบšเบ–เบฒเบกเบ—เบฑเบ‡เบซเบกเบปเบ” 4 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบฑเบ‡เบชเบญเบ‡เบ”เป‰เบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เป„เบ”เป‰เบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”. เบซเบผเบทเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡ bootstrap เป„เบ›เบซเบฒ node store-001 เบˆเบฒเบ corp-000 เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰.

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

เปƒเบ™เบˆเบธเบ”เบ™เบตเป‰, เบšเบฑเบ™เบ—เบถเบเปƒเบซเบกเปˆเบ–เบทเบเปƒเบชเปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบฅเบฒเบเบเบฒเบ™เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ MySQL เปƒเบ™ node corp-000 (host: vm1), เปเบฅเบฐเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ PostgreSQL เปƒเบ™ node store-001 (host: 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 เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰. เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบžเบฝเบ‡เปเบ•เปˆ replication เบˆเบฒเบ 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)

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป„เบ”เป‰เบ–เบทเบเปเบˆเป‰เบ‡เปƒเบซเป‰เบŠเบฒเบšเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เบญเบ‡ schema, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบเบฒเบ™เป€เบžเบตเปˆเบกเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบซเบกเปˆ, เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ symadmin เบเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡ sync-triggers, เป€เบŠเบดเปˆเบ‡เบชเป‰เบฒเบ‡ triggers เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบ„เปเบฒเบ™เบดเบเบฒเบกเบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡. send-schema เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ schema เป„เบ›เบซเบฒ node store-001, เปเบฅเบฐเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ t1 เป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒ.

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

เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡ SymmetricDS

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‡เปˆเบฒเบ, เบฅเบงเบกเบ—เบฑเบ‡เบŠเบธเบ”เป„เบŸเบฅเปŒเบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเบ—เบตเปˆเบกเบตเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบงเบปเบ‡เบˆเบญเบ™เบชเบฒเบกเป‚เบซเบ™เบ”เบซเบผเบทเบชเบญเบ‡เป‚เบซเบ™เบ”.
เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เป‰เบฒเบกเป€เบงเบ—เบต เปเบฅเบฐเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฒเบ”เบ‚เบญเบ‡เป€เบงเบ—เบต, เบฅเบงเบกเบ—เบฑเบ‡เป€เบŠเบตเบšเป€เบงเบต, เปเบฅเบฑเบšเบ—เบฑเบญเบš เปเบฅเบฐเบญเบธเบ›เบฐเบเบญเบ™เบกเบทเบ–เบท.
Replicate เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ”เป†เบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบญเบทเปˆเบ™เป†เบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เปƒเบ™ WAN เบซเบผเบทเปƒเบ™เบ„เบฅเบฒเบง.
เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบเบฑเบšเบชเบญเบ‡เบชเบฒเบกเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบซเบผเบทเบซเบผเบฒเบเบžเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ—เบตเปˆเบชเบฐเบ”เบงเบ.
เบชเบฐเบšเบฑเบšเบˆเปˆเบฒเบเบ”เป‰เบงเบ GUI เปเบฅเบฐเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ—เบตเปˆเบ”เบตเป€เบฅเบตเบ”.

เบ‚เปเป‰เป€เบชเบเบ‚เบญเบ‡ SymmetricDS

เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเปเบฅเบฐเบ—เบดเบ”เบ—เบฒเบ‡เบ‚เบญเบ‡ replication เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เปƒเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป‚เบ”เบเบœเปˆเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ SQL เป€เบžเบทเปˆเบญเป‚เบซเบฅเบ”เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบฅเบฒเบเบเบฒเบ™, เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบชเบฐเบ”เบงเบ.
เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบซเบ™เป‰เบฒเป€เบšเบทเปˆเบญเป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบชเบฐเบ„เบดเบšเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡ SQL เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเปเบฅเบฐเบ—เบดเบ”เบ—เบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡.
เบกเบตเบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เบ—เบตเปˆเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™เบšเบฑเบ™เบ—เบถเบ, เปเบฅเบฐเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเบฑเบ”เบฅเบฐเบšเบฝเบšเป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบเป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบกเบฑเบ™เปƒเบŠเป‰เบžเบทเป‰เบ™เบ—เบตเปˆเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเปเบฒเบฅเบฑเบš SymmetricDS

SymmetricDS เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบšเบšเบชเบญเบ‡เบ—เบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡, เบชเบฒเบก, เบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบซเบผเบฒเบเบžเบฑเบ™เป‚เบซเบ™เบ”เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เป€เบฅเบทเป‰เบกเบ„เบทเบ™เปเบฅเบฐ synchronize เป„เบŸเบฅเปŒ. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เบซเบผเบฒเบเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฒเบ”, เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบŸเบทเป‰เบ™เบ•เบปเบงเบ‚เปเป‰เบกเบนเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเป„เบฅเบเบฐเป€เบงเบฅเบฒเบขเบธเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ node, เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเปเบฅเบฐเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡ nodes เบœเปˆเบฒเบ™ HTTPS, เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ‚เปเป‰เบ‚เบฑเบ”เปเบเปˆเบ‡เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบŠเบธเบ”เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบš, เปเบฅเบฐเบญเบทเปˆเบ™เป† SymmetricDS เบ›เบฐเบ•เบดเบšเบฑเบ”. เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ”เป†, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบซเบฅเบฒเบเบซเบฅเบฒเบ, เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบ, เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบ, เบเบฒเบ™เปเบˆเบเบขเบฒเบ, เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปเบฅเบฐเบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ—เบปเปˆเบงเปเบžเบฅเบฐเบ•เบฐเบŸเบญเบก.

เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆเป€เบˆเบปเป‰เบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ เบ„เบนเปˆเบกเบทเบ”เปˆเบงเบ™ เป‚เบ”เบ SymmetricDS. IN เบ„เบนเปˆโ€‹เบกเบทโ€‹เบœเบนเป‰โ€‹เปƒเบŠเป‰ เบญเบฐเบ—เบดเบšเบฒเบเบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ•เปˆเบฒเบ‡เป†เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบเบฑเบš SymmetricDS.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™