PostgreSQL рдЖрдгрд┐ MySQL рдордзреАрд▓ рдХреНрд░реЙрд╕ рдкреНрд░рддрд┐рдХреГрддреА

PostgreSQL рдЖрдгрд┐ MySQL рдордзреАрд▓ рдХреНрд░реЙрд╕ рдкреНрд░рддрд┐рдХреГрддреА

рдореА PostgreSQL рдЖрдгрд┐ MySQL рдордзреАрд▓ рдХреНрд░реЙрд╕-рд░рд┐рдкреНрд▓рд┐рдХреЗрд╢рди, рддрд╕реЗрдЪ рджреЛрди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡реНрд╣рд░ рджрд░рдореНрдпрд╛рди рдХреНрд░реЙрд╕-рд░рд┐рдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдВрдЪреА рд░реВрдкрд░реЗрд╖рд╛ рджреЗрдИрди. рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рдХреНрд░реЙрд╕-рд░рд┐рдкреНрд▓рд┐рдХреЗрдЯреЗрдб рдбреЗрдЯрд╛рдмреЗрд╕реЗрд╕рд▓рд╛ рдПрдХрд╕рдВрдз рдЕрд╕реЗ рдореНрд╣рдгрддрд╛рдд, рдЖрдгрд┐ рд╣реА рдПрдХрд╛ RDBMS рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реВрди рджреБрд╕рд▒реНрдпрд╛рд╡рд░ рдЬрд╛рдгреНрдпрд╛рдЪреА рд╕реЛрдпреАрдЪреА рдкрджреНрдзрдд рдЖрд╣реЗ.

PostgreSQL рдЖрдгрд┐ MySQL рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рд░рд┐рд▓реЗрд╢рдирд▓ рдорд╛рдирд▓реЗ рдЬрд╛рддрд╛рдд, рдкрд░рдВрддреБ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрд╕рд╣ рддреЗ NoSQL рдХреНрд╖рдорддрд╛ рджреЗрддрд╛рдд. рдпреЗрдереЗ рдЖрдкрдг PostgreSQL рдЖрдгрд┐ MySQL рдордзреАрд▓ рд░рд┐рд▓реЗрд╢рдирд▓ DBMS рджреГрд╖реНрдЯреАрдХреЛрдирд╛рддреВрди рдкреНрд░рддрд┐рдХреГрддреАрд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░реВ.

рдЖрдореНрд╣реА рд╕рдВрдкреВрд░реНрдг рдЖрддреАрд▓ рдХрд╛рдордХрд╛рдЬрд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгрд╛рд░ рдирд╛рд╣реА, рдлрдХреНрдд рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ рдЬреЗрдгреЗрдХрд░реБрди рддреБрдореНрд╣рд╛рд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡реНрд╣рд░, рдлрд╛рдпрджреЗ, рдорд░реНрдпрд╛рджрд╛ рдЖрдгрд┐ рд╡рд╛рдкрд░ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреАрд▓ рдкреНрд░рддрд┐рдХреГрддреА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдХрд▓реНрдкрдирд╛ рдпреЗрдИрд▓.

рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рджреЛрди рд╕рдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡реНрд╣рд░рдордзреАрд▓ рдкреНрд░рддрд┐рдХреГрддреА рдПрдХрддрд░ рдмрд╛рдпрдирд░реА рдореЛрдбрдордзреНрдпреЗ рдХрд┐рдВрд╡рд╛ рдорд╛рд╕реНрдЯрд░ (рдЙрд░реНрдл рдкреНрд░рдХрд╛рд╢рдХ, рдорд╛рд╕реНрдЯрд░ рдХрд┐рдВрд╡рд╛ рд╕рдХреНрд░рд┐рдп) рдЖрдгрд┐ рдЧреБрд▓рд╛рдо (рдЧреНрд░рд╛рд╣рдХ, рд╕реНрдЯрдБрдбрдмрд╛рдп рдХрд┐рдВрд╡рд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдп) рдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рдХреНрд╡реЗрд░реА рд╡рд╛рдкрд░реВрди рдХреЗрд▓реА рдЬрд╛рддреЗ. рдкреНрд░рддрд┐рдХреГрддреАрдЪрд╛ рдЙрджреНрджреЗрд╢ рд╕реНрд▓реЗрд╡реНрд╣ рд╕рд╛рдЗрдбрд╡рд░реАрд▓ рдорд╛рд╕реНрдЯрд░ рдбреЗрдЯрд╛рдмреЗрд╕рдЪреА рд░рд┐рдЕрд▓-рдЯрд╛рдЗрдо рдкреНрд░рдд рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рдЖрд╣реЗ. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдбреЗрдЯрд╛ рдорд╛рд╕реНрдЯрд░рдХрдбреВрди рд╕реНрд▓реЗрд╡реНрд╣рдХрдбреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рдореНрд╣рдгрдЬреЗрдЪ рд╕рдХреНрд░рд┐рдп рддреЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп, рдХрд╛рд░рдг рдкреНрд░рддрд┐рдХреГрддреА рдХреЗрд╡рд│ рдПрдХрд╛ рджрд┐рд╢реЗрдиреЗ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдкрд░рдВрддреБ рддреБрдореНрд╣реА рджреЛрдиреНрд╣реА рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢рд╛рдВрдордзреАрд▓ рджреЛрди рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдкреНрд░рддрд┐рдХреГрддреА рд╕реЗрдЯ рдХрд░реВ рд╢рдХрддрд╛, рдЬреЗрдгреЗрдХрд░реВрди рдбреЗрдЯрд╛ рд╕рдХреНрд░рд┐рдп-рд╕рдХреНрд░рд┐рдп рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рд╕реНрд▓реЗрд╡реНрд╣рдХрдбреВрди рдорд╛рд╕реНрдЯрд░рдХрдбреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рд╣реЗ рд╕рд░реНрд╡, рдХреЕрд╕реНрдХреЗрдбрд┐рдВрдЧ рдкреНрд░рддрд┐рдХреГрддреАрд╕рд╣, рджреЛрди рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рд╕рдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡реНрд╣рд░ рджрд░рдореНрдпрд╛рди рд╢рдХреНрдп рдЖрд╣реЗ. рд╕рдХреНрд░рд┐рдп-рд╕рдХреНрд░рд┐рдп рдХрд┐рдВрд╡рд╛ рд╕рдХреНрд░рд┐рдп-рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЧрд░рдЬреЗрд╡рд░, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдЕрд╢рд╛ рдХреНрд╖рдорддрд╛рдВрдЪреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХрд┐рдВрд╡рд╛ рдмрд╛рд╣реНрдп рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реЛрд▓реНрдпреВрд╢рдиреНрд╕ рдЖрдгрд┐ рд╡рд┐рджреНрдпрдорд╛рди рдЯреНрд░реЗрдб-рдСрдл рд╡рд╛рдкрд░рдгреНрдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ.

рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рднрд┐рдиреНрди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡реНрд╣рд░ рджрд░рдореНрдпрд╛рди рд╢рдХреНрдп рдЖрд╣реЗ. рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рджреБрд╕рд░реНтАНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реВрди рдкреНрд░рддрд┐рд░реВрдкрд┐рдд рдбреЗрдЯрд╛ рд╕реНрд╡реАрдХрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдЖрдгрд┐ рддрд░реАрд╣реА рдкреНрд░рддрд┐рдХреГрддреА рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪреЗ рд░рд┐рдЕрд▓-рдЯрд╛рдЗрдо рд╕реНрдиреЕрдкрд╢реЙрдЯ рд░рд╛рдЦрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. MySQL рдЖрдгрд┐ PostgreSQL рдпрд╛рдкреИрдХреА рдмрд╣реБрддреЗрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЗрди-рд╣рд╛рдЙрд╕ рдХрд┐рдВрд╡рд╛ рддреГрддреАрдп-рдкрдХреНрд╖ рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрджреНрд╡рд╛рд░реЗ рдСрдлрд░ рдХрд░рддрд╛рдд, рдЬреНрдпрд╛рдд рдмрд╛рдпрдирд░реА рд▓реЙрдЧ рдкрджреНрдзрддреА, рдбрд┐рд╕реНрдХ рд▓реЙрдХрд┐рдВрдЧ рдЖрдгрд┐ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ- рдЖрдгрд┐ рдкрдВрдХреНрддреА-рдЖрдзрд╛рд░рд┐рдд рдкрджреНрдзрддреА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд.

MySQL рдЖрдгрд┐ PostgreSQL рдордзреАрд▓ рдХреНрд░реЙрд╕ рдкреНрд░рддрд┐рдХреГрддреА рдПрдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реВрди рджреБрд╕рд░реНтАНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдПрдХ-рд╡реЗрд│рдЪреНрдпрд╛ рд╕реНрдерд▓рд╛рдВрддрд░рд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд╛рдкрд░рддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ рддреНрдпрд╛рдВрдирд╛ рдереЗрдЯ рд▓рд┐рдВрдХ рдХрд░рдгреЗ рд╢рдХреНрдп рдирд╛рд╣реА. рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдмрд╛рд╣реНрдп рдореБрдХреНрдд рд╕реНрд░реЛрдд рд╕рд╛рдзрди рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде pg_chameleon.

pg_chameleon рдореНрд╣рдгрдЬреЗ рдХрд╛рдп

pg_chameleon рд╣реА Python 3 рдордзреАрд▓ MySQL рддреЗ PostgreSQL рдкрд░реНрдпрдВрддрдЪреА рдкреНрд░рддрд┐рдХреГрддреА рдкреНрд░рдгрд╛рд▓реА рдЖрд╣реЗ. рддреА рдУрдкрди рд╕реЛрд░реНрд╕ mysql-рдкреНрд░рддрд┐рдХреГрддреА рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░рддреЗ, рдкрд╛рдпрдердирдордзреНрдпреЗ рджреЗрдЦреАрд▓. рдкрдВрдХреНрддреА рдкреНрд░рддрд┐рдорд╛ MySQL рд╕рд╛рд░рдгреНрдпрд╛рдВрдордзреВрди рдХрд╛рдврд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ JSONB рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореНрд╣рдгреВрди рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдирдВрддрд░ pl/pgsql рдлрдВрдХреНрд╢рдирджреНрд╡рд╛рд░реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд.

pg_chameleon рдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ

рдПрдХрд╛рдЪ рдХреНрд▓рд╕реНрдЯрд░рдордзреАрд▓ рдЕрдиреЗрдХ MySQL рд╕реНрдХреАрдорд╛ рдПрдХрд╛рдЪ рдЯрд╛рд░реНрдЧреЗрдЯ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдПрдХрд╛-рддреЗ-рдЕрдиреЗрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдкреНрд░рддрд┐рдХреГрддреА рдмрдирд╡рд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддрд╛рдд.
рд╕реНрддреНрд░реЛрдд рдЖрдгрд┐ рд▓рдХреНрд╖реНрдп рд╕реНрдХреАрдорд╛ рдирд╛рд╡реЗ рд╕рдорд╛рди рдЕрд╕реВ рд╢рдХрдд рдирд╛рд╣реАрдд.
рдкреНрд░рддрд┐рдХреГрддреА рдбреЗрдЯрд╛ рдХреЕрд╕реНрдХреЗрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ MySQL рдкреНрд░рддрд┐рдХреГрддреАрдордзреВрди рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.
рдкреНрд░рддрд┐рдХреГрддреА рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реАрдд рдХрд┐рдВрд╡рд╛ рддреНрд░реБрдЯреА рдирд┐рд░реНрдорд╛рдг рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реАрдд рдЕрд╢рд╛ рд╕рд╛рд░рдгреНрдпрд╛ рд╡рдЧрд│рд▓реНрдпрд╛ рдЖрд╣реЗрдд.
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдХреГрддреА рдХрд╛рд░реНрдп рдбрд┐рдордирджреНрд╡рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ.
YAML-рдЖрдзрд╛рд░рд┐рдд рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕рджреНрд╡рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдг.

рдЙрджрд╛рд╣рд░рдг:

рд╣реЛрд╕реНрдЯ
рд╡реНрд╣реАрдПрдо 1
рд╡реНрд╣реАрдПрдо 2

OS рдЖрд╡реГрддреНрддреА
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

рдбреАрдмреА рд╕рд░реНрд╡реНрд╣рд░ рдЖрд╡реГрддреНрддреА
, MySQL 5.7.26
рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕реНрдХреНрдпреВрдПрд▓ 10.5

рдбреАрдмреА рдкреЛрд░реНрдЯ
3306
5433

рдЖрдпрдкреА рдкрддреНрддрд╛
192.168.56.102
192.168.56.106

рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, pg_chameleon рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ рддрдпрд╛рд░ рдХрд░рд╛. рд╣реЗ рдЙрджрд╛рд╣рд░рдг Python 3.6.8 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ, рдЬреЗ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдХрд░рддреЗ рдЖрдгрд┐ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ.

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

Python3.6 рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рддреБрдореНрд╣рд╛рд▓рд╛ рдЙрд░реНрд╡рд░рд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреВрд░реНрдг рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬрд╕реЗ рдХреА рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рд╕рдХреНрд░рд┐рдп рдХрд░рдгреЗ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, pip рдореЙрдбреНрдпреВрд▓ рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ рдЕрджреНрдпрддрдирд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ pg_chameleon рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. рдЦрд╛рд▓реАрд▓ рдЖрдЬреНрдЮрд╛ рдЬрд╛рдгреВрдирдмреБрдЬреВрди pg_chameleon 2.0.9 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛рдд, рдЬрд░реА рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреА 2.0.10 рдЖрд╣реЗ. рдЕрджреНрдпрддрдирд┐рдд рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ рдирд╡реАрди рдмрдЧ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

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

рддреНрдпрд╛рдирдВрддрд░ рдЖрдореНрд╣реА pg_chameleon рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА set_configuration_files рдпреБрдХреНрддрд┐рд╡рд╛рджрд╛рд╕рд╣ pg_chameleon (рдЧрд┐рд░рдЧрд┐рдЯ рдПрдХ рдХрдорд╛рдВрдб рдЖрд╣реЗ) рдХреЙрд▓ рдХрд░рддреЛ рдЖрдгрд┐ рдбреАрдлреЙрд▓реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕ рддрдпрд╛рд░ рдХрд░рддреЛ.

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

рдЖрддрд╛ рдЖрдореНрд╣реА config-example.yml рдЪреА рдПрдХ рдкреНрд░рдд default.yml рдореНрд╣рдгреВрди рддрдпрд╛рд░ рдХрд░рддреЛ рдЬреЗрдгреЗрдХрд░реВрди рддреА рдбреАрдлреЙрд▓реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рд╣реЛрдИрд▓. рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд╕рд╛рдареА рдирдореБрдирд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рдЦрд╛рд▓реА рдкреНрд░рджрд╛рди рдХреЗрд▓реА рдЖрд╣реЗ.

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

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

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

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

рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рддреАрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рд╣реА рдПрдХ рдирдореБрдирд╛ pg_chameleon рдлрд╛рдЗрд▓ рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕реНрддреНрд░реЛрдд рдЖрдгрд┐ рд▓рдХреНрд╖реНрдп рд╡рд╛рддрд╛рд╡рд░рдгрд╛рд╕ рдЕрдиреБрдХреВрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд┐рд░рдХреЛрд│ рдмрджрд▓ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдЦрд╛рд▓реА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓рдЪреНрдпрд╛ рд╡рд┐рд╡рд┐рдз рд╡рд┐рднрд╛рдЧрд╛рдВрдЪреЗ рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди рдЖрд╣реЗ.

default.yml рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдЬрд╛рдЧрддрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдЪрд╛ рдПрдХ рд╡рд┐рднрд╛рдЧ рдЖрд╣реЗ, рдЬрд┐рдереЗ рддреБрдореНрд╣реА рд▓реЙрдХ рдлрд╛рдЗрд▓рдЪреЗ рд╕реНрдерд╛рди, рд▓реЙрдЧрдЪреЗ рд╕реНрдерд╛рди, рд▓реЙрдЧрд╕рд╛рдареА рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛рд▓рд╛рд╡рдзреА рдЗрддреНрдпрд╛рджреА рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ рд╢рдХрддрд╛. рдкреБрдвреЗ рдЯрд╛рдЗрдк рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рд╡рд┐рднрд╛рдЧ рдпреЗрддреЛ, рдЬреЗрдереЗ рдкреНрд░рддрд┐рдХреГрддреА рджрд░рдореНрдпрд╛рди рдЕрдзрд┐рд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╛рдареА рдирд┐рдпрдорд╛рдВрдЪрд╛ рд╕рдВрдЪ. рдЙрджрд╛рд╣рд░рдг рдПрдХрд╛ рдкреНрд░рдХрд╛рд░ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдирд┐рдпрдорд╛рдЪреЗ рдбреАрдлреЙрд▓реНрдЯ рдЖрд╣реЗ рдЬреЗ tinyint(1) рдмреБрд▓рд┐рдпрди рдореВрд▓реНрдпрд╛рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ. рдкреБрдвреАрд▓ рд╡рд┐рднрд╛рдЧрд╛рдд, рдЖрдореНрд╣реА рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕рд╢реА рдХрдиреЗрдХреНрд╢рди рддрдкрд╢реАрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЛ. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рд╣рд╛ рдПрдХ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрд╣реЗ, рдирд┐рдпреБрдХреНрдд pg_conn. рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдд, рдЖрдореНрд╣реА рд╕реНрддреНрд░реЛрдд рдбреЗрдЯрд╛ рд╕реВрдЪрд┐рдд рдХрд░рддреЛ, рдореНрд╣рдгрдЬреЗрдЪ, рд╕реНрддреНрд░реЛрдд рдбреЗрдЯрд╛рдмреЗрд╕рдЪреЗ рдХрдиреЗрдХреНрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕, рд╕реНрддреНрд░реЛрдд рдЖрдгрд┐ рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рдореЕрдкрд┐рдВрдЧ рдпреЛрдЬрдирд╛, рд╡рдЧрд│рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЯреЗрдмрд▓реНрд╕, рдкреНрд░рддреАрдХреНрд╖рд╛ рд╡реЗрд│, рдореЗрдорд░реА, рдкреЕрдХреЗрдЬ рдЖрдХрд╛рд░. рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА "рд╕реНрд░реЛрдд" рд╣реЗ рдЕрдиреЗрдХрд╡рдЪрдиреА рдЖрд╣реЗ, рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЖрдореНрд╣реА рдЕрдиреЗрдХ-рдЯреВ-рд╡рди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХрд╛рдЪ рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдПрдХрд╛рдзрд┐рдХ рд╕реНрддреНрд░реЛрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдЬреЛрдбреВ рд╢рдХрддреЛ.

рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛рдмреЗрд╕ world_x рдордзреНрдпреЗ рдкрдВрдХреНрддреАрдВрд╕рд╣ 4 рд╕рд╛рд░рдгреНрдпрд╛ рдЖрд╣реЗрдд рдЬреНрдпрд╛ MySQL рд╕рдореБрджрд╛рдп рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди рдСрдлрд░ рдХрд░рддреЛ. рддреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рдпреЗрддреЗ рдпреЗрдереЗ. рдирдореБрдирд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯрд╛рд░ рдЖрдгрд┐ рд╕рдВрдХреБрдЪрд┐рдд рд╕рдВрдЧреНрд░рд╣рдгрд╛рдЪреНрдпрд╛ рд░реВрдкрд╛рдд рдпреЗрддреЛ рдЬреНрдпрд╛рдордзреНрдпреЗ рдкрдВрдХреНрддреА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЖрдпрд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реВрдЪрдирд╛ рдЕрд╕рддрд╛рдд.

MySQL рдЖрдгрд┐ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ, usr_replica рдпрд╛ рд╕рдорд╛рди рдирд╛рд╡рд╛рдиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. MySQL рдордзреНрдпреЗ, рд╕рд░реНрд╡ рдкреНрд░рддрд┐рдХреГрддреА рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рд╛рд░рдгреНрдпрд╛рдВрдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд╛рдЪрди рдЕрдзрд┐рдХрд╛рд░ рджрд┐рд▓реЗ рдЬрд╛рддрд╛рдд.

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

PostgreSQL рдмрд╛рдЬреВрд▓рд╛, db_replica рдбреЗрдЯрд╛рдмреЗрд╕ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЬреЛ MySQL рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рдмрджрд▓ рд╕реНрд╡реАрдХрд╛рд░реЗрд▓. 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) рддрдпрд╛рд░ рдХрд░рддреЗ, рдЬрд╕реЗ рдЖрдкрдг рдЖрдзреАрдЪ рдЪрд░реНрдЪрд╛ рдХреЗрд▓реА рдЖрд╣реЗ. add_source рд╡рд┐рддрд░реНрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ (default.yml) рд╡рд╛рдЪреВрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдЬреЛрдбрддреЗ рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рддреЗ mysql рдЖрд╣реЗ рдЖрдгрд┐ init_replica рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓рдордзреАрд▓ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реБрд░реВ рдХрд░рддреЗ.

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

рдпрд╛ рддреАрди рдЖрджреЗрд╢рд╛рдВрдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рдХреА рддреЗ рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЭрд╛рд▓реЗ рдЖрд╣реЗрдд. рдХреЛрдгрддреНрдпрд╛рд╣реА рдХреНрд░реЕрд╢ рдХрд┐рдВрд╡рд╛ рд╕рд┐рдВрдЯреЕрдХреНрд╕ рддреНрд░реБрдЯреАрдВрдЪреА рддрдХреНрд░рд╛рд░ рд╕реЛрдкреНрдпрд╛, рд╕реНрдкрд╖реНрдЯ рд╕рдВрджреЗрд╢рд╛рдВрдордзреНрдпреЗ рдХреЗрд▓реА рдЬрд╛рддреЗ рдЖрдгрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╢реА рд╕реЛрдбрд╡рд╛рдпрдЪреА рдпрд╛рдЪреЗ рд╕рдВрдХреЗрдд рджрд┐рд▓реЗ рдЬрд╛рддрд╛рдд.

рд╢реЗрд╡рдЯреА, рдЖрдореНрд╣реА start_replica рд╡рд╛рдкрд░реВрди рдкреНрд░рддрд┐рдХреГрддреА рд╕реБрд░реВ рдХрд░рддреЛ рдЖрдгрд┐ рдпрд╢рд╕реНрд╡реА рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЛ.

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

show_status рд╡рд┐рддрд░реНрдХ рд╡рд╛рдкрд░реВрди рдкреНрд░рддрд┐рдХреГрддреА рд╕реНрдерд┐рддреАрдЪреА рдЪреМрдХрд╢реА рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ рдЖрдгрд┐ show_errors рд╡рд┐рддрд░реНрдХ рд╡рд╛рдкрд░реВрди рддреНрд░реБрдЯреА рдкрд╛рд╣рд┐рд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

рдирд┐рдХрд╛рд▓.

рдЖрдореНрд╣реА рдЖрдзреАрдЪ рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдХреГрддреА рдХрд╛рд░реНрдп рдбрд┐рдордирджреНрд╡рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рддреЗ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЦрд╛рд▓реА рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ Linux ps рдХрдорд╛рдВрдбрд╕рд╣ рдкреНрд░реЛрд╕реЗрд╕ рдЯреЗрдмрд▓рдЪреА рдХреНрд╡реЗрд░реА рдХрд░рддреЛ.

рдирд┐рдХрд╛рд▓.

рдЦрд╛рд▓реА рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рдЖрдореНрд╣реА рд░рд┐рдЕрд▓ рдЯрд╛рдЗрдордордзреНрдпреЗ рддреНрдпрд╛рдЪреА рдЪрд╛рдЪрдгреА рдХрд░реЗрдкрд░реНрдпрдВрдд рдкреНрд░рддрд┐рдХреГрддреА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реА рдорд╛рдирд▓реА рдЬрд╛рдд рдирд╛рд╣реА. рдЖрдореНрд╣реА рдПрдХ рдЯреЗрдмрд▓ рддрдпрд╛рд░ рдХрд░рддреЛ, MySQL рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдХрд╛рд╣реА рд░реЗрдХреЙрд░реНрдбреНрд╕ рдШрд╛рд▓рддреЛ рдЖрдгрд┐ pg_chameleon рдордзреАрд▓ sync_tables argument рд▓рд╛ рдХреЙрд▓ рдХрд░рддреЛ рдбрд┐рдорди рдЕрдкрдбреЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЯреЗрдмрд▓рдЪреА рдкреНрд░рддрд┐рдХреГрддреА 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 рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рдбреЗрдЯрд╛ рдПрдХрд╛рдЪ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдПрдХрддреНрд░ рдХрд░рдд рдЕрд╕рд╛рд▓ рддрд░ рд╣реЗ рдЦреВрдк рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗ.
рддреБрдореНрд╣рд╛рд▓рд╛ рдирд┐рд╡рдбрд▓реЗрд▓реНрдпрд╛ рдЯреЗрдмрд▓реНрд╕рдЪреА рдкреНрд░рддрд┐рдХреГрддреА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА.

pg_chameleon рдЪреЗ рддреЛрдЯреЗ

рдХреЗрд╡рд│ MySQL 5.5 рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░реАрд▓ рд╕реНрддреНрд░реЛрдд рдореНрд╣рдгреВрди рдЖрдгрд┐ PostgreSQL 9.5 рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░реАрд▓ рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореНрд╣рдгреВрди рд╕рдорд░реНрдерд┐рдд.
рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рд░рдгреАрдордзреНрдпреЗ рдкреНрд░рд╛рдердорд┐рдХ рдХрд┐рдВрд╡рд╛ рдЕрджреНрд╡рд┐рддреАрдп рдХреА рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЕрдиреНрдпрдерд╛ init_replica рдкреНрд░рдХреНрд░рд┐рдпреЗрджрд░рдореНрдпрд╛рди рд╕рд╛рд░рдгреНрдпрд╛ рдЖрд░рдВрдн рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдкрд░рдВрддреБ рдкреНрд░рддрд┐рдХреГрддреА рдмрдирд╡рд▓реНрдпрд╛ рдЬрд╛рдд рдирд╛рд╣реАрдд.
рдПрдХрдорд╛рд░реНрдЧреА рдкреНрд░рддрд┐рдХреГрддреА - рдлрдХреНрдд MySQL рддреЗ PostgreSQL. рдореНрд╣рдгреВрди, рддреЗ рдХреЗрд╡рд│ "рд╕рдХреНрд░рд┐рдп-рдирд┐рд╖реНрдХреНрд░рд┐рдп" рд╕рд░реНрдХрд┐рдЯрд╕рд╛рдареА рдпреЛрдЧреНрдп рдЖрд╣реЗ.
рд╕реНрддреНрд░реЛрдд рдХреЗрд╡рд│ MySQL рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрд╕реВ рд╢рдХрддреЛ рдЖрдгрд┐ рд╕реНрддреНрд░реЛрдд рдореНрд╣рдгреВрди PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╛рдареА рд╕рдорд░реНрдерди рдХреЗрд╡рд│ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдЖрдгрд┐ рдорд░реНрдпрд╛рджрд╛рдВрд╕рд╣ рдЖрд╣реЗ (рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреНрдпрд╛ рдпреЗрдереЗ)

pg_chameleon рд╕рд╛рдареА рдкрд░рд┐рдгрд╛рдо

