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-рдЖрдзрд╛рд░рд┐рдд рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рд╣рд░реВ рдорд╛рд░реНрдлрдд рдирд┐рдпрдиреНрддреНрд░рдгред

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

рд╣реЛрд╕реНрдЯ
vm1
vm2

OS рд╕рдВрд╕реНрдХрд░рдг
CentOS рд▓рд┐рдирдХреНрд╕ 7.6 x86_64
CentOS рд▓рд┐рдирдХреНрд╕ 7.5 x86_64

DB рд╕рд░реНрднрд░ рд╕рдВрд╕реНрдХрд░рдг
MySQL 5.7.26
PostgreSQL .10.5 .рез

DB рдкреЛрд░реНрдЯ
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 рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реЗрдкрдЫрд┐, рддрдкрд╛рдИрдВрд▓реЗ рднрд░реНрдЪреБрдЕрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рд╕рд┐рд░реНрдЬрдирд╛ рд░ рд╕рдХреНрд░рд┐рдп рдЧрд░реНрдиреЗ рдЬрд╕реНрддрд╛ рдмрд╛рдБрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдердк рд░реВрдкрдорд╛, 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 (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 (chameleon) рдЖрджреЗрд╢рд╣рд░реВрд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдкрд╛рд░реНрдЫ, рд╕реНрд░реЛрдд рдердкреНрдЫ, рд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдкреНрд░рд╛рд░рдореНрдн рдЧрд░реНрджрдЫред pg_chameleon рдорд╛ create_replica_schema рддрд░реНрдХрд▓реЗ PostgreSQL рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрдХреАрдорд╛ (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 рддрд░реНрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╣реЗрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рдкрд░рд┐рдгрд╛рдоред

рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рднрдиреЗрдЭреИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рдкреНрд░рдХрд╛рд░реНрдп рдбреЗрдордирджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдиреНрддреНрд░рд┐рдд рд╣реБрдиреНрдЫред рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рд▓рд┐рдирдХреНрд╕ ps рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрд╛рд▓рд┐рдХрд╛рд▓рд╛рдИ рд╕реЛрдзреНрдЫреМрдВ, рддрд▓ рджреЗрдЦрд╛рдЗрдПрдХреЛ рд░реВрдкрдорд╛ред

рдкрд░рд┐рдгрд╛рдоред

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

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 рдХреЛ рд╕реНрдерд╛рдкрдирд╛ рд╕реНрдерд╛рди рд░ рд╕рдВрд╕реНрдХрд░рдг, рд╕рд╛рдереИ рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ, рд▓рд┐рдирдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ, IP рдареЗрдЧрд╛рдирд╛рд╣рд░реВ, рд░ рджреБрд╡реИ рдиреЛрдбрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдкреЛрд░реНрдЯрд╣рд░реВ рдмрд╛рд░реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред

рд╣реЛрд╕реНрдЯ
vm1
vm2

OS рд╕рдВрд╕реНрдХрд░рдг
CentOS рд▓рд┐рдирдХреНрд╕ 7.6 x86_64
CentOS рд▓рд┐рдирдХреНрд╕ 7.6 x86_64

DB рд╕рд░реНрднрд░ рд╕рдВрд╕реНрдХрд░рдг
MySQL 5.7.26
PostgreSQL .10.5 .рез

DB рдкреЛрд░реНрдЯ
3306
5832

рдЖрдИрдкреА тАЛтАЛрдареЗрдЧрд╛рдирд╛
192.168.1.107
192.168.1.112

SymmetricDS рд╕рдВрд╕реНрдХрд░рдг
SymmetricDS 3.9
SymmetricDS 3.9

SymmetricDS рд╕реНрдерд╛рдкрдирд╛ рдкрде
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS рдиреЛрдб рдирд╛рдо
рдирд┐рдЧрдо-000
рд╕реНрдЯреЛрд░-реи

рдпрд╣рд╛рдБ рд╣рд╛рдореА /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 рдлрд╛рдЗрд▓рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫред Node store-001 рд▓реЗ PostgreSQL рдбрд╛рдЯрд╛рдмреЗрд╕ рдЪрд▓рд╛рдЙрдБрдЫ рд░ 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 рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рд╕рд┐рд░реНрдЬрдирд╛-sym-рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдЪрд▓рд╛рдЙрдБрджрд╛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ рдЬрд╣рд╛рдБ рдиреЛрдбрд╣рд░реВ рдмреАрдЪрдХреЛ рдкреНрд░рддрд┐рдХреГрддрд┐рдХреЛ рдирд┐рдпрдо рд░ рджрд┐рд╢рд╛ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдиреЗрдЫред рдЕрдиреНрддрдорд╛, рдирдореВрдирд╛ рдбреЗрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдорд╛ рд▓реЛрдб рд╣реБрдиреНрдЫред

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 рдмрд╛рдЯ store-001 рдорд╛ рдирдХреНрдХрд▓ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрд╡рддрдГ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдмрд┐рдХреНрд░реА рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ (sale_transaction рд░ sale_return_line_item) рд▓рд╛рдИ рд╕реНрдЯреЛрд░-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_ рдХреЛ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рд▓рдЧрд╛рдЗрдПрдХреЛ) рд╣рд╛рд▓ рдиреЛрдб рдХрд░реНрдк-000 рдорд╛ рдорд╛рддреНрд░ рдЙрдкрд▓рдмреНрдз рдЫрдиреН рдХрд┐рдирднрдиреЗ рд╣рд╛рдореАрд▓реЗ рд╕рд┐рд░реНрдЬрдирд╛-sym-рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдХреЛ рдЫ рд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреЗрдЫреМрдВред рд░ рдиреЛрдб рд╕реНрдЯреЛрд░-001 рдорд╛ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдбрд╛рдЯрд╛ рдмрд┐рдирд╛ рдорд╛рддреНрд░ 4 рдЙрджрд╛рд╣рд░рдг рддрд╛рд▓рд┐рдХрд╛ рд╣реБрдиреЗрдЫред

рд╕рдмреИред рд╡рд╛рддрд╛рд╡рд░рдг рддрд▓ рджреЗрдЦрд╛рдЗрдПрдХрд╛ рджреБрд╡реИ рдиреЛрдбрд╣рд░реВрдорд╛ рд╕рд┐рдо рд╕рд░реНрднрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдЪрд▓рд╛рдЙрди рддрдпрд╛рд░ рдЫред

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

рд▓рдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВ SymmetricDS рд╕реНрдерд╛рдкрдирд╛ рднрдПрдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдХреЛ рд▓рдЧ рдлреЛрд▓реНрдбрд░рдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рд▓рдЧ рдлрд╛рдЗрд▓ (symmetric.log) рдорд╛ рдкрдард╛рдЗрдиреНрдЫ, рд╕рд╛рдереИ рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯрдорд╛ред рд╕рд┐рдо рд╕рд░реНрднрд░ рдЕрдм рдиреЛрдб рд╕реНрдЯреЛрд░-001 рдорд╛ рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

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

рдпрджрд┐ рддрдкрд╛рдЗрдБ vm2 рд╣реЛрд╕реНрдЯрдорд╛ sym рд╕рд░реНрднрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓рд╛рдЙрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдпрд╕рд▓реЗ PostgreSQL рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ SymmetricDS рдХреНрдпрд╛рдЯрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдкрдирд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБ рджреБрдмреИ рдиреЛрдбрд╣рд░реВрдорд╛ sym рд╕рд░реНрднрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓рд╛рдЙрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрд┐рдиреАрд╣рд░реВрд▓реЗ corp-000 рдмрд╛рдЯ рд╕реНрдЯреЛрд░-001 рдорд╛ рдбреЗрдЯрд╛ рдирдХреНрдХрд▓ рдЧрд░реНрди рдПрдХ рдЕрд░реНрдХрд╛рд╕рдБрдЧ рд╕рдордиреНрд╡рдп рдЧрд░реНрджрдЫред рдпрджрд┐ рдХреЗрд╣рд┐ рд╕реЗрдХреЗрдиреНрдб рдкрдЫрд┐ рд╣рд╛рдореАрд▓реЗ рджреБрдмреИ рдЫреЗрдЙрдорд╛ рд╕рдмреИ 4 рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рд╕реЛрдзреНрдЫреМрдВ рднрдиреЗ, рд╣рд╛рдореА рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕рдлрд▓ рднрдПрдХреЛ рджреЗрдЦреНрдиреЗрдЫреМрдВред рд╡рд╛ рддрдкрд╛рдИрд▓реЗ рдмреБрдЯрд╕реНрдЯреНрд░реНрдпрд╛рдкрд▓рд╛рдИ рдирд┐рдореНрди рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдХрд░реНрдк-001 рдмрд╛рдЯ рдиреЛрдб рд╕реНрдЯреЛрд░-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 рдорд╛ рд╕реНрдХреАрдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдкрдард╛рдЙрди рдкрдард╛рдЙрди-рд╕реНрдХреАрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫ, рд░ рддрд╛рд▓рд┐рдХрд╛ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди