PostgreSQL மற்றும் MySQL ஆகியவற்றுக்கு இடையேயான குறுக்கு நகலெடுப்பையும், இரண்டு தரவுத்தள சேவையகங்களுக்கிடையில் குறுக்கு-பிரதிகளை அமைப்பதற்கான முறைகளையும் கோடிட்டுக் காட்டுவேன். பொதுவாக, குறுக்கு நகலெடுக்கப்பட்ட தரவுத்தளங்கள் ஒரே மாதிரியானவை என்று அழைக்கப்படுகின்றன, மேலும் இது ஒரு RDBMS சேவையகத்திலிருந்து மற்றொன்றுக்கு நகரும் ஒரு வசதியான முறையாகும்.
PostgreSQL மற்றும் MySQL தரவுத்தளங்கள் பொதுவாக தொடர்புடையதாகக் கருதப்படுகின்றன, ஆனால் கூடுதல் நீட்டிப்புகளுடன் அவை NoSQL திறன்களை வழங்குகின்றன. தொடர்புடைய DBMS கண்ணோட்டத்தில் PostgreSQL மற்றும் MySQL ஆகியவற்றுக்கு இடையேயான பிரதிகளை இங்கு விவாதிப்போம்.
தரவுத்தள சேவையகங்கள், நன்மைகள், வரம்புகள் மற்றும் பயன்பாட்டு நிகழ்வுகளுக்கு இடையில் நகலெடுப்பை உள்ளமைக்கும் யோசனையைப் பெற, அடிப்படைக் கொள்கைகளை மட்டுமே நாங்கள் முழு உள் செயல்பாடுகளையும் விவரிக்க மாட்டோம்.
பொதுவாக, ஒரே மாதிரியான இரண்டு தரவுத்தள சேவையகங்களுக்கிடையேயான நகலெடுப்பு பைனரி பயன்முறையில் அல்லது முதன்மை (எ.கா. வெளியீட்டாளர், மாஸ்டர் அல்லது செயலில்) மற்றும் அடிமை (சந்தாதாரர், காத்திருப்பு அல்லது செயலற்ற) ஆகியவற்றுக்கு இடையேயான வினவல்களைப் பயன்படுத்தி செய்யப்படுகிறது. ஸ்லேவ் பக்கத்தில் முதன்மை தரவுத்தளத்தின் நிகழ்நேர நகலை வழங்குவதே நகலெடுப்பின் நோக்கமாகும். இந்த வழக்கில், தரவு எஜமானரிடமிருந்து அடிமைக்கு மாற்றப்படுகிறது, அதாவது செயலில் இருந்து செயலற்றது, ஏனெனில் பிரதி ஒரு திசையில் மட்டுமே செய்யப்படுகிறது. ஆனால் நீங்கள் இரு திசைகளிலும் இரண்டு தரவுத்தளங்களுக்கு இடையில் நகலெடுப்பை அமைக்கலாம், இதனால் தரவு ஸ்லேவிலிருந்து மாஸ்டருக்கு செயலில்-செயலில் உள்ள கட்டமைப்பில் மாற்றப்படும். இரண்டு அல்லது அதற்கு மேற்பட்ட ஒரே மாதிரியான தரவுத்தள சேவையகங்களுக்கிடையில் கேஸ்கேடிங் ரெப்ளிகேஷன் உட்பட இவை அனைத்தும் சாத்தியமாகும்.ஆக்டிவ்-ஆக்டிவ் அல்லது ஆக்டிவ்-பாஸிவ் உள்ளமைவு, ஆரம்ப கட்டமைப்பு அல்லது வெளிப்புற உள்ளமைவு தீர்வுகளின் பயன்பாடு மற்றும் தற்போதுள்ள வர்த்தக பரிமாற்றங்களில் இத்தகைய திறன்களின் தேவை, கிடைக்கும் தன்மையைப் பொறுத்தது.
வெவ்வேறு தரவுத்தள சேவையகங்களுக்கு இடையில் விவரிக்கப்பட்ட உள்ளமைவு சாத்தியமாகும். மற்றொரு தரவுத்தள சேவையகத்திலிருந்து நகலெடுக்கப்பட்ட தரவை ஏற்றுக்கொள்ளும் வகையில் சேவையகத்தை உள்ளமைக்க முடியும், மேலும் நகலெடுக்கப்பட்ட தரவின் நிகழ்நேர ஸ்னாப்ஷாட்களைப் பராமரிக்கவும். MySQL மற்றும் PostgreSQL ஆகியவை பைனரி பதிவு முறைகள், வட்டு பூட்டுதல் மற்றும் ஸ்டேட்மென்ட் மற்றும் வரிசை அடிப்படையிலான முறைகள் உள்ளிட்ட பெரும்பாலான உள்ளமைவுகளை உள் அல்லது மூன்றாம் தரப்பு நீட்டிப்புகள் மூலம் வழங்குகின்றன.
ஒரு தரவுத்தள சேவையகத்திலிருந்து மற்றொரு தரவுத்தள சேவையகத்திற்கு ஒரு முறை நகர்த்துவதற்கு MySQL மற்றும் PostgreSQL இடையே குறுக்கு நகல் தேவை. இந்த தரவுத்தளங்கள் வெவ்வேறு நெறிமுறைகளைப் பயன்படுத்துகின்றன, எனவே அவற்றை நேரடியாக இணைக்க முடியாது. தரவு பரிமாற்றத்தை நிறுவ, நீங்கள் வெளிப்புற திறந்த மூல கருவியைப் பயன்படுத்தலாம், எடுத்துக்காட்டாக pg_chameleon.
pg_chameleon என்றால் என்ன
pg_chameleon என்பது MySQL இலிருந்து PostgreSQL க்கு பைதான் 3 இல் உள்ள ஒரு பிரதி அமைப்பாகும். இது திறந்த மூல mysql-replication நூலகத்தைப் பயன்படுத்துகிறது, பைத்தானில் உள்ளது. வரிசை படங்கள் MySQL அட்டவணையில் இருந்து பிரித்தெடுக்கப்பட்டு PostgreSQL தரவுத்தளத்தில் JSONB பொருள்களாக சேமிக்கப்பட்டு, பின்னர் pl/pgsql செயல்பாட்டின் மூலம் மறைகுறியாக்கப்பட்டு PostgreSQL தரவுத்தளத்தில் மீண்டும் உருவாக்கப்படும்.
pg_chameleon இன் அம்சங்கள்
ஒரே கிளஸ்டரிலிருந்து பல MySQL ஸ்கீமாக்கள் ஒரே இலக்கான PostgreSQL தரவுத்தளத்திற்கு ஒன்று முதல் பல உள்ளமைவில் நகலெடுக்கப்படலாம்.
மூல மற்றும் இலக்கு திட்டப் பெயர்கள் ஒரே மாதிரியாக இருக்க முடியாது.
அடுக்கப்பட்ட MySQL பிரதியிலிருந்து பிரதி தரவுகளை மீட்டெடுக்கலாம்.
பிழைகளை நகலெடுக்க அல்லது உருவாக்க முடியாத அட்டவணைகள் விலக்கப்பட்டுள்ளன.
ஒவ்வொரு பிரதி செயல்பாடும் டெமான்களால் கட்டுப்படுத்தப்படுகிறது.
YAML அடிப்படையிலான அளவுருக்கள் மற்றும் உள்ளமைவு கோப்புகள் மூலம் கட்டுப்படுத்தவும்.
உதாரணமாக
தொகுப்பாளர்
vm1
vm2
OS பதிப்பு
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64
டிபி சர்வர் பதிப்பு
MySQL 5.7.26
PostgreSQL 10.5
டிபி போர்ட்
3306
5433
ஐபி முகவரி
192.168.56.102
192.168.56.106
தொடங்குவதற்கு, pg_chameleon ஐ நிறுவ தேவையான அனைத்து கூறுகளையும் தயார் செய்யவும். இந்த எடுத்துக்காட்டு பைதான் 3.6.8 ஐ நிறுவுகிறது, இது மெய்நிகர் சூழலை உருவாக்கி செயல்படுத்துகிறது.
$> wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
$> tar -xJf Python-3.6.8.tar.xz
$> cd Python-3.6.8
$> ./configure --enable-optimizations
$> make altinstall
Python3.6 ஐ வெற்றிகரமாக நிறுவிய பிறகு, மெய்நிகர் சூழலை உருவாக்குதல் மற்றும் செயல்படுத்துதல் போன்ற மீதமுள்ள தேவைகளை நீங்கள் பூர்த்தி செய்ய வேண்டும். கூடுதலாக, பிப் தொகுதி சமீபத்திய பதிப்பிற்கு புதுப்பிக்கப்பட்டு pg_chameleon ஐ நிறுவ பயன்படுகிறது. கீழே உள்ள கட்டளைகள் வேண்டுமென்றே pg_chameleon 2.0.9 ஐ நிறுவுகின்றன, இருப்பினும் சமீபத்திய பதிப்பு 2.0.10 ஆகும். புதுப்பிக்கப்பட்ட பதிப்பில் புதிய பிழைகளைத் தவிர்க்க இது அவசியம்.
$> python3.6 -m venv venv
$> source venv/bin/activate
(venv) $> pip install pip --upgrade
(venv) $> pip install pg_chameleon==2.0.9
pg_chameleon ஐ செயல்படுத்த மற்றும் இயல்புநிலை கோப்பகங்கள் மற்றும் கட்டமைப்பு கோப்புகளை உருவாக்க set_configuration_files வாதத்துடன் pg_chameleon (பச்சோந்தி ஒரு கட்டளை) என்று அழைக்கிறோம்.
(venv) $> chameleon set_configuration_files
creating directory /root/.pg_chameleon
creating directory /root/.pg_chameleon/configuration/
creating directory /root/.pg_chameleon/logs/
creating directory /root/.pg_chameleon/pid/
copying configuration example in /root/.pg_chameleon/configuration//config-example.yml
இப்போது நாம் config-example.yml இன் நகலை default.yml ஆக உருவாக்குகிறோம், இதனால் அது இயல்புநிலை உள்ளமைவு கோப்பாக மாறும். இந்த உதாரணத்திற்கான மாதிரி கட்டமைப்பு கோப்பு கீழே கொடுக்கப்பட்டுள்ளது.
$> cat default.yml
---
#global settings
pid_dir: '~/.pg_chameleon/pid/'
log_dir: '~/.pg_chameleon/logs/'
log_dest: file
log_level: info
log_days_keep: 10
rollbar_key: ''
rollbar_env: ''
# type_override allows the user to override the default type conversion into a different one.
type_override:
"tinyint(1)":
override_to: boolean
override_tables:
- "*"
#postgres destination connection
pg_conn:
host: "192.168.56.106"
port: "5433"
user: "usr_replica"
password: "pass123"
database: "db_replica"
charset: "utf8"
sources:
mysql:
db_conn:
host: "192.168.56.102"
port: "3306"
user: "usr_replica"
password: "pass123"
charset: 'utf8'
connect_timeout: 10
schema_mappings:
world_x: pgworld_x
limit_tables:
# - delphis_mediterranea.foo
skip_tables:
# - delphis_mediterranea.bar
grant_select_to:
- usr_readonly
lock_timeout: "120s"
my_server_id: 100
replica_batch_size: 10000
replay_max_rows: 10000
batch_retention: '1 day'
copy_max_memory: "300M"
copy_mode: 'file'
out_dir: /tmp
sleep_loop: 1
on_error_replay: continue
on_error_read: continue
auto_maintenance: "disabled"
gtid_enable: No
type: mysql
skip_events:
insert:
- delphis_mediterranea.foo #skips inserts on the table delphis_mediterranea.foo
delete:
- delphis_mediterranea #skips deletes on schema delphis_mediterranea
update:
இந்த எடுத்துக்காட்டில் உள்ள உள்ளமைவு கோப்பு, மூல மற்றும் இலக்கு சூழல்களுக்கு ஏற்ப சிறிய மாற்றங்களுடன் கூடிய மாதிரி pg_chameleon கோப்பாகும், மேலும் கட்டமைப்பு கோப்பின் வெவ்வேறு பிரிவுகளின் கண்ணோட்டம் கீழே உள்ளது.
default.yml உள்ளமைவு கோப்பில் உலகளாவிய அமைப்புகளின் ஒரு பகுதி உள்ளது, அங்கு பூட்டுக் கோப்பின் இருப்பிடம், பதிவுகளின் இருப்பிடம், பதிவுகளுக்கான சேமிப்பக காலம் போன்ற அமைப்புகளை நீங்கள் நிர்வகிக்கலாம். அடுத்து வகை மேலெழுதல் பிரிவு வரும். நகலெடுக்கும் போது வகைகளை மீறுவதற்கான விதிகளின் தொகுப்பு. tinyint(1) ஐ பூலியன் மதிப்பாக மாற்றும் வகை மேலெழுதுதல் விதிக்கு எடுத்துக்காட்டு இயல்புநிலையாகும். அடுத்த பகுதியில், இலக்கு தரவுத்தளத்திற்கான இணைப்பு விவரங்களை நாங்கள் குறிப்பிடுகிறோம். எங்கள் விஷயத்தில், இது ஒரு PostgreSQL தரவுத்தளமாகும், இது pg_conn என நியமிக்கப்பட்டுள்ளது. கடைசிப் பிரிவில், மூலத் தரவைக் குறிப்பிடுகிறோம், அதாவது, மூல தரவுத்தளத்தின் இணைப்பு அளவுருக்கள், மூல மற்றும் இலக்கு தரவுத்தளங்களுக்கு இடையிலான மேப்பிங் திட்டம், தவிர்க்க வேண்டிய அட்டவணைகள், காத்திருப்பு நேரம், நினைவகம், தொகுப்பு அளவு. "மூலங்கள்" என்பது பன்மை என்பதை நினைவில் கொள்ளவும், அதாவது பல மூல தரவுத்தளங்களை ஒரு இலக்கு தரவுத்தளத்தில் சேர்க்கலாம்.
உதாரண தரவுத்தளமான world_x ஆனது MySQL சமூகம் எடுத்துக்காட்டுகளாக வழங்கும் வரிசைகளுடன் 4 அட்டவணைகளைக் கொண்டுள்ளது. அதை பதிவிறக்கம் செய்யலாம்
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 பக்கத்தில், MySQL தரவுத்தளத்தில் இருந்து மாற்றங்களை ஏற்றுக்கொள்ளும் db_replica தரவுத்தளம் உருவாக்கப்பட்டது. 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 வாதம், நாம் ஏற்கனவே விவாதித்தபடி, 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 வாதத்தைப் பயன்படுத்தி பிழைகளைக் காணலாம்.
நாம் ஏற்கனவே கூறியது போல், ஒவ்வொரு பிரதி செயல்பாடும் டெமான்களால் கட்டுப்படுத்தப்படுகிறது. அவற்றைப் பார்க்க, கீழே காட்டப்பட்டுள்ளபடி, Linux ps கட்டளையுடன் செயல்முறை அட்டவணையை வினவுகிறோம்.
கீழே காட்டப்பட்டுள்ளபடி, நிகழ்நேரத்தில் அதைச் சோதிக்கும் வரை பிரதி உள்ளமைக்கப்பட்டதாகக் கருதப்படாது. நாங்கள் ஒரு அட்டவணையை உருவாக்கி, MySQL தரவுத்தளத்தில் இரண்டு பதிவுகளைச் செருகுவோம், மேலும் டெமான்களைப் புதுப்பிக்க pg_chameleon இல் உள்ள sync_tables வாதத்தை அழைக்கிறோம் மற்றும் பதிவுகளுடன் அட்டவணையை PostgreSQL தரவுத்தளத்தில் பிரதிபலிக்கிறோம்.
mysql> create table t1 (n1 int primary key, n2 varchar(10));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values (1,'one');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values (2,'two');
Query OK, 1 row affected (0.00 sec)
$> chameleon sync_tables --tables world_x.t1 --config default --source mysql
Sync tables process for source mysql started.
சோதனை முடிவுகளை உறுதிப்படுத்த, PostgreSQL தரவுத்தளத்திலிருந்து அட்டவணையை வினவவும் மற்றும் வரிசைகளை வெளியிடவும்.
$> psql -p 5433 -U usr_replica -d db_replica -c "select * from pgworld_x.t1";
n1 | n2
----+-------
1 | one
2 | two
நாம் ஒரு இடம்பெயர்வு செய்கிறோம் என்றால், பின்வரும் pg_chameleon கட்டளைகள் அதன் முடிவாக இருக்கும். அனைத்து இலக்கு அட்டவணைகளின் வரிசைகளும் நகலெடுக்கப்பட்டுள்ளன என்பதை உறுதிசெய்த பிறகு கட்டளைகள் செயல்படுத்தப்பட வேண்டும், மேலும் இதன் விளைவாக மூல தரவுத்தளம் அல்லது பிரதி திட்டம் (sch_chameleon) பற்றிய குறிப்புகள் இல்லாமல் நேர்த்தியாக நகர்த்தப்பட்ட PostgreSQL தரவுத்தளமாக இருக்கும்.
$> chameleon stop_replica --config default --source mysql
$> chameleon detach_replica --config default --source mysql --debug
விரும்பினால், அசல் உள்ளமைவு மற்றும் நகலெடுக்கும் திட்டத்தை நீக்க பின்வரும் கட்டளைகளைப் பயன்படுத்தலாம்.
$> chameleon drop_source --config default --source mysql --debug
$> chameleon drop_replica_schema --config default --source mysql --debug
pg_chameleon இன் நன்மைகள்
எளிதான அமைப்பு மற்றும் கட்டமைப்பு.
தெளிவான பிழைச் செய்திகளுடன் எளிதில் சரிசெய்தல் மற்றும் முரண்பாடுகளை அடையாளம் காணவும்.
மீதமுள்ள உள்ளமைவை மாற்றாமல், துவக்கத்திற்குப் பிறகு, கூடுதல் சிறப்பு அட்டவணைகளை நகலெடுப்பதில் சேர்க்கலாம்.
ஒரு இலக்கு தரவுத்தளத்திற்கு பல மூல தரவுத்தளங்களை கட்டமைக்க முடியும், மேலும் நீங்கள் ஒன்று அல்லது அதற்கு மேற்பட்ட MySQL தரவுத்தளங்களில் இருந்து தரவை ஒரு 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 மற்றும் பிற கிளவுட் தரவுத்தள நிகழ்வுகள், எ.கா. Azure, முதலியன கிடைக்கும் அம்சங்கள்: தரவுத்தளம் மற்றும் கோப்பு ஒத்திசைவு, மல்டி-மாஸ்டர் தரவுத்தள நகல், வடிகட்டப்பட்ட ஒத்திசைவு, மாற்றம் மற்றும் பிற. இது ஒரு ஜாவா கருவி மற்றும் JRE அல்லது JDK இன் நிலையான வெளியீடு தேவைப்படுகிறது (பதிப்பு 8.0 அல்லது அதற்கு மேற்பட்டது). இங்கே, மூல தரவுத்தளத்தில் உள்ள தூண்டுதல்களுக்கான தரவு மாற்றங்கள் பதிவு செய்யப்பட்டு, தொகுதிகள் வடிவில் பொருத்தமான இலக்கு தரவுத்தளத்திற்கு அனுப்பப்படும்.
சமச்சீர்டிஎஸ் அம்சங்கள்
கருவியானது இயங்குதளம் சார்ந்தது, அதாவது இரண்டு அல்லது அதற்கு மேற்பட்ட வெவ்வேறு தரவுத்தளங்கள் தரவைப் பரிமாறிக்கொள்ள முடியும்.
தொடர்புடைய தரவுத்தளங்கள் தரவு மாற்ற பதிவுகளைப் பயன்படுத்தி ஒத்திசைக்கப்படுகின்றன, அதே நேரத்தில் கோப்பு முறைமை அடிப்படையிலான தரவுத்தளங்கள் கோப்பு ஒத்திசைவைப் பயன்படுத்துகின்றன.
விதிகளின் தொகுப்பின் அடிப்படையில் புஷ் மற்றும் புல் முறைகளைப் பயன்படுத்தி இருவழி நகலெடுப்பு.
பாதுகாப்பான மற்றும் குறைந்த அலைவரிசை நெட்வொர்க்குகளில் தரவு பரிமாற்றம் சாத்தியமாகும்.
ஒரு தோல்விக்குப் பிறகு கணுக்கள் மீண்டும் செயல்படத் தொடங்கும் போது தானியங்கி மீட்பு மற்றும் தானியங்கி மோதல் தீர்வு.
கிளவுட் இணக்கமான மற்றும் சக்திவாய்ந்த நீட்டிப்பு APIகள்.
உதாரணமாக
சமச்சீர்டிஎஸ் இரண்டு வழிகளில் ஒன்றில் கட்டமைக்கப்படலாம்:
இரண்டு அடிமை (குழந்தை) கணுக்களுக்கு இடையில் தரவுப் பிரதிகளை மையமாக ஒருங்கிணைக்கும் ஒரு முதன்மை (பெற்றோர்) முனை, மற்றும் குழந்தை முனைகளுக்கு இடையேயான தொடர்பு பெற்றோர் மூலமாக மட்டுமே நிகழ்கிறது.
செயலில் உள்ள முனை (நோட் 1) மற்றொரு செயலில் உள்ள முனையுடன் (நோட் 2) இடைத்தரகர் இல்லாமல் நகலெடுப்பதற்காக தொடர்பு கொள்ளலாம்.
இரண்டு விருப்பங்களிலும், புஷ் மற்றும் புல்லைப் பயன்படுத்தி தரவு பரிமாற்றம் நிகழ்கிறது. இந்த எடுத்துக்காட்டில், செயலில்-செயலில் உள்ள கட்டமைப்பைக் கருத்தில் கொள்வோம். முழு கட்டிடக்கலையையும் விவரிக்க அதிக நேரம் எடுக்கும், எனவே உங்கள் ஆராய்ச்சியைச் செய்யுங்கள்.
SymmetricDS ஐ நிறுவுவது மிகவும் எளிது: zip கோப்பின் திறந்த மூல பதிப்பைப் பதிவிறக்கவும்
தொகுப்பாளர்
vm1
vm2
OS பதிப்பு
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64
டிபி சர்வர் பதிப்பு
MySQL 5.7.26
PostgreSQL 10.5
டிபி போர்ட்
3306
5832
ஐபி முகவரி
192.168.1.107
192.168.1.112
சமச்சீர்டிஎஸ் பதிப்பு
சமச்சீர்டிஎஸ் 3.9
சமச்சீர்டிஎஸ் 3.9
SymmetricDS நிறுவல் பாதை
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20
சமச்சீர்டிஎஸ் முனை பெயர்
கார்ப்-000
கடை-001
இங்கே நாம் /usr/local/symmetric-server-3.9.20 இல் SymmetricDS ஐ நிறுவுகிறோம், மேலும் பல்வேறு துணை அடைவுகள் மற்றும் கோப்புகள் அங்கு சேமிக்கப்படும். மாதிரிகள் மற்றும் இயந்திரங்களின் துணை அடைவுகளில் நாங்கள் ஆர்வமாக உள்ளோம். மாதிரிகள் கோப்பகத்தில் முனை பண்புகளுடன் கூடிய எடுத்துக்காட்டு உள்ளமைவு கோப்புகள் மற்றும் நீங்கள் விரைவாக தொடங்குவதற்கான எடுத்துக்காட்டு SQL ஸ்கிரிப்ட்கள் உள்ளன.
மாதிரிகள் கோப்பகத்தில் முனை பண்புகளுடன் மூன்று உள்ளமைவு கோப்புகளைக் காண்கிறோம் - பெயர் ஒரு குறிப்பிட்ட திட்டத்தில் முனையின் தன்மையைக் காட்டுகிறது.
corp-000.properties
store-001.properties
store-002.properties
அடிப்படை 3-முனை வடிவமைப்பிற்கு (விருப்பம் 1) தேவையான அனைத்து உள்ளமைவு கோப்புகளையும் SymmetricDS கொண்டுள்ளது, அதே கோப்புகளை 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 என்பது பிரதி தரவுத்தளமாகும். register.url ஹோஸ்ட் vm2 ஐ ஹோஸ்ட் vm1 ஐ தொடர்பு கொள்ளவும் மற்றும் அதிலிருந்து உள்ளமைவு விவரங்களை பெறவும் அனுமதிக்கிறது.
$> cat engines/store-001.properties
engine.name=store-001
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://192.168.1.112:5832/pgdb_replica
db.user=postgres
db.password=admin123
registration.url=http://192.168.1.107:31415/sync/corp-000
group.id=store
external.id=001
நிறைவு செய்யப்பட்ட SymmetricDS எடுத்துக்காட்டில் இரண்டு தரவுத்தள சேவையகங்களுக்கு (இரண்டு முனைகள்) இடையே இருவழி நகலெடுப்பை அமைப்பதற்கான அளவுருக்கள் உள்ளன. கீழே உள்ள படிகள் ஹோஸ்ட் 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
எடுத்துக்காட்டில், உருப்படி மற்றும் item_selling_price அட்டவணைகள் தானாகவே corp-000 இலிருந்து store-001 வரை நகலெடுக்கப்படும், மேலும் விற்பனை அட்டவணைகள் (sale_transaction மற்றும் sale_return_line_item) தானாகவே store-001 இலிருந்து corp-000 வரை நகலெடுக்க கட்டமைக்கப்படும். corp-2 இலிருந்து தரவைப் பெற அதைத் தயாரிக்க, ஹோஸ்ட் vm001 (ஸ்டோர்-000) இல் உள்ள PostgreSQL தரவுத்தளத்தில் ஒரு திட்டத்தை உருவாக்குகிறோம்.
vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> ./dbimport --engine store-001 --format XML create_sample.xml
vm1 இல் உள்ள MySQL தரவுத்தளத்தில் எடுத்துக்காட்டு அட்டவணைகள் மற்றும் சமச்சீர்டிஎஸ் அட்டவணை அட்டவணைகள் உள்ளனவா என்பதை உறுதிப்படுத்திக் கொள்ளவும். SymmetricDS சிஸ்டம் டேபிள்கள் (sym_ உடன் முன்னொட்டு) தற்போது node corp-000 இல் மட்டுமே கிடைக்கின்றன, ஏனெனில் அங்கு தான் create-sym-tables கட்டளையை இயக்கினோம், மேலும் நகலெடுப்பை நிர்வகிப்போம். நோட் ஸ்டோர்-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 ஹோஸ்டில் சிம் சர்வர் செயல்முறையை இயக்கினால், அது PostgreSQL தரவுத்தளத்தில் SymmetricDS அட்டவணை அட்டவணைகளையும் உருவாக்கும். நீங்கள் இரண்டு முனைகளிலும் சிம் சர்வர் செயல்முறையை இயக்கினால், அவை corp-000 இலிருந்து store-001 வரையிலான தரவை நகலெடுக்க ஒருவருக்கொருவர் ஒருங்கிணைக்கின்றன. சில வினாடிகளுக்குப் பிறகு, இருபுறமும் உள்ள 4 அட்டவணைகளையும் வினவினால், நகலெடுப்பது வெற்றிகரமாக இருப்பதைக் காண்போம். அல்லது பின்வரும் கட்டளையுடன் corp-001 இலிருந்து node store-000 க்கு bootstrap ஐ அனுப்பலாம்.
vm1$> ./symadmin --engine corp-000 reload-node 001
இந்த கட்டத்தில், நோட் corp-000 (ஹோஸ்ட்: vm1) இல் உள்ள MySQL தரவுத்தளத்தில் உள்ள உருப்படி அட்டவணையில் ஒரு புதிய பதிவு செருகப்பட்டது, மேலும் நோட் ஸ்டோர்-001 (ஹோஸ்ட்: vm2) இல் உள்ள PostgreSQL தரவுத்தளத்தில் அதன் பிரதிகளை நீங்கள் சரிபார்க்கலாம். corp-000 இலிருந்து store-001 க்கு தரவை நகர்த்துவதற்கான ஒரு இழு செயல்பாட்டைக் காண்கிறோம்.
mysql> insert into item values ('22000002','Jelly Bean');
Query OK, 1 row affected (0.00 sec)
vm2$> psql -p 5832 -U postgres pgdb_replica -c "select * from item"
item_id | name
----------+-----------
11000001 | Yummy Gum
22000002 | Jelly Bean
(2 rows)
Store-001 இலிருந்து corp-000 க்கு தரவை நகர்த்துவதற்கு புஷ் ஆபரேஷனைச் செய்ய, sale_transaction அட்டவணையில் ஒரு பதிவைச் செருகி, நகலெடுப்பது வெற்றிகரமாக உள்ளதா என்பதைச் சரிபார்க்கிறோம்.
MySQL மற்றும் PostgreSQL தரவுத்தளங்களுக்கிடையில் எடுத்துக்காட்டு அட்டவணைகளின் இருவழி நகலெடுப்பின் வெற்றிகரமான அமைப்பை நாங்கள் காண்கிறோம். புதிய பயனர் அட்டவணைகளுக்குப் பிரதியை அமைக்க, இந்தப் படிகளைப் பின்பற்றவும்: உதாரணமாக அட்டவணை t1 ஐ உருவாக்கி அதன் பிரதி விதிகளை பின்வருமாறு கட்டமைக்கிறோம். இந்த வழியில் நாம் corp-000 இலிருந்து store-001 க்கு மட்டுமே பிரதியை உள்ளமைக்கிறோம்.
mysql> create table t1 (no integer);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into sym_channel (channel_id,create_time,last_update_time)
values ('t1',current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)
mysql> insert into sym_trigger (trigger_id, source_table_name,channel_id,
last_update_time, create_time) values ('t1', 't1', 't1', current_timestamp,
current_timestamp);
Query OK, 1 row affected (0.01 sec)
mysql> insert into sym_trigger_router (trigger_id, router_id,
Initial_load_order, create_time,last_update_time) values ('t1',
'corp-2-store-1', 1, current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)
பின்னர் உள்ளமைவு திட்ட மாற்றம் குறித்து அறிவிக்கப்படுகிறது, அதாவது, புதிய அட்டவணையைச் சேர்ப்பது, ஒத்திசைவு-தூண்டுதல்கள் வாதத்துடன் symadmin கட்டளையைப் பயன்படுத்தி, அட்டவணை வரையறைகளை வரைபடமாக்க தூண்டுதல்களை மீண்டும் உருவாக்குகிறது. ஸ்கீமா மாற்றங்களை நோட் ஸ்டோர்-001க்கு அனுப்ப send-schema செயல்படுத்தப்படுகிறது, மேலும் அட்டவணை t1 இன் பிரதி கட்டமைக்கப்படுகிறது.
vm1$> ./symadmin -e corp-000 --node=001 sync-triggers
vm1$> ./symadmin send-schema -e corp-000 --node=001 t1
SymmetricDS இன் நன்மைகள்
மூன்று முனை அல்லது இரண்டு முனை சுற்றுகளை உருவாக்குவதற்கான அளவுருக்கள் கொண்ட கோப்புகளின் ஆயத்த தொகுப்பு உட்பட எளிதான நிறுவல் மற்றும் உள்ளமைவு.
சேவையகங்கள், மடிக்கணினிகள் மற்றும் மொபைல் சாதனங்கள் உட்பட குறுக்கு-தளம் தரவுத்தளங்கள் மற்றும் இயங்குதள சுதந்திரம்.
எந்தவொரு தரவுத்தளத்தையும் உள்ளூரில், WAN அல்லது கிளவுட்டில் உள்ள வேறு எந்த தரவுத்தளத்திற்கும் நகலெடுக்கவும்.
ஒரு ஜோடி தரவுத்தளங்கள் அல்லது வசதியான நகலெடுப்பதற்கு பல ஆயிரம் மூலம் உகந்த வேலை சாத்தியம்.
GUI மற்றும் சிறந்த ஆதரவுடன் கட்டண பதிப்பு.
SymmetricDS இன் தீமைகள்
அட்டவணை அட்டவணைகளை ஏற்றுவதற்கு SQL அறிக்கைகள் மூலம் கட்டளை வரியில் நகலெடுக்கும் விதிகள் மற்றும் திசையை கைமுறையாக வரையறுக்க வேண்டும், இது சிரமமாக இருக்கும்.
நகலெடுப்பதற்கான விதிகள் மற்றும் திசையை வரையறுக்கும் SQL அறிக்கைகளை உருவாக்க நீங்கள் ஸ்கிரிப்ட்களைப் பயன்படுத்தாத வரை, நகலெடுப்பதற்காக பல அட்டவணைகளை அமைப்பது கடினமானதாக இருக்கும்.
பதிவுகளில் அதிக தகவல்கள் பதிவு செய்யப்படுகின்றன, மேலும் சில சமயங்களில் நீங்கள் பதிவு கோப்பை ஒழுங்கமைக்க வேண்டும், இதனால் அது அதிக இடத்தை எடுத்துக் கொள்ளாது.
SymmetricDS க்கான முடிவுகள்
கோப்புகளை நகலெடுக்கவும் ஒத்திசைக்கவும் இரண்டு, மூன்று அல்லது பல ஆயிரம் முனைகளுக்கு இடையில் இருவழி நகலெடுப்பை அமைக்க SymmetricDS உங்களை அனுமதிக்கிறது. இது ஒரு தனித்துவமான கருவியாகும், இது ஒரு முனையில் நீண்ட காலத்திற்குப் பிறகு தானியங்கி தரவு மீட்பு, HTTPS வழியாக முனைகளுக்கு இடையே பாதுகாப்பான மற்றும் திறமையான தரவு பரிமாற்றம், விதிகளின் அடிப்படையில் தானியங்கி மோதல் மேலாண்மை போன்ற பல பணிகளைச் செய்கிறது. SymmetricDS செய்கிறது. எந்தவொரு தரவுத்தளங்களுக்கிடையில் பிரதிபலிப்பு, எனவே, இடம்பெயர்வு, இடம்பெயர்வு, விநியோகம், வடிகட்டுதல் மற்றும் தளங்களில் தரவை மாற்றுதல் உள்ளிட்ட பல்வேறு வகையான காட்சிகளுக்கு இது பயன்படுத்தப்படலாம்.
உதாரணம் அதிகாரியை அடிப்படையாகக் கொண்டது
ஆதாரம்: www.habr.com