MySQL рд╡рд░реВрди PostgreSQL рд╡рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдерд▓рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА pg_chameleon рдордзреАрд▓ рдкреНрд░рддрд┐рдХреГрддреА рдкрджреНрдзрдд рдЙрддреНрддрдо рдЖрд╣реЗ. рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдирдХрд╛рд░рд╛рддреНрдордХ рдмрд╛рдЬреВ рдЕрд╢реА рдЖрд╣реЗ рдХреА рдкреНрд░рддрд┐рдХреГрддреА рдХреЗрд╡рд│ рдПрдХ-рдорд╛рд░реНрдЧреА рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХрд╛рдВрдирд╛ рд╕реНрдерд▓рд╛рдВрддрд░рд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд рдЗрддрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреЛрд╖реНрдЯреАрд╕рд╛рдареА рддреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдирд╛рд╣реА. рдкрд░рдВрддреБ рд╡рди-рд╡реЗ рдкреНрд░рддрд┐рдХреГрддреАрдЪреА рд╕рдорд╕реНрдпрд╛ рджреБрд╕рд░реНрдпрд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рдЯреВрд▓ - рд╕рд┐рдореЗрдЯреНрд░рд┐рдХрдбреАрдПрд╕рд╕рд╣ рд╕реЛрдбрд╡рд┐рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ.

рдЕрдзрд┐рдХреГрдд рдХрд╛рдЧрджрдкрддреНрд░рд╛рдВрдордзреНрдпреЗ рдЕрдзрд┐рдХ рд╡рд╛рдЪрд╛ рдпреЗрдереЗ. рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдорджрдд рдорд┐рд│реВ рд╢рдХрддреЗ рдпреЗрдереЗ.

SymmetricDS рдЪреЗ рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди

SymmetricDS рд╣реЗ рдПрдХ рдореБрдХреНрдд рд╕реНрд░реЛрдд рд╕рд╛рдзрди рдЖрд╣реЗ рдЬреЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕рдЪреА рдЗрддрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдкреНрд░рддрд┐рдХреГрддреА рдмрдирд╡рддреЗ: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird рдЖрдгрд┐ рдЗрддрд░ рдХреНрд▓рд╛рдЙрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрджрд╛рд╣рд░рдгреЗ, рдЙрджрд╛. рдЖрдгрд┐ Redshift, Azure, рдЗ. рдЙрдкрд▓рдмреНрдз рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ: рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдгрд┐ рдлрд╛рдЗрд▓ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди, рдорд▓реНрдЯреА-рдорд╛рд╕реНрдЯрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рддрд┐рдХреГрддреА, рдлрд┐рд▓реНрдЯрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди, рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдореЗрд╢рди рдЖрдгрд┐ рдЗрддрд░. рд╣реЗ рдЬрд╛рд╡рд╛ рд╕рд╛рдзрди рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рд╕рд╛рдареА 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

рдбреАрдмреА рд╕рд░реНрд╡реНрд╣рд░ рдЖрд╡реГрддреНрддреА
, MySQL 5.7.26
рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕реНрдХреНрдпреВрдПрд▓ 10.5

рдбреАрдмреА рдкреЛрд░реНрдЯ
3306
5832

рдЖрдпрдкреА рдкрддреНрддрд╛
192.168.1.107
192.168.1.112

рд╕рд┐рдореЗрдЯреНрд░рд┐рдХрдбреАрдПрд╕ рдЖрд╡реГрддреНрддреА
рд╕рд┐рдореЗрдЯреНрд░рд┐рдХрдбреАрдПрд╕ рей.реп
рд╕рд┐рдореЗрдЯреНрд░рд┐рдХрдбреАрдПрд╕ рей.реп

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 рд╣реЗ store-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

рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ, рдЖрдпрдЯрдо рдЖрдгрд┐ рдЖрдпрдЯрдо_рд╕реЗрд▓рд┐рдВрдЧ_рдХрд┐рдВрдордд рд╕рд╛рд░рдгреНрдпрд╛ рдХреЙрд░реНрдк-000 рддреЗ рд╕реНрдЯреЛрдЕрд░-001 рдордзреАрд▓ рдкреНрд░рддрд┐рдХреГрддреА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкреЛрдЖрдк рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рд╡рд┐рдХреНрд░реА рд╕рд╛рд░рдгреНрдпрд╛ (рд╡рд┐рдХреНрд░реА_рд╡реНрдпрд╡рд╣рд╛рд░ рдЖрдгрд┐ рд╡рд┐рдХреНрд░реА_рдкрд░рдд_рд▓рд╛рдЗрди_рдЖрдпрдЯрдо) рд╕реНрдЯреЛрдЕрд░-001 рддреЗ рдХреЙрд░реНрдк-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_ рд╕рд╣ рдЙрдкрд╕рд░реНрдЧ) рд╕рдзреНрдпрд╛ рдлрдХреНрдд node corp-000 рд╡рд░ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд рдХрд╛рд░рдг рддрд┐рдереЗрдЪ рдЖрдореНрд╣реА create-sym-tables рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд▓реА рдЖрдгрд┐ рдкреНрд░рддрд┐рдХреГрддреА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгрд╛рд░ рдЖрд╣реЛрдд. рдЖрдгрд┐ рдиреЛрдб рд╕реНрдЯреЛрдЕрд░-001 рд╡рд░реАрд▓ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдбреЗрдЯрд╛рд╢рд┐рд╡рд╛рдп рдлрдХреНрдд 4 рдЙрджрд╛рд╣рд░рдгреЗ рдЯреЗрдмрд▓ рдЕрд╕рддреАрд▓.

рд╕рд░реНрд╡. рдЦрд╛рд▓реА рджрд╛рдЦрд╡рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рджреЛрдиреНрд╣реА рдиреЛрдбреНрд╕рд╡рд░ рд╕рд┐рдо рд╕рд░реНрд╡реНрд╣рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдЖрд╣реЗ.

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

рд▓реЙрдЧ рдиреЛрдВрджреА рд╕рд┐рдореЗрдЯреНрд░рд┐рдХрдбреАрдПрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрддреАрд▓ рд▓реЙрдЧ рдлреЛрд▓реНрдбрд░рдордзреАрд▓ рдкрд╛рд░реНрд╢реНрд╡рднреВрдореА рд▓реЙрдЧ рдлрд╛рдЗрд▓рд╡рд░ (symmetric.log) рдкрд╛рдард╡рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд, рддрд╕реЗрдЪ рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯрд╡рд░. рд╕рд┐рдо рд╕рд░реНрд╡реНрд╣рд░ рдЖрддрд╛ рдиреЛрдб рд╕реНрдЯреЛрдЕрд░-001 рд╡рд░ рд╕реБрд░реВ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.

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

рддреБрдореНрд╣реА sym рд╕рд░реНрд╡реНрд╣рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ vm2 рд╣реЛрд╕реНрдЯрд╡рд░ рдЪрд╛рд▓рд╡рд▓реНрдпрд╛рд╕, рддреЗ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ SymmetricDS рдХреЕрдЯрд▓реЙрдЧ рдЯреЗрдмрд▓ рджреЗрдЦреАрд▓ рддрдпрд╛рд░ рдХрд░реЗрд▓. рддреБрдореНрд╣реА рджреЛрдиреНрд╣реА рдиреЛрдбреНрд╕рд╡рд░ рд╕рд┐рдо рд╕рд░реНрд╡реНрд╣рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд▓рд╡рд▓реНрдпрд╛рд╕, рддреЗ рдХреЙрд░реНрдк-000 рддреЗ рд╕реНрдЯреЛрдЕрд░-001 рдкрд░реНрдпрдВрдд рдбреЗрдЯрд╛рдЪреА рдкреНрд░рддрд┐рдХреГрддреА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХрдореЗрдХрд╛рдВрд╢реА рд╕рдордиреНрд╡рдп рд╕рд╛рдзрддрд╛рдд. рдЬрд░ рдХрд╛рд╣реА рд╕реЗрдХрдВрджрд╛рдВрдирдВрддрд░ рдЖрдореНрд╣реА рджреЛрдиреНрд╣реА рдмрд╛рдЬреВрдВрдЪреНрдпрд╛ рд╕рд░реНрд╡ 4 рдЯреЗрдмрд▓реНрд╕рдЪреА рдЪреМрдХрд╢реА рдХреЗрд▓реА, рддрд░ рдЖрдореНрд╣рд╛рд▓рд╛ рджрд┐рд╕реЗрд▓ рдХреА рдкреНрд░рддрд┐рдХреГрддреА рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реА рдЖрд╣реЗ. рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢рд╛рд╕рд╣ corp-001 рд╡рд░реВрди bootstrap рдиреЛрдб store-000 рд╡рд░ рдкрд╛рдард╡реВ рд╢рдХрддрд╛.

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

рдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░, рдиреЛрдб рдХреЙрд░реНрдк-000 (рд╣реЛрд╕реНрдЯ: vm1) рд╡рд░реАрд▓ MySQL рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рдЖрдпрдЯрдо рдЯреЗрдмрд▓рдордзреНрдпреЗ рдПрдХ рдирд╡реАрди рд░реЗрдХреЙрд░реНрдб рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рддреБрдореНрд╣реА рдиреЛрдб рд╕реНрдЯреЛрдЕрд░-001 (рд╣реЛрд╕реНрдЯ: vm2) рд╡рд░реАрд▓ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рддреНрдпрд╛рдЪреА рдкреНрд░рддрд┐рдХреГрддреА рддрдкрд╛рд╕реВ рд╢рдХрддрд╛. рдХреЙрд░реНрдк-000 рд╡рд░реВрди рд╕реНрдЯреЛрд░-001 рд╡рд░ рдбреЗрдЯрд╛ рд╣рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдПрдХ рдкреБрд▓ рдСрдкрд░реЗрд╢рди рдкрд╛рд╣рддреЛ.

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

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

рд╕реНрдЯреЛрд░-001 рд╡рд░реВрди рдХреЙрд░реНрдк-000 рдордзреНрдпреЗ рдбреЗрдЯрд╛ рд╣рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдкреБрд╢ рдСрдкрд░реЗрд╢рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА sale_transaction рдЯреЗрдмрд▓рдордзреНрдпреЗ рд░реЗрдХреЙрд░реНрдб рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рддреЛ рдЖрдгрд┐ рдкреНрд░рддрд┐рдХреГрддреА рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛рдЪреЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЛ.

рдирд┐рдХрд╛рд▓.

рдЖрдореНрд╣реА MySQL рдЖрдгрд┐ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рд░рдгреНрдпрд╛рдВрдЪреНрдпрд╛ рджреНрд╡рд┐-рдорд╛рд░реНрдЧреА рдкреНрд░рддрд┐рдХреГрддреАрдЪрд╛ рдпрд╢рд╕реНрд╡реА рд╕реЗрдЯрдЕрдк рдкрд╛рд╣рддреЛ. рдирд╡реАрди рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕рд╛рд░рдгреНрдпрд╛рдВрд╕рд╛рдареА рдкреНрд░рддрд┐рдХреГрддреА рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдпрд╛ рдЪрд░рдгрд╛рдВрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рд╛: рдЖрдореНрд╣реА рдЙрджрд╛рд╣рд░рдгрд╛рд╕рд╛рдареА рдЯреЗрдмрд▓ t1 рддрдпрд╛рд░ рдХрд░рддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдкреНрд░рддрд┐рдХреГрддреА рдирд┐рдпрдо рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддреЛ. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдЖрдореНрд╣реА рдХреЙрд░реНрдк-000 рддреЗ рд╕реНрдЯреЛрдЕрд░-001 рдкрд░реНрдпрдВрдд рдХреЗрд╡рд│ рдкреНрд░рддрд┐рдХреГрддреА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддреЛ.

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

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

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

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

