PostgreSQL เช…เชจเซ‡ MySQL เชตเชšเซเชšเซ‡ เช•เซเชฐเซ‹เชธ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ

PostgreSQL เช…เชจเซ‡ MySQL เชตเชšเซเชšเซ‡ เช•เซเชฐเซ‹เชธ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ

เชนเซเช‚ PostgreSQL เช…เชจเซ‡ MySQL เชตเชšเซเชšเซ‡ เช•เซเชฐเซ‹เชธ-เชฐเชฟเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชคเซ‡เชฎเชœ เชฌเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐเซเชธ เชตเชšเซเชšเซ‡ เช•เซเชฐเซ‹เชธ-เชฐเชฟเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชชเชฆเซเชงเชคเชฟเช“เชจเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เช†เชชเซ€เชถ. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เช•เซเชฐเซ‹เชธ-เชฐเชฟเชชเซเชฒเชฟเช•เซ‡เชŸเซ‡เชก เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธเชจเซ‡ เชธเชœเชพเชคเซ€เชฏ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡ เชเช• RDBMS เชธเชฐเซเชตเชฐเชฅเซ€ เชฌเซ€เชœเชพเชฎเชพเช‚ เช–เชธเซ‡เชกเชตเชพเชจเซ€ เช…เชจเซเช•เซ‚เชณ เชชเชฆเซเชงเชคเชฟ เช›เซ‡.

PostgreSQL เช…เชจเซ‡ MySQL เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชฐเชฟเชฒเซ‡เชถเชจเชฒ เช—เชฃเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชตเชงเชพเชฐเชพเชจเชพ เชเช•เซเชธเซเชŸเซ‡เชจเซเชถเชจเซเชธ เชธเชพเชฅเซ‡ เชคเซ‡เช“ NoSQL เช•เซเชทเชฎเชคเชพเช“ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡. เช…เชนเซ€ เช†เชชเชฃเซ‡ เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชเชธเช•เซเชฏเซเชเชฒ เช…เชจเซ‡ เชฎเชพเชฏเชเชธเช•เซเชฏเซเชเชฒ เชตเชšเซเชšเซ‡ เชฐเซ€เชฒเซ‡เชถเชจเชฒ เชกเซ€เชฌเซ€เชเชฎเชเชธ เชชเชฐเชฟเชชเซเชฐเซ‡เช•เซเชทเซเชฏเชฎเชพเช‚ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเซ€เชถเซเช‚.

เช…เชฎเซ‡ เชธเชฎเช—เซเชฐ เช†เช‚เชคเชฐเชฟเช• เช•เชพเชฐเซเชฏเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ€เชถเซเช‚ เชจเชนเซ€เช‚, เชซเช•เซเชค เชฎเซ‚เชณเชญเซ‚เชค เชธเชฟเชฆเซเชงเชพเช‚เชคเซ‹เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ€เชถเซเช‚ เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เชคเชฎเชจเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐเซเชธ, เชซเชพเชฏเชฆเชพ, เชฎเชฐเซเชฏเชพเชฆเชพเช“ เช…เชจเซ‡ เช‰เชชเชฏเซ‹เช—เชจเชพ เช•เชฟเชธเซเชธเชพเช“ เชตเชšเซเชšเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช—เซ‹เช เชตเชตเชพเชจเซ‹ เช–เซเชฏเชพเชฒ เช†เชตเซ‡.

เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชฌเซ‡ เชธเชฐเช–เชพ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐ เชตเชšเซเชšเซ‡เชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช•เชพเช‚ เชคเซ‹ เชฌเชพเชˆเชจเชฐเซ€ เชฎเซ‹เชกเชฎเชพเช‚ เช…เชฅเชตเชพ เชฎเชพเชธเซเชŸเชฐ (เช‰เชฐเซเชซเซ‡ เชชเซเชฐเช•เชพเชถเช•, เชฎเชพเชธเซเชŸเชฐ เช…เชฅเชตเชพ เชธเช•เซเชฐเชฟเชฏ) เช…เชจเซ‡ เช—เซเชฒเชพเชฎ (เชธเชฌเซเชธเซเช•เซเชฐเชพเช‡เชฌเชฐ, เชธเซเชŸเซ‡เชจเซเชกเชฌเชพเชฏ เช…เชฅเชตเชพ เชจเชฟเชทเซเช•เซเชฐเชฟเชฏ) เชตเชšเซเชšเซ‡เชจเซ€ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‹ เชนเซ‡เชคเซ เชธเซเชฒเซ‡เชต เชฌเชพเชœเซ เชชเชฐ เชฎเชพเชธเซเชŸเชฐ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เชฐเซ€เช…เชฒ-เชŸเชพเช‡เชฎ เชจเช•เชฒ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชจเซ‹ เช›เซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชกเซ‡เชŸเชพ เชฎเชพเชธเซเชŸเชฐเชฅเซ€ เชธเซเชฒเซ‡เชตเชฎเชพเช‚ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เชฅเชพเชฏ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชธเช•เซเชฐเชฟเชฏเชฅเซ€ เชจเชฟเชทเซเช•เซเชฐเชฟเชฏเชฎเชพเช‚, เช•เชพเชฐเชฃ เช•เซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชซเช•เซเชค เชเช• เชœ เชฆเชฟเชถเชพเชฎเชพเช‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เชคเชฎเซ‡ เชฌเช‚เชจเซ‡ เชฆเชฟเชถเชพเชฎเชพเช‚ เชฌเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชตเชšเซเชšเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชœเซ‡เชฅเซ€ เชกเซ‡เชŸเชพ เชธเช•เซเชฐเชฟเชฏ-เชธเช•เซเชฐเชฟเชฏ เช—เซ‹เช เชตเชฃเซ€เชฎเชพเช‚ เชธเซเชฒเซ‡เชตเชฎเชพเช‚เชฅเซ€ เชฎเชพเชธเซเชŸเชฐเชฎเชพเช‚ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เชฅเชพเชฏ. เช† เชฌเชงเซเช‚, เช•เซ‡เชธเซเช•เซ‡เชกเซ€เช‚เช— เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเชนเชฟเชค, เชฌเซ‡ เช…เชฅเชตเชพ เชตเชงเซ เชธเชฎเชพเชจ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐเซเชธ เชตเชšเซเชšเซ‡ เชถเช•เซเชฏ เช›เซ‡. เชธเช•เซเชฐเชฟเชฏ-เชธเช•เซเชฐเชฟเชฏ เช…เชฅเชตเชพ เชธเช•เซเชฐเชฟเชฏ-เชจเชฟเชทเซเช•เซเชฐเชฟเชฏ เช—เซ‹เช เชตเชฃเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค, เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เช—เซ‹เช เชตเชฃเซ€เชฎเชพเช‚ เช†เชตเซ€ เช•เซเชทเชฎเชคเชพเช“เชจเซ€ เช‰เชชเชฒเชฌเซเชงเชคเชพ เช…เชฅเชตเชพ เชฌเชพเชนเซเชฏ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเซ‹เชฒเซเชฏเซเชถเชจเซเชธ เช…เชจเซ‡ เชนเชพเชฒเชจเชพ เชŸเซเชฐเซ‡เชก-เช“เชซเชจเชพ เช‰เชชเชฏเซ‹เช— เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡.

เชตเชฐเซเชฃเชตเซ‡เชฒ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชตเชฟเชตเชฟเชง เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐเซเชธ เชตเชšเซเชšเซ‡ เชถเช•เซเชฏ เช›เซ‡. เชธเชฐเซเชตเชฐเชจเซ‡ เชฌเซ€เชœเชพ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐเชฎเชพเช‚เชฅเซ€ เชจเช•เชฒ เช•เชฐเชพเชฏเซ‡เชฒ เชกเซ‡เชŸเชพ เชธเซเชตเซ€เช•เชพเชฐเชตเชพ เชฎเชพเชŸเซ‡ เช—เซ‹เช เชตเซ€ เชถเช•เชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชนเชœเซ เชชเชฃ เชจเช•เชฒ เช•เชฐเชพเชฏเซ‡เชฒ เชกเซ‡เชŸเชพเชจเชพ เชฐเซ€เช…เชฒ-เชŸเชพเช‡เชฎ เชธเซเชจเซ‡เชชเชถเซ‹เชŸ เชœเชพเชณเชตเซ€ เชถเช•เซ‡ เช›เซ‡. MySQL เช…เชจเซ‡ PostgreSQL เช†เชฎเชพเช‚เชจเซ€ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹ เช‡เชจ-เชนเชพเช‰เชธ เช…เชฅเชตเชพ เชคเซƒเชคเซ€เชฏ-เชชเช•เซเชท เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เชฆเซเชตเชพเชฐเชพ เช“เชซเชฐ เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เชฌเชพเชˆเชจเชฐเซ€ เชฒเซ‹เช— เชชเชฆเซเชงเชคเชฟเช“, เชกเชฟเชธเซเช• เชฒเซ‹เช•เซ€เช‚เช— เช…เชจเซ‡ เชธเซเชŸเซ‡เชŸเชฎเซ‡เชจเซเชŸ- เช…เชจเซ‡ เชฐเซ‹-เช†เชงเชพเชฐเชฟเชค เชชเชฆเซเชงเชคเชฟเช“เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡.

MySQL เช…เชจเซ‡ PostgreSQL เชตเชšเซเชšเซ‡เชจเซ€ เช•เซเชฐเซ‹เชธ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชเช• เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐเชฅเซ€ เชฌเซ€เชœเชพเชฎเชพเช‚ เชเช• เชตเช–เชคเชจเชพ เชธเซเชฅเชณเชพเช‚เชคเชฐ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เช† เชกเซ‡เชŸเชพเชฌเซ‡เช เชตเชฟเชตเชฟเชง เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเซ‡เชฎเชจเซ‡ เชธเซ€เชงเซเช‚ เชฒเชฟเช‚เช• เช•เชฐเชตเซเช‚ เชถเช•เซเชฏ เชจเชฅเซ€. เชกเซ‡เชŸเชพ เชเช•เซเชธเชšเซ‡เชจเซเชœ เชธเซเชฅเชพเชชเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชฌเชพเชนเซเชฏ เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชŸเซ‚เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ pg_chameleon.

pg_chameleon เชถเซเช‚ เช›เซ‡

pg_chameleon เช เชชเชพเชฏเชฅเซ‹เชจ 3 เชฎเชพเช‚ MySQL เชฅเซ€ PostgreSQL เชธเซเชงเซ€เชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเชฟเชธเซเชŸเชฎ เช›เซ‡. เชคเซ‡ เช“เชชเชจ เชธเซ‹เชฐเซเชธ mysql-เชฐเชฟเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เชชเชพเชฏเชฅเซ‹เชจเชฎเชพเช‚ เชชเชฃ. เชชเช‚เช•เซเชคเชฟเชจเซ€ เช›เชฌเซ€เช“ MySQL เช•เซ‹เชทเซเชŸเช•เซ‹เชฎเชพเช‚เชฅเซ€ เช•เชพเชขเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ PostgreSQL เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ JSONB เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชคเชฐเซ€เช•เซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฅเชพเชฏ เช›เซ‡, เช…เชจเซ‡ เชชเช›เซ€ pl/pgsql เชซเช‚เช•เซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชกเชฟเช•เซเชฐเชฟเชชเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ PostgreSQL เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชชเซเชจเชƒเช‰เชคเซเชชเชพเชฆเชฟเชค เชฅเชพเชฏ เช›เซ‡.

pg_chameleon เชจเซ€ เชตเชฟเชถเซ‡เชทเชคเชพเช“

เชเช• เชœ เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚เชฅเซ€ เชฌเชนเซเชตเชฟเชง MySQL เชธเซเช•เซ€เชฎเชพ เชเช•-เชฅเซ€-เช˜เชฃเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชเช• เชฒเช•เซเชทเซเชฏ เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชเชธเช•เซเชฏเซเชเชฒ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชจเช•เชฒ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.
เชธเซเชคเซเชฐเซ‹เชค เช…เชจเซ‡ เชฒเช•เซเชทเซเชฏ เชธเซเช•เซ€เชฎเชพ เชจเชพเชฎเซ‹ เชธเชฎเชพเชจ เชนเซ‹เชˆ เชถเช•เชคเชพ เชจเชฅเซ€.
เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชกเซ‡เชŸเชพ เช•เชพเชธเซเช•เซ‡เชกเซ‡เชก MySQL เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชฎเชพเช‚เชฅเซ€ เชฎเซ‡เชณเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡.
เช•เซ‹เชทเซเชŸเช•เซ‹ เช•เซ‡ เชœเซ‡ เชจเช•เชฒ เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€ เช…เชฅเชตเชพ เชญเซ‚เชฒเซ‹ เช‰เชคเซเชชเชจเซเชจ เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€ เชคเซ‡ เชฌเชพเช•เชพเชค เช›เซ‡.
เชฆเชฐเซ‡เช• เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช•เชพเชฐเซเชฏ เชกเชฟเชฎเชจ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เชฅเชพเชฏ เช›เซ‡.
YAML-เช†เชงเชพเชฐเชฟเชค เชชเชฐเชฟเชฎเชพเชฃเซ‹ เช…เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเซ‹ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ.

เช‰เชฆเชพเชนเชฐเชฃ:

เชนเซ‹เชธเซเชŸ
เชตเซ€เชเชฎ 1
เชตเซ€เชเชฎ 2

OS เชธเช‚เชธเซเช•เชฐเชฃ
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

เชกเซ€เชฌเซ€ เชธเชฐเซเชตเชฐ เชธเช‚เชธเซเช•เชฐเชฃ
เชฎเชพเชฏเชเชธเช•เซเชฏเซเชเชฒ 5.7.26
PostgreSQL 10.5

เชกเซ€เชฌเซ€ เชชเซ‹เชฐเซเชŸ
3306
5433

เช†เช‡เชชเซ€ เชธเชฐเชจเชพเชฎเซเช‚
192.168.56.102
192.168.56.106

เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, pg_chameleon เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฎ เชœเชฐเซ‚เชฐเซ€ เช˜เชŸเช•เซ‹ เชคเซˆเชฏเชพเชฐ เช•เชฐเซ‹. เช† เช‰เชฆเชพเชนเชฐเชฃ เชชเชพเชฏเชฅเซ‹เชจ 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 เชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเชตเชพ เช…เชจเซ‡ เชกเชฟเชซเซ‹เชฒเซเชŸ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เช“ เช…เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒเซ‹ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ set_configuration_files เชฆเชฒเซ€เชฒ เชธเชพเชฅเซ‡ pg_chameleon (เช•เชพเชšเช‚เชกเซ‹ เชเช• เช†เชฆเซ‡เชถ เช›เซ‡) เช•เซ‰เชฒ เช•เชฐเซ€เช เช›เซ€เช.

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

เชนเชตเซ‡ เช†เชชเชฃเซ‡ config-example.yml เชจเซ€ เชจเช•เชฒ default.yml เชคเชฐเซ€เช•เซ‡ เชฌเชจเชพเชตเซ€เช เช›เซ€เช เชœเซ‡เชฅเซ€ เชคเซ‡ เชกเชฟเชซเซ‹เชฒเซเชŸ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒ เชฌเชจเซ€ เชœเชพเชฏ. เช† เช‰เชฆเชพเชนเชฐเชฃ เชฎเชพเชŸเซ‡ เชจเชฎเซ‚เชจเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ เชจเซ€เชšเซ‡ เช†เชชเซ‡เชฒ เช›เซ‡.

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

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

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

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

เช† เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒ เช เชจเชฎเซ‚เชจเชพ pg_chameleon เชซเชพเชˆเชฒ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชธเซเชคเซเชฐเซ‹เชค เช…เชจเซ‡ เชฒเช•เซเชทเซเชฏ เชตเชพเชคเชพเชตเชฐเชฃเชจเซ‡ เช…เชจเซเชฐเซ‚เชช เชจเชœเซ€เชตเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชธเชพเชฅเซ‡, เช…เชจเซ‡ เชจเซ€เชšเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒเชจเชพ เชตเชฟเชตเชฟเชง เชตเชฟเชญเชพเช—เซ‹เชจเซ€ เชเชพเช‚เช–เซ€ เช›เซ‡.

default.yml เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเชฎเชพเช‚ เชตเซˆเชถเซเชตเชฟเช• เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชจเซ‹ เชเช• เชตเชฟเชญเชพเช— เช›เซ‡, เชœเซเชฏเชพเช‚ เชคเชฎเซ‡ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชจเซ‡ เชฎเซ‡เชจเซ‡เชœ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชœเซ‡เชฎ เช•เซ‡ เชฒเซ‰เช• เชซเชพเช‡เชฒเชจเซเช‚ เชธเซเชฅเชพเชจ, เชฒเซ‰เช—เชจเซเช‚ เชธเซเชฅเชพเชจ, เชฒเซ‰เช—เซเชธ เชฎเชพเชŸเซ‡เชจเซ‹ เชธเช‚เช—เซเชฐเชน เชธเชฎเชฏเช—เชพเชณเซ‹ เชตเช—เซ‡เชฐเซ‡. เช†เช—เชณ เชŸเชพเช‡เชช เช“เชตเชฐเชฐเชพเช‡เชก เชตเชฟเชญเชพเช— เช†เชตเซ‡ เช›เซ‡, เชœเซเชฏเชพเช‚ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช“เชตเชฐเชฐเชพเช‡เชกเชฟเช‚เช— เชชเซเชฐเช•เชพเชฐเซ‹ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎเซ‹เชจเซ‹ เชธเชฎเซ‚เชน. เช‰เชฆเชพเชนเชฐเชฃ เชเช• เชชเซเชฐเช•เชพเชฐ เช“เชตเชฐเชฐเชพเช‡เชกเชฟเช‚เช— เชจเชฟเชฏเชฎ เชฎเชพเชŸเซ‡ เชกเชฟเชซเซ‹เชฒเซเชŸ เช›เซ‡ เชœเซ‡ tinyint(1) เชจเซ‡ เชฌเซเชฒเชฟเชฏเชจ เชฎเซ‚เชฒเซเชฏเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เช†เช—เชณเชจเชพ เชตเชฟเชญเชพเช—เชฎเชพเช‚, เช…เชฎเซ‡ เชฒเช•เซเชทเซเชฏ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฃ เชตเชฟเช—เชคเซ‹เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€เช เช›เซ€เช. เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช† เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชเชธเช•เซเชฏเซเชเชฒ เชกเซ‡เชŸเชพเชฌเซ‡เช เช›เซ‡, เชจเชฟเชฏเซเช•เซเชค pg_conn. เช›เซ‡เชฒเซเชฒเชพ เชตเชฟเชญเชพเช—เชฎเชพเช‚, เช…เชฎเซ‡ เชธเซเชฐเซ‹เชค เชกเซ‡เชŸเชพ เชธเซ‚เชšเชตเซ€เช เช›เซ€เช, เชเชŸเชฒเซ‡ เช•เซ‡, เชธเซเชฐเซ‹เชค เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเชพ เช•เชจเซ‡เช•เซเชถเชจ เชชเชฐเชฟเชฎเชพเชฃเซ‹, เชธเซเชฐเซ‹เชค เช…เชจเซ‡ เชฒเช•เซเชทเซเชฏ เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธ เชตเชšเซเชšเซ‡เชจเซ€ เชฎเซ‡เชชเชฟเช‚เช— เชฏเซ‹เชœเชจเชพ, เช•เซ‹เชทเซเชŸเช•เซ‹ เช•เซ‡ เชœเซ‡เชจเซ‡ เช›เซ‹เชกเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชฐเชพเชน เชœเซ‹เชตเชพเชจเซ‹ เชธเชฎเชฏ, เชฎเซ‡เชฎเชฐเซ€, เชชเซ‡เช•เซ‡เชœ เช•เชฆ. เชจเซ‹เช‚เชง เช•เชฐเซ‹ เช•เซ‡ "เชธเซเชฐเซ‹เชคเซ‹" เชฌเชนเซเชตเชšเชจ เช›เซ‡, เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เชฅเชพเชฏ เช›เซ‡ เช•เซ‡ เช†เชชเชฃเซ‡ เชเช• เชฅเซ€ เชตเชงเซ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชฒเช•เซเชทเซเชฏ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชฌเชนเซเชตเชฟเชง เชธเซเชคเซเชฐเซ‹เชค เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธ เช‰เชฎเซ‡เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช.

เช‰เชฆเชพเชนเชฐเชฃ เชกเซ‡เชŸเชพเชฌเซ‡เช world_x เชฎเชพเช‚ เชชเช‚เช•เซเชคเชฟเช“ เชธเชพเชฅเซ‡ 4 เช•เซ‹เชทเซเชŸเช•เซ‹ เช›เซ‡ เชœเซ‡ MySQL เชธเชฎเซเชฆเชพเชฏ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชคเชฐเซ€เช•เซ‡ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ เช…เชนเซ€เช‚. เชจเชฎเซ‚เชจเชพ เชกเซ‡เชŸเชพเชฌเซ‡เช เชŸเชพเชฐ เช…เชจเซ‡ เชธเช‚เช•เซเชšเชฟเชค เช†เชฐเซเช•เชพเช‡เชต เชคเชฐเซ€เช•เซ‡ เชชเช‚เช•เซเชคเชฟเช“ เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เช†เชฏเชพเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซ‚เชšเชจเชพเช“ เชธเชพเชฅเซ‡ เช†เชตเซ‡ เช›เซ‡.

MySQL เช…เชจเซ‡ PostgreSQL เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธเชฎเชพเช‚, usr_replica เชจเชพเชฎเชจเชพ เชœ เชจเชพเชฎ เชธเชพเชฅเซ‡ เชตเชฟเชถเชฟเชทเซเชŸ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. MySQL เชฎเชพเช‚, เชคเซ‡เชจเซ‡ เชคเชฎเชพเชฎ เชจเช•เชฒ เช•เชฐเซ‡เชฒ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเชพ เชตเชงเชพเชฐเชพเชจเชพ เชตเชพเช‚เชšเชตเชพเชจเชพ เช…เชงเชฟเช•เชพเชฐเซ‹ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

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

PostgreSQL เชฌเชพเชœเซ เชชเชฐ, เชเช• db_replica เชกเซ‡เชŸเชพเชฌเซ‡เช เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡ MySQL เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚เชฅเซ€ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชธเซเชตเซ€เช•เชพเชฐเชถเซ‡. PostgreSQL เชฎเชพเช‚ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ usr_replica เช เชฌเซ‡ เชธเซเช•เซ€เชฎเชพ, pgworld_x เช…เชจเซ‡ sch_chameleon เชจเชพ เชฎเชพเชฒเชฟเช• เชคเชฐเซ€เช•เซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เช—เซ‹เช เชตเซ‡เชฒ เช›เซ‡, เชœเซ‡ เช…เชจเซเช•เซเชฐเชฎเซ‡ เชตเชพเชธเซเชคเชตเชฟเช• เชจเช•เชฒ เช•เซ‹เชทเซเชŸเช•เซ‹ เช…เชจเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชจเชฟเชฐเซเชฆเซ‡เชถเชฟเช•เชพ เช•เซ‹เชทเซเชŸเช•เซ‹ เชงเชฐเชพเชตเซ‡ เช›เซ‡. create_replica_schema เชฆเชฒเซ€เชฒ เช†เชชเซ‹เช†เชช เช—เซ‹เช เชตเชฃเซ€ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡, เชœเซ‡เชฎ เชคเชฎเซ‡ เชจเซ€เชšเซ‡ เชœเซ‹เชถเซ‹.

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

MySQL เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‡ เชจเซ€เชšเซ‡ เชฌเชคเชพเชตเซเชฏเชพ เชชเซเชฐเชฎเชพเชฃเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชฎเชพเชŸเซ‡ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชชเชฐเชฟเชฎเชพเชฃ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชธเชพเชฅเซ‡ เช—เซ‹เช เชตเซ‡เชฒ เช›เซ‡. เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เชชเซเชฐเชญเชพเชตเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐเชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡.

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

เชนเชตเซ‡ เชฌเช‚เชจเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฃ เชคเชชเชพเชธเชตเซเช‚ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡ เชœเซ‡เชฅเซ€ pg_chameleon เช†เชฆเซ‡เชถเซ‹ เชšเชฒเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เช•เซ‹เชˆ เชธเชฎเชธเซเชฏเชพ เชจ เช†เชตเซ‡.

PostgreSQL เชจเซ‹เชก เชชเชฐ:

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

MySQL เชจเซ‹เชก เชชเชฐ:

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

เช†เช—เชณเชจเชพ เชคเซเชฐเชฃ pg_chameleon (เช•เชพเชšเช‚เชกเซ‹) เช†เชฆเซ‡เชถเซ‹ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเซˆเชฏเชพเชฐ เช•เชฐเซ‡ เช›เซ‡, เชธเซเชคเซเชฐเซ‹เชค เช‰เชฎเซ‡เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡. pg_chameleon เชฎเชพเชŸเซ‡ create_replica_schema เชฆเชฒเซ€เชฒ เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชเชธเช•เซเชฏเซเชเชฒ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชกเชฟเชซเซ‹เชฒเซเชŸ เชธเซเช•เซ€เชฎเชพ (sch_chameleon) เช…เชจเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเซเช•เซ€เชฎเชพ (pgworld_x) เชฌเชจเชพเชตเซ‡ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ เช†เชชเชฃเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชšเชฐเซเชšเชพ เช•เชฐเซ€ เช›เซ‡. เชเชก_เชธเซ‹เชฐเซเชธ เชฆเชฒเซ€เชฒ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ (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 เชฎเชพเช‚ sync_tables เชฆเชฒเซ€เชฒเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ 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 เช†เชฆเซ‡เชถเซ‹ เชคเซ‡เชจเซ‹ เช…เช‚เชค เชนเชถเซ‡. เชฌเชงเชพ เชฒเช•เซเชทเซเชฏ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซ€ เชชเช‚เช•เซเชคเชฟเช“ เชจเช•เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡ เชคเซ‡เชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเซเชฏเชพ เชชเช›เซ€ เช†เชฆเซ‡เชถเซ‹เชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎ เชธเซเชคเซเชฐเซ‹เชค เชกเซ‡เชŸเชพเชฌเซ‡เช เช…เชฅเชตเชพ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชฏเซ‹เชœเชจเชพ (sch_chameleon) เชจเชพ เชธเช‚เชฆเชฐเซเชญเซ‹ เชตเชฟเชจเชพ เชธเชฐเชธ เชฐเซ€เชคเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค PostgreSQL เชกเซ‡เชŸเชพเชฌเซ‡เช เชนเชถเซ‡.

$> 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 เชฎเชพเชŸเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ‹

เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‡ MySQL เชฅเซ€ PostgreSQL เชฎเชพเช‚ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ pg_chameleon เชฎเชพเช‚ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชชเชฆเซเชงเชคเชฟ เช‰เชคเซเชคเชฎ เช›เซ‡. เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชจเซเช•เชธเชพเชจ เช เช›เซ‡ เช•เซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชซเช•เซเชค เชเช•-เชฎเชพเชฐเซเช—เซ€ เช›เซ‡, เชคเซ‡เชฅเซ€ เชกเซ‡เชŸเชพเชฌเซ‡เช เชตเซเชฏเชพเชตเชธเชพเชฏเชฟเช•เซ‹ เชธเซเชฅเชณเชพเช‚เชคเชฐ เชธเชฟเชตเชพเชฏ เช…เชจเซเชฏ เช•เซ‹เชˆเชชเชฃ เชตเชธเซเชคเซ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเชพ เชนเซ‹เชฏ เชคเซ‡เชตเซ€ เชถเช•เซเชฏเชคเชพ เชจเชฅเซ€. เชชเชฐเช‚เชคเซ เชตเชจ-เชตเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ€ เชธเชฎเชธเซเชฏเชพ เช…เชจเซเชฏ เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชŸเซ‚เชฒ - SymmetricDS เชธเชพเชฅเซ‡ เช‰เช•เซ‡เชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชฎเชพเช‚ เชตเชงเซ เชตเชพเช‚เชšเซ‹ เช…เชนเซ€เช‚. เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจ เชฎเชฆเชฆ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชนเซ€เช‚.

SymmetricDS เชจเซ€ เชเชพเช‚เช–เซ€

SymmetricDS เช เชเช• เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชŸเซ‚เชฒ เช›เซ‡ เชœเซ‡ เช•เซ‹เชˆเชชเชฃ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‡ เช•เซ‹เชˆเชชเชฃ เช…เชจเซเชฏ เชธเชพเชฎเชพเชจเซเชฏ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชจเช•เชฒ เช•เชฐเซ‡ เช›เซ‡: Oracle, MongoDB, PostgreSQL, MySQL, SQL เชธเชฐเซเชตเชฐ, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird เช…เชจเซ‡ เช…เชจเซเชฏ เช•เซเชฒเชพเช‰เชก เชกเซ‡เชŸเชพเชฌเซ‡เช เช‰เชฆเชพเชนเชฐเชฃเซ‹, เชฆเชพ.เชค. เช…เชจเซ‡ Redshift, เชเชเซเชฏเซเชฐ, เชตเช—เซ‡เชฐเซ‡ เช‰เชชเชฒเชฌเซเชง เชธเซเชตเชฟเชงเชพเช“: เชกเซ‡เชŸเชพเชฌเซ‡เช เช…เชจเซ‡ เชซเชพเช‡เชฒ เชธเชฟเช‚เช•เซเชฐเซ‹เชจเชพเช‡เชเซ‡เชถเชจ, เชฎเชฒเซเชŸเชฟ-เชฎเชพเชธเซเชŸเชฐ เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ, เชซเชฟเชฒเซเชŸเชฐ เชธเชฟเช‚เช•เซเชฐเซ‹เชจเชพเช‡เชเซ‡เชถเชจ, เชŸเซเชฐเชพเชจเซเชธเชซเซ‹เชฐเซเชฎเซ‡เชถเชจ เช…เชจเซ‡ เช…เชจเซเชฏ. เช† เชœเชพเชตเชพ เชŸเซ‚เชฒ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ JRE เช…เชฅเชตเชพ JDK (เชธเช‚เชธเซเช•เชฐเชฃ 8.0 เช…เชฅเชตเชพ เช‰เชšเซเชšเชคเชฐ) เชจเซเช‚ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชชเซเชฐเช•เชพเชถเชจ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เช…เชนเซ€เช‚, เชธเซเชฐเซ‹เชค เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชŸเซเชฐเชฟเช—เชฐเซเชธเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชฌเซ‡เชšเชจเชพ เชฐเซ‚เชชเชฎเชพเช‚ เชฏเซ‹เช—เซเชฏ เชฒเช•เซเชทเซเชฏ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‡ เชฎเซ‹เช•เชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡.

SymmetricDS เชฒเช•เซเชทเชฃเซ‹

เชŸเซ‚เชฒ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชธเซเชตเชคเช‚เชคเซเชฐ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡ เชฌเซ‡ เช•เซ‡ เชคเซ‡เชฅเซ€ เชตเชงเซ เช…เชฒเช— เช…เชฒเช— เชกเซ‡เชŸเชพเชฌเซ‡เช เชกเซ‡เชŸเชพเชจเซเช‚ เชตเชฟเชจเชฟเชฎเชฏ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.
เชฐเชฟเชฒเซ‡เชถเชจเชฒ เชกเซ‡เชŸเชพเชฌเซ‡เช เชกเซ‡เชŸเชพ เชšเซ‡เชจเซเชœ เชฐเซ‡เช•เซ‹เชฐเซเชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เช เชฅเชพเชฏ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ เชซเชพเช‡เชฒ เชธเชฟเชธเซเชŸเชฎ-เช†เชงเชพเชฐเชฟเชค เชกเซ‡เชŸเชพเชฌเซ‡เช เชซเชพเช‡เชฒ เชธเชฟเช‚เช•เซเชฐเซ‹เชจเชพเช‡เชเซ‡เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡.
เชจเชฟเชฏเชฎเซ‹เชจเชพ เชธเชฎเซ‚เชนเชจเชพ เช†เชงเชพเชฐเซ‡ เชชเซเชถ เช…เชจเซ‡ เชชเซเชฒ เชชเชฆเซเชงเชคเชฟเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฆเซเชตเชฟ-เชฎเชพเชฐเซเช—เซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ.
เชธเซเชฐเช•เซเชทเชฟเชค เช…เชจเซ‡ เช“เช›เซ€ เชฌเซ‡เชจเซเชกเชตเชฟเชกเซเชฅ เชจเซ‡เชŸเชตเชฐเซเช•เซเชธ เชชเชฐ เชกเซ‡เชŸเชพ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เชถเช•เซเชฏ เช›เซ‡.
เชœเซเชฏเชพเชฐเซ‡ เชจเซ‹เชกเซเชธ เชจเชฟเชทเซเชซเชณเชคเชพ เช…เชจเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เชธเช‚เช˜เชฐเซเชท เชฐเชฟเชเซ‹เชฒเซเชฏเซเชถเชจ เชชเช›เซ€ เชซเชฐเซ€เชฅเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡ เชคเซเชฏเชพเชฐเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชคเชฟ.
เช•เซเชฒเชพเช‰เชก เชธเซเชธเช‚เช—เชค เช…เชจเซ‡ เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ API.

เช‰เชฆเชพเชนเชฐเชฃ:

SymmetricDS เชฌเซ‡เชฎเชพเช‚เชฅเซ€ เชเช• เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเซ€ เชถเช•เชพเชฏ เช›เซ‡:
เชเช• เชฎเซเช–เซเชฏ (เชชเชฟเชคเซƒ) เชจเซ‹เชก เช•เซ‡ เชœเซ‡ เชฌเซ‡ เชธเซเชฒเซ‡เชต (เชฌเชพเชณเช•) เชจเซ‹เชกเซเชธ เชตเชšเซเชšเซ‡ เชกเซ‡เชŸเชพ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซเช‚ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชฏ เชฐเซ€เชคเซ‡ เชธเช‚เช•เชฒเชจ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฌเชพเชณ เช—เชพเช‚เช เซ‹ เชตเชšเซเชšเซ‡ เชธเช‚เชšเชพเชฐ เชซเช•เซเชค เชฎเชพเชคเชพเชชเชฟเชคเชพ เชฆเซเชตเชพเชฐเชพ เชœ เชฅเชพเชฏ เช›เซ‡.
เชธเช•เซเชฐเชฟเชฏ เชจเซ‹เชก (เชจเซ‹เชก 1) เชฎเชงเซเชฏเชธเซเชฅเซ€ เชตเชฟเชจเชพ เชฌเซ€เชœเชพ เชธเช•เซเชฐเชฟเชฏ เชจเซ‹เชก (เชจเซ‹เชก 2) เชธเชพเชฅเซ‡ เชจเช•เชฒ เชฎเชพเชŸเซ‡ เชตเชพเชคเชšเซ€เชค เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.

เชฌเช‚เชจเซ‡ เชตเชฟเช•เชฒเซเชชเซ‹เชฎเชพเช‚, เชชเซเชถ เช…เชจเซ‡ เชชเซเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชกเซ‡เชŸเชพ เชตเชฟเชจเชฟเชฎเชฏ เชฅเชพเชฏ เช›เซ‡. เช† เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชธเช•เซเชฐเชฟเชฏ-เชธเช•เซเชฐเชฟเชฏ เช—เซ‹เช เชตเชฃเซ€เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเชˆเชถเซเช‚. เชธเชฎเช—เซเชฐ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช˜เชฃเซ‹ เชธเชฎเชฏ เชฒเชพเช—เชถเซ‡, เชคเซ‡เชฅเซ€ เชคเชฎเชพเชฐเซเช‚ เชธเช‚เชถเซ‹เชงเชจ เช•เชฐเซ‹. เชจเซ‡เชคเซƒเชคเซเชตSymmetricDS เช‰เชชเช•เชฐเชฃ เชตเชฟเชถเซ‡ เชตเชงเซ เชœเชพเชฃเชตเชพ เชฎเชพเชŸเซ‡.

SymmetricDS เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเซเช‚ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡: zip เชซเชพเช‡เชฒเชจเซเช‚ เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชตเชฐเซเชเชจ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‹ เช…เชนเซ€เช‚เชฅเซ€ เช…เชจเซ‡ เชคเชฎเซ‡ เช‡เชšเซเช›เซ‹ เชคเซเชฏเชพเช‚ เชคเซ‡เชจเซ‡ เชฌเชนเชพเชฐ เช•เชพเชขเซ‹. เชจเซ€เชšเซ‡ เช†เชชเซ‡เชฒ เช•เซ‹เชทเซเชŸเช• เช† เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ SymmetricDS เชจเชพ เชธเซเชฅเชพเชชเชจ เชธเซเชฅเชพเชจ เช…เชจเซ‡ เชธเช‚เชธเซเช•เชฐเชฃ, เชคเซ‡เชฎเชœ เชกเซ‡เชŸเชพเชฌเซ‡เช เช†เชตเซƒเชคเซเชคเชฟเช“, Linux เช†เชตเซƒเชคเซเชคเชฟเช“, IP เชธเชฐเชจเชพเชฎเชพเช‚เช“ เช…เชจเซ‡ เชฌเช‚เชจเซ‡ เชจเซ‹เชกเซเชธ เชฎเชพเชŸเซ‡เชจเชพ เชชเซ‹เชฐเซเชŸ เชตเชฟเชถเซ‡ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡.

เชนเซ‹เชธเซเชŸ
เชตเซ€เชเชฎ 1
เชตเซ€เชเชฎ 2

OS เชธเช‚เชธเซเช•เชฐเชฃ
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

เชกเซ€เชฌเซ€ เชธเชฐเซเชตเชฐ เชธเช‚เชธเซเช•เชฐเชฃ
เชฎเชพเชฏเชเชธเช•เซเชฏเซเชเชฒ 5.7.26
PostgreSQL 10.5

เชกเซ€เชฌเซ€ เชชเซ‹เชฐเซเชŸ
3306
5832

เช†เช‡เชชเซ€ เชธเชฐเชจเชพเชฎเซเช‚
192.168.1.107
192.168.1.112

เชธเชชเซเชฐเชฎเชพเชฃ เชกเซ€เชเชธ เชธเช‚เชธเซเช•เชฐเชฃ
เชธเชชเซเชฐเชฎเชพเชฃ เชกเซ€เชเชธ 3.9
เชธเชชเซเชฐเชฎเชพเชฃ เชกเซ€เชเชธ 3.9

SymmetricDS เชธเซเชฅเชพเชชเชจ เชชเชพเชฅ
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS เชจเซ‹เชก เชจเชพเชฎ
เช•เซ‹เชฐเซเชช-000
เชธเซเชŸเซ‹เชฐ-001

เช…เชนเซ€เช‚ เช†เชชเชฃเซ‡ /usr/local/symmetric-server-3.9.20 เชฎเชพเช‚ SymmetricDS เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เช เช›เซ€เช, เช…เชจเซ‡ เชตเชฟเชตเชฟเชง เชธเชฌเชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เช เช…เชจเซ‡ เชซเชพเช‡เชฒเซ‹ เชคเซเชฏเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฅเชถเซ‡. เช…เชฎเชจเซ‡ เชธเซ‡เชฎเซเชชเชฒ เช…เชจเซ‡ เชเชจเซเชœเชฟเชจ เชธเชฌเชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชเชฎเชพเช‚ เชฐเชธ เช›เซ‡. เชธเซ‡เชฎเซเชชเชฒ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชจเซ‹เชก เชชเซเชฐเซ‹เชชเชฐเซเชŸเซ€เช เชธเชพเชฅเซ‡เชจเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒเซ‹เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡, เชคเซ‡เชฎเชœ เชคเชฎเซ‡ เชเชกเชชเชฅเซ€ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ€ เชถเช•เซ‹ เชคเซ‡ เชฎเชพเชŸเซ‡ SQL เชธเซเช•เซเชฐเชฟเชชเซเชŸเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡.

เชธเซ‡เชฎเซเชชเชฒ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เช†เชชเชฃเซ‡ เชจเซ‹เชก เชชเซเชฐเซ‹เชชเชฐเซเชŸเซ€เช เชธเชพเชฅเซ‡ เชคเซเชฐเชฃ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเซ‹ เชœเซ‹เชˆเช เช›เซ€เช - เชจเชพเชฎ เชšเซ‹เช•เซเช•เชธ เชธเซเช•เซ€เชฎเชฎเชพเช‚ เชจเซ‹เชกเชจเซ€ เชชเซเชฐเช•เซƒเชคเชฟ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡.

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

SymmetricDS เชชเชพเชธเซ‡ เชฎเซ‚เชณเชญเซ‚เชค 3-เชจเซ‹เชก เชกเชฟเชเชพเช‡เชจ (เชตเชฟเช•เชฒเซเชช 1) เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฎ เชœเชฐเซ‚เชฐเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเซ‹ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡ เชœ เชซเชพเช‡เชฒเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— 2-เชจเซ‹เชก เชกเชฟเชเชพเช‡เชจ (เชตเชฟเช•เชฒเซเชช 2) เชฎเชพเชŸเซ‡ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชœเชฐเซ‚เชฐเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเชจเซ‡ เชจเชฎเซ‚เชจเชพเช“ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚เชฅเซ€ vm1 เชนเซ‹เชธเซเชŸ เชชเชฐเชจเชพ เชเชจเซเชœเชฟเชจเชฎเชพเช‚ เชจเช•เชฒ เช•เชฐเซ‹. เชคเซ‡ เช†เชจเซ€ เชœเซ‡เชฎ เชฌเชนเชพเชฐ เช†เชตเซ‡ เช›เซ‡:

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

SymmetricDS เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เช† เชจเซ‹เชกเชจเซ‡ corp-000 เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เช•เชจเซ‡เช•เซเชถเชจ mysql jdbc เชกเซเชฐเชพเช‡เชตเชฐ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เชฅเชพเชฏ เช›เซ‡, เชœเซ‡ เช‰เชชเชฐเซ‹เช•เซเชค เช•เชจเซ‡เช•เซเชถเชจ เชธเซเชŸเซเชฐเชฟเช‚เช— เช…เชจเซ‡ เชฒเซ‹เช—เชฟเชจ เช“เชณเช–เชชเชคเซเชฐเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เช…เชฎเซ‡ replica_db เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เชธเซเช•เซ€เชฎเชพ เชฌเชจเชพเชตเชŸ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช•เซ‹เชทเซเชŸเช•เซ‹ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. sync.url เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เชเซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชจเซ‹เชกเชจเซ‹ เช•เซเชฏเชพเช‚ เชธเช‚เชชเชฐเซเช• เช•เชฐเชตเซ‹.

เชนเซ‹เชธเซเชŸ vm2 เชชเชฐ เชจเซ‹เชก 2 เชธเซเชŸเซ‹เชฐ-001 เชคเชฐเซ€เช•เซ‡ เช—เซ‹เช เชตเซ‡เชฒ เช›เซ‡ เช…เชจเซ‡ เชฌเชพเช•เซ€เชจเซ€ เชจเซ€เชšเซ‡ node.properties เชซเชพเช‡เชฒเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช›เซ‡. เชจเซ‹เชก เชธเซเชŸเซ‹เชฐ-001 เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชเชธเช•เซเชฏเซเชเชฒ เชกเซ‡เชŸเชพเชฌเซ‡เช เชšเชฒเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ pgdb_replica เช เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชกเซ‡เชŸเชพเชฌเซ‡เช เช›เซ‡. registration.url เชนเซ‹เชธเซเชŸ vm2 เชจเซ‡ เชนเซ‹เชธเซเชŸ vm1 เชจเซ‹ เชธเช‚เชชเชฐเซเช• เช•เชฐเชตเชพ เช…เชจเซ‡ เชคเซ‡เชจเซ€ เชชเชพเชธเซ‡เชฅเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชตเชฟเช—เชคเซ‹ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

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

เชชเซ‚เชฐเซเชฃ เชฅเชฏเซ‡เชฒ SymmetricDS เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เชฌเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐเซเชธ (เชฌเซ‡ เชจเซ‹เชกเซเชธ) เชตเชšเซเชšเซ‡ เชฆเซเชตเชฟ-เชฎเชพเชฐเซเช—เซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เช›เซ‡. เชจเซ€เชšเซ‡เชจเชพ เชชเช—เชฒเชพเช‚ เชนเซ‹เชธเซเชŸ vm1 (corp-000) เชชเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡ 4 เช•เซ‹เชทเซเชŸเช•เซ‹ เชธเชพเชฅเซ‡ เชเช• เช‰เชฆเชพเชนเชฐเชฃ เชธเซเช•เซ€เชฎเชพ เชฌเชจเชพเชตเชถเซ‡. เชชเช›เซ€ symadmin เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ create-sym-tables เชšเชฒเชพเชตเชตเชพเชฅเซ€ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€ เช•เซ‹เชทเซเชŸเช•เซ‹ เชฌเชจเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เชจเซ‹เชกเซเชธ เชตเชšเซเชšเซ‡เชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเชพ เชจเชฟเชฏเชฎเซ‹ เช…เชจเซ‡ เชฆเชฟเชถเชพ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฅเชถเซ‡. เช›เซ‡เชฒเซเชฒเซ‡, เชจเชฎเซ‚เชจเชพเชจเซ‹ เชกเซ‡เชŸเชพ เช•เซ‹เชทเซเชŸเช•เซ‹เชฎเชพเช‚ เชฒเซ‹เชก เชฅเชพเชฏ เช›เซ‡.

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

เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เช†เช‡เชŸเชฎ เช…เชจเซ‡ เช†เช‡เชŸเชฎ_เชธเซ‡เชฒเชฟเช‚เช—_เช•เชฟเช‚เชฎเชค เช•เซ‹เชทเซเชŸเช•เซ‹ corp-000 เชฅเซ€ เชธเซเชŸเซ‹เชฐ-001 เชธเซเชงเซ€ เชจเช•เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เช—เซ‹เช เชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชตเซ‡เชšเชพเชฃ เช•เซ‹เชทเซเชŸเช•เซ‹ (sale_transaction เช…เชจเซ‡ sale_return_line_item) เชธเซเชŸเซ‹เชฐ-001 เชฅเซ€ corp-000 เชฎเชพเช‚ เชจเช•เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เช—เซ‹เช เชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชนเชตเซ‡ เช…เชฎเซ‡ เชนเซ‹เชธเซเชŸ vm2 (store-001) เชชเชฐ PostgreSQL เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชเช• เชธเซเช•เซ€เชฎเชพ เชฌเชจเชพเชตเซ€เช เช›เซ€เช เชœเซ‡เชฅเซ€ เชคเซ‡เชจเซ‡ corp-000เชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซˆเชฏเชพเชฐ เช•เชฐเซ€ เชถเช•เชพเชฏ.

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

เช–เชพเชคเชฐเซ€ เช•เชฐเซ‹ เช•เซ‡ vm1 เชชเชฐเชจเชพ MySQL เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช•เซ‹เชทเซเชŸเช•เซ‹ เช…เชจเซ‡ SymmetricDS เช•เซ…เชŸเซ‡เชฒเซ‹เช— เช•เซ‹เชทเซเชŸเช•เซ‹ เช›เซ‡. เชจเซ‹เช‚เชง เช•เชฐเซ‹ เช•เซ‡ SymmetricDS เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชทเซเชŸเช•เซ‹ (sym_ เชธเชพเชฅเซ‡ เช‰เชชเชธเชฐเซเช—) เชนเชพเชฒเชฎเชพเช‚ เชซเช•เซเชค เชจเซ‹เชก corp-000 เชชเชฐ เชœ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชœ เชœเช—เซเชฏเชพเช เช…เชฎเซ‡ create-sym-tables เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเซเชฏเซ‹ เช›เซ‡ เช…เชจเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเซ€เชถเซเช‚. เช…เชจเซ‡ เชจเซ‹เชก เชธเซเชŸเซ‹เชฐ-001 เชชเชฐเชจเชพ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชตเชฟเชจเชพ เชฎเชพเชคเซเชฐ 4 เช‰เชฆเชพเชนเชฐเชฃ เช•เซ‹เชทเซเชŸเช•เซ‹ เชนเชถเซ‡.

เชฌเชงเชพ. เชจเซ€เชšเซ‡ เชฌเชคเชพเชตเซเชฏเชพ เชชเซเชฐเชฎเชพเชฃเซ‡ เชฌเช‚เชจเซ‡ เชจเซ‹เชกเซเชธ เชชเชฐ เชธเชฟเชฎ เชธเชฐเซเชตเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเซˆเชฏเชพเชฐ เช›เซ‡.

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

เชฒเซ‹เช— เชเชจเซเชŸเซเชฐเซ€เช“ เชฌเซ‡เช•เช—เซเชฐเชพเช‰เชจเซเชก เชฒเซ‹เช— เชซเชพเชˆเชฒ (symmetric.log) เชจเซ‡ เชกเชพเชฏเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชฒเซ‹เช— เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ SymmetricDS เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒ เช›เซ‡, เชคเซ‡เชฎเชœ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เช†เช‰เชŸเชชเซเชŸ เชชเชฐ. เชธเชฟเชฎ เชธเชฐเซเชตเชฐ เชนเชตเซ‡ เชจเซ‹เชก เชธเซเชŸเซ‹เชฐ-001 เชชเชฐ เชถเชฐเซ‚ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

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

เชœเซ‹ เชคเชฎเซ‡ vm2 เชนเซ‹เชธเซเชŸ เชชเชฐ sym เชธเชฐเซเชตเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชšเชฒเชพเชตเซ‹ เช›เซ‹, เชคเซ‹ เชคเซ‡ PostgreSQL เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ SymmetricDS เช•เซ‡เชŸเชฒเซ‹เช— เช•เซ‹เชทเซเชŸเช•เซ‹ เชชเชฃ เชฌเชจเชพเชตเชถเซ‡. เชœเซ‹ เชคเชฎเซ‡ เชฌเช‚เชจเซ‡ เชจเซ‹เชกเซเชธ เชชเชฐ เชธเชฟเชฎ เชธเชฐเซเชตเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชšเชฒเชพเชตเซ‹ เช›เซ‹, เชคเซ‹ เชคเซ‡เช“ เช•เซ‹เชฐเซเชช-000 เชฅเซ€ เชธเซเชŸเซ‹เชฐ-001 เชธเซเชงเซ€เชจเชพ เชกเซ‡เชŸเชพเชจเซ€ เชจเช•เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช•เชฌเซ€เชœเชพ เชธเชพเชฅเซ‡ เชธเช‚เช•เชฒเชจ เช•เชฐเซ‡ เช›เซ‡. เชœเซ‹ เชฅเซ‹เชกเซ€เช• เชธเซ‡เช•เชจเซเชกเซ‹ เชชเช›เซ€ เช†เชชเชฃเซ‡ เชฌเช‚เชจเซ‡ เชฌเชพเชœเซเชจเชพ เชคเชฎเชพเชฎ 4 เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€ เช•เชฐเซ€เช, เชคเซ‹ เช†เชชเชฃเซ‡ เชœเซ‹เชถเซเช‚ เช•เซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเชซเชณ เชนเชคเซ€. เช…เชฅเชตเชพ เชคเชฎเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ corp-001 เชฎเชพเช‚เชฅเซ€ เชจเซ‹เชก เชธเซเชŸเซ‹เชฐ-000 เชชเชฐ เชฌเซเชŸเชธเซเชŸเซเชฐเซ‡เชช เชฎเซ‹เช•เชฒเซ€ เชถเช•เซ‹ เช›เซ‹.

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

เช† เชธเชฎเชฏเซ‡, เชจเซ‹เชก เช•เซ‹เชฐเซเชช-000 (เชนเซ‹เชธเซเชŸ: vm1) เชชเชฐ MySQL เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เช†เช‡เชŸเชฎ เชŸเซ‡เชฌเชฒเชฎเชพเช‚ เชเช• เชจเชตเซ‹ เชฐเซ‡เช•เซ‹เชฐเซเชก เชฆเชพเช–เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชคเชฎเซ‡ เชจเซ‹เชก เชธเซเชŸเซ‹เชฐ-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 เชฎเชพเช‚ เชกเซ‡เชŸเชพ เช–เชธเซ‡เชกเชตเชพ เชฎเชพเชŸเซ‡ เชชเซเชถ เช“เชชเชฐเซ‡เชถเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชตเซ‡เชšเชพเชฃ_เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชเช• เชฐเซ‡เช•เซ‹เชฐเซเชก เชฆเชพเช–เชฒ เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เชšเช•เชพเชธเซ‹ เช•เซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเชซเชณ เช›เซ‡.

เชชเชฐเชฟเชฃเชพเชฎ.

เช…เชฎเซ‡ MySQL เช…เชจเซ‡ PostgreSQL เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธ เชตเชšเซเชšเซ‡เชจเชพ เช‰เชฆเชพเชนเชฐเชฃ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซ€ เชฆเซเชตเชฟ-เชฎเชพเชฐเซเช—เซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซเช‚ เชธเชซเชณ เชธเซ‡เชŸเช…เชช เชœเซ‹เชฏเซเช‚. เชจเชตเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช•เซ‹เชทเซเชŸเช•เซ‹ เชฎเชพเชŸเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช† เชชเช—เชฒเชพเช‚ เช…เชจเซเชธเชฐเซ‹: เช…เชฎเซ‡ เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช•เซ‹เชทเซเชŸเช• t1 เชฌเชจเชพเชตเซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡เชจเชพ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเชพ เชจเชฟเชฏเชฎเซ‹ เชจเซ€เชšเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡ เช—เซ‹เช เชตเซ€เช เช›เซ€เช. เช† เชฐเซ€เชคเซ‡ เช†เชชเชฃเซ‡ เชฎเชพเชคเซเชฐ corp-000 เชฅเซ€ store-001 เชธเซเชงเซ€เชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช—เซ‹เช เชตเซ€เช เช›เซ€เช.

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

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

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

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

เชชเช›เซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‡ เชธเซเช•เซ€เชฎเชพ เชซเซ‡เชฐเชซเชพเชฐเชจเซ€ เชธเซ‚เชšเชจเชพ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชธเชฟเช‚เช•-เชŸเซเชฐเชฟเช—เชฐเซเชธ เชฆเชฒเซ€เชฒ เชธเชพเชฅเซ‡ symadmin เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เชเช• เชจเชตเซเช‚ เชŸเซ‡เชฌเชฒ เช‰เชฎเซ‡เชฐเชตเซเช‚, เชœเซ‡ เชŸเซ‡เชฌเชฒ เชตเซเชฏเชพเช–เซเชฏเชพเช“เชจเซ‡ เชฎเซ‡เชช เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชŸเซเชฐเชฟเช—เชฐเซเชธเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชจเซ‹เชก เชธเซเชŸเซ‹เชฐ-001 เชชเชฐ เชธเซเช•เซ€เชฎเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ send-schema เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เช•เซ‹เชทเซเชŸเช• t1 เชจเซ€ เชจเช•เชฒ เช—เซ‹เช เชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

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

SymmetricDS เชจเชพ เชฒเชพเชญเซ‹

เชคเซเชฐเชฃ-เชจเซ‹เชก เช…เชฅเชตเชพ เชฌเซ‡-เชจเซ‹เชก เชธเชฐเซเช•เชฟเชŸ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชธเชพเชฅเซ‡ เชซเชพเช‡เชฒเซ‹เชจเชพ เชคเซˆเชฏเชพเชฐ เชธเซ‡เชŸ เชธเชนเชฟเชค เชธเชฐเชณ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เช…เชจเซ‡ เช—เซ‹เช เชตเชฃเซ€.
เชธเชฐเซเชตเชฐ, เชฒเซ‡เชชเชŸเซ‹เชช เช…เชจเซ‡ เชฎเซ‹เชฌเชพเช‡เชฒ เช‰เชชเช•เชฐเชฃเซ‹ เชธเชนเชฟเชค เช•เซเชฐเซ‹เชธ-เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธ เช…เชจเซ‡ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชธเซเชตเชคเช‚เชคเซเชฐเชคเชพ.
เช•เซ‹เชˆเชชเชฃ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‡ เชธเซเชฅเชพเชจเชฟเช• เชฐเซ€เชคเซ‡, WAN เชชเชฐ เช…เชฅเชตเชพ เช•เซเชฒเชพเช‰เชกเชฎเชพเช‚ เช•เซ‹เชˆเชชเชฃ เช…เชจเซเชฏ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชจเช•เชฒ เช•เชฐเซ‹.
เช…เชจเซเช•เซ‚เชณ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชฎเชพเชŸเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชกเซ‡เชŸเชพเชฌเซ‡เช เช…เชฅเชตเชพ เชนเชœเชพเชฐเซ‹ เชธเชพเชฅเซ‡ เชถเซเชฐเซ‡เชทเซเช  เช•เชพเชฐเซเชฏเชจเซ€ เชถเช•เซเชฏเชคเชพ.
GUI เช…เชจเซ‡ เช‰เชคเซเชคเชฎ เชธเชฎเชฐเซเชฅเชจ เชธเชพเชฅเซ‡ เชšเซ‚เช•เชตเซ‡เชฒ เชธเช‚เชธเซเช•เชฐเชฃ.

SymmetricDS เชจเชพ เช—เซ‡เชฐเชซเชพเชฏเชฆเชพ

เช•เซ‡เชŸเซ‡เชฒเซ‹เช— เช•เซ‹เชทเซเชŸเช•เซ‹ เชฒเซ‹เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เช†เชฆเซ‡เชถ เชตเชพเช•เซเชฏ เชชเชฐ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเชพ เชจเชฟเชฏเชฎเซ‹ เช…เชจเซ‡ เชฆเชฟเชถเชพเชจเซ‡ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชœเซ‡ เช…เชธเซเชตเชฟเชงเชพเชœเชจเช• เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡.
เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชฎเชพเชŸเซ‡ เช˜เชฃเชพ เช•เซ‹เชทเซเชŸเช•เซ‹ เชธเซเชฏเซ‹เชœเชฟเชค เช•เชฐเชตเซเช‚ เช•เช‚เชŸเชพเชณเชพเชœเชจเช• เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชธเชฟเชตเชพเชฏ เช•เซ‡ เชคเชฎเซ‡ SQL เชธเซเชŸเซ‡เชŸเชฎเซ‡เชจเซเชŸ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชธเซเช•เซเชฐเชฟเชชเซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹ เชœเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเชพ เชจเชฟเชฏเชฎเซ‹ เช…เชจเซ‡ เชฆเชฟเชถเชพเชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‡ เช›เซ‡.
เชฒเซ‹เช—เชฎเชพเช‚ เช˜เชฃเซ€ เชฌเชงเซ€ เชฎเชพเชนเชฟเชคเซ€ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซ€ เช›เซ‡, เช…เชจเซ‡ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชคเชฎเชพเชฐเซ‡ เชฒเซ‹เช— เชซเชพเช‡เชฒเชจเซ‡ เชตเซเชฏเชตเชธเซเชฅเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ‡ เช›เซ‡ เชœเซ‡เชฅเซ€ เชคเซ‡ เชตเชงเซ เชœเช—เซเชฏเชพ เชจ เชฒเซ‡.

SymmetricDS เชฎเชพเชŸเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ‹

SymmetricDS เชคเชฎเชจเซ‡ เชซเชพเช‡เชฒเซ‹เชจเซ€ เชจเช•เชฒ เช…เชจเซ‡ เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เช เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฌเซ‡, เชคเซเชฐเชฃ เช…เชฅเชตเชพ เชคเซ‹ เช•เซ‡เชŸเชฒเชพเช• เชนเชœเชพเชฐ เชจเซ‹เชกเซเชธ เชตเชšเซเชšเซ‡ เชฆเซเชตเชฟ-เชฎเชพเชฐเซเช—เซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เช† เชเช• เช…เชจเชจเซเชฏ เชธเชพเชงเชจ เช›เซ‡ เชœเซ‡ เชธเซเชตเชคเช‚เชคเซเชฐ เชฐเซ€เชคเซ‡ เช˜เชฃเชพ เช•เชพเชฐเซเชฏเซ‹ เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ เชจเซ‹เชก เชชเชฐ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏ เชธเซเชงเซ€ เชกเชพเช‰เชจเชŸเชพเช‡เชฎ เชชเช›เซ€ เชธเซเชตเชšเชพเชฒเชฟเชค เชกเซ‡เชŸเชพ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชคเชฟ, HTTPS เชฆเซเชตเชพเชฐเชพ เชจเซ‹เชกเซเชธ เชตเชšเซเชšเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เช…เชจเซ‡ เช•เชพเชฐเซเชฏเช•เซเชทเชฎ เชกเซ‡เชŸเชพ เชตเชฟเชจเชฟเชฎเชฏ, เชจเชฟเชฏเชฎเซ‹เชจเชพ เชธเชฎเซ‚เชนเชจเชพ เช†เชงเชพเชฐเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เชธเช‚เช˜เชฐเซเชท เชธเช‚เชšเชพเชฒเชจ เชตเช—เซ‡เชฐเซ‡. SymmetricDS เช•เชฐเซ‡ เช›เซ‡. เช•เซ‹เชˆเชชเชฃ เชกเซ‡เชŸเชพเชฌเซ‡เช เชตเชšเซเชšเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ, เชคเซ‡เชฅเซ€, เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชตเชฟเชตเชฟเชง เชชเซเชฐเช•เชพเชฐเชจเชพ เชฆเซƒเชถเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เชธเซเชฅเชณเชพเช‚เชคเชฐ, เชธเซเชฅเชณเชพเช‚เชคเชฐ, เชตเชฟเชคเชฐเชฃ, เชซเชฟเชฒเซเชŸเชฐเชฟเช‚เช— เช…เชจเซ‡ เชธเชฎเช—เซเชฐ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐ เชกเซ‡เชŸเชพเชจเชพ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฃเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡.

เช‰เชฆเชพเชนเชฐเชฃ เช…เชงเชฟเช•เชพเชฐเซ€ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡ เชเชกเชชเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ SymmetricDS เชฆเซเชตเชพเชฐเชพ. IN เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ SymmetricDS เชธเชพเชฅเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช—เซ‹เช เชตเชตเชพเชฎเชพเช‚ เชธเชพเชฎเซ‡เชฒ เชตเชฟเชตเชฟเชง เช–เซเชฏเชพเชฒเซ‹เชจเซเช‚ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