рдирдВрддрд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд▓рд╛ рд╕реНрдХреАрдорд╛ рдмрджрд▓рд╛рдмрджреНрджрд▓ рд╕реВрдЪрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдореНрд╣рдгрдЬреЗ, рдирд╡реАрди рдЯреЗрдмрд▓ рдЬреЛрдбрдгреЗ, рд╕рд┐рдВрдХ-рдЯреНрд░рд┐рдЧрд░реНрд╕ рдпреБрдХреНрддрд┐рд╡рд╛рджрд╛рд╕рд╣ 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 рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕рджреНрд╡рд╛рд░реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирд╡рд░ рдкреНрд░рддрд┐рдХреГрддреАрдЪреЗ рдирд┐рдпрдо рдЖрдгрд┐ рджрд┐рд╢рд╛ рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреЗ рдЧреИрд░рд╕реЛрдпреАрдЪреЗ рдЕрд╕реВ рд╢рдХрддреЗ.
рдкреНрд░рддрд┐рдХреГрддреАрд╕рд╛рдареА рдЕрдиреЗрдХ рд╕рд╛рд░рдгреНрдпрд╛ рд╕реЗрдЯ рдХрд░рдгреЗ рдХрдВрдЯрд╛рд│рд╡рд╛рдгреЗ рдЕрд╕реВ рд╢рдХрддреЗ рдЬреЛрдкрд░реНрдпрдВрдд рддреБрдореНрд╣реА рдкреНрд░рддрд┐рдХреГрддреАрдЪреЗ рдирд┐рдпрдо рдЖрдгрд┐ рджрд┐рд╢рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгрд╛рд░реЗ SQL рд╡рд┐рдзрд╛рдиреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдд рдирд╛рд╣реА.
рд▓реЙрдЧрдордзреНрдпреЗ рдЦреВрдк рдЬрд╛рд╕реНрдд рдорд╛рд╣рд┐рддреА рд░реЗрдХреЙрд░реНрдб рдХреЗрд▓реА рдЬрд╛рдд рдЖрд╣реЗ рдЖрдгрд┐ рдХрд╛рд╣реАрд╡реЗрд│рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рд▓реЙрдЧ рдлрд╛рдЗрд▓ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗрдгреЗрдХрд░реВрди рддреА рдЬрд╛рд╕реНрдд рдЬрд╛рдЧрд╛ рдШреЗрдгрд╛рд░ рдирд╛рд╣реА.

SymmetricDS рд╕рд╛рдареА рдкрд░рд┐рдгрд╛рдо

SymmetricDS рддреБрдореНрд╣рд╛рд▓рд╛ рдлрд╛рдЗрд▓реНрд╕рдЪреА рдкреНрд░рддрд┐рдХреГрддреА рдЖрдгрд┐ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреЛрди, рддреАрди рдХрд┐рдВрд╡рд╛ рдЕрдиреЗрдХ рд╣рдЬрд╛рд░ рдиреЛрдбреНрд╕рдордзреНрдпреЗ рджреНрд╡рд┐-рдорд╛рд░реНрдЧ рдкреНрд░рддрд┐рдХреГрддреА рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рд╣реЗ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕рд╛рдзрди рдЖрд╣реЗ рдЬреЗ рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рдЕрдиреЗрдХ рдХрд╛рд░реНрдпреЗ рдХрд░рддреЗ, рдЬрд╕реЗ рдХреА рдиреЛрдбрд╡рд░реАрд▓ рджреАрд░реНрдШ рдХрд╛рд▓рд╛рд╡рдзреАрдирдВрддрд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА, HTTPS рджреНрд╡рд╛рд░реЗ рдиреЛрдбреНрд╕ рджрд░рдореНрдпрд╛рди рд╕реБрд░рдХреНрд╖рд┐рдд рдЖрдгрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдо рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ, рдирд┐рдпрдорд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЪрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рд╕рдВрдШрд░реНрд╖ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЗ. SymmetricDS рдХрд░рддреЗ. рдХреЛрдгрддреНрдпрд╛рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рдкреНрд░рддрд┐рдХреГрддреА, рдореНрд╣рдгреВрди, рддреЗ рд╕реНрдерд▓рд╛рдВрддрд░, рд╕реНрдерд▓рд╛рдВрддрд░, рд╡рд┐рддрд░рдг, рдлрд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдЖрдгрд┐ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░реАрд▓ рдбреЗрдЯрд╛рдЪреЗ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛рд╕рд╣ рд╡рд┐рд╡рд┐рдз рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.

рдЙрджрд╛рд╣рд░рдг рдЕрдзрд┐рдХрд╛рд▒реНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ рдЬрд▓рдж рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ SymmetricDS рджреНрд╡рд╛рд░реЗ. IN рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреБрд╕реНрддрд┐рдХрд╛ SymmetricDS рд╕рд╣ рдкреНрд░рддрд┐рдХреГрддреА рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдордзреНрдпреЗ рдЧреБрдВрддрд▓реЗрд▓реНрдпрд╛ рд╡рд┐рд╡рд┐рдз рд╕рдВрдХрд▓реНрдкрдирд╛рдВрдЪреЗ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХрд░рддреЗ.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