.... အားလံုးအတြက္ မဟုတ္ခဲ့ရင္ေတာင္ တစ္စံုတစ္ရာ တစ္စံုတစ္ေယာက္အတြက္ ေႏြးေထြးတဲ့ ေကာင္းကင္ငယ္ေလး ျဖစ္ပါရေစ ....

Wednesday, July 18, 2012

Datebase-Sql Replication


အခု ကၽြန္ေတာ္ ေျပာမွာကေတာ ့database-mysql ကို replication လုပ္တဲ့ ပံုစံေလးပါပဲ ..
သေဘာကေတာ့ ကၽြန္ေတာ္တို႔ web server ၂ ခုကိုအသံုးျပဳျပီး ဆို္ဒ္ႏွစ္ခုအသံုးျပဳထားတဲ့ ဆာဗာအတြက္ တစ္ဖက္ဆာဗာက အသံုးျပဳျပီးျပင္ဆင္လိုက္တဲ့ database-sql ကို ေနာက္ဆာဗာတစ္ခုမွာ သီးျခားထပ္ျပီးမျပင္ေတာ့ပဲ ဆာဗာ ၁ ကိုျပင္တာနဲ႔ ဆာဗာ ၂ ကပါ ေအာ္တိုျပင္ဆင္ျခင္းကိုလုပ္ေဆာင္တဲ့ နညး္စနစ္ေလးပါ..
စမ္းၾကည့္လုိက္ရေအာင္ ..
ဒီေကာင္ကိုစမ္းမယ့္စာဖတ္သူအေနနဲ႔ အရင္ဆံုး web server apache php mysql & CMS တစ္ခုခုကို တင္ထားတဲ့ ဆာဗာ ၂ ခုကိုတည္ေဆာက္ထားျပိးသားလို႔ယူဆပါတယ္
ကၽြန္ေတာ့္ဆာဗာ ၁ (192.168.0.1) ကို master လိုမွတ္ျပီး ဆာဗာ၂ (192.168.0.4)ကို slave လို႔မွတ္ပါ.
ပထမ master server မွာသြားျပင္ပါမယ္
/var/log/ ေအာက္မွာ mysql dir တစ္ခုေဆာက္ျပီး owner change ပါမယ္

#mkdir /var/log/mysql
#chown mysql:mysql /var/log/mysql

တစ္ခုထပ္ေျပာခ်င္တာက ကၽြန္ေတာ္တို ဆာဗာ ၁ ကေန ဆာဗာ၂ ကို replication လုပ္မယ့္ database_table-name ကို mYtesTdb ကၽြန္ေတာ္သံုးသြားပါ့မယ္

/etc/my.cnf ကိုသြားျပင္ပါ့မယ္ .. ကၽြန္ေတာ္ကေတာ့ nano ကိုသံုးသြားပါ့မယ္

#nano /ect/my.cnf

[..mysqld..]
[...]
log-bin=/var/log/mysql-bin.log
bin-do-db=mYtesTdb
server-id=1
[..]

ဒီအဆင့္ျပီးရင္ SQL ကို restart  ပါမယ္


#/etc/init.d/mysql restart

SQL ထဲကို၀င္ပါေတာ့မယ္
#mysql -u root -p
:password တိုက္ေပးလုိက္ပါ
ခုဆို SQL ထဲကိုေ၇ာက္ေနပါျပီ

mysql> STOP SLAVE;
mysql>GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'မိေပးမယ့္ပတ္စ္၀ါဒ့္';
mysql>FLUSH PRIVILEGES;
mysql>SHOW MASTER STATUS;


TABLE တစ္ခုေဖၚျပေပးပါလိမ့္မယ္ .. အဲဒီထဲကမွ File name . Position number & Binlog_Do_number ေတြကိုမွတ္ထားပါ ေအာက္မွာ ဆက္သံုးရမွာျဖစ္ပါတယ္ .ေနာက္ ဒီအဆင့္မွာ သတိထားရမွာကေတာ့ ခုသံုးေနတဲ့ တာမင္နယ္ကို မပိတ္ပဲ တာမင္နယ္အသစ္တစ္ခုဖြင့္ျပီး datebase_table ကို sql change မွာပါ
အသစ္ဖြင့္လိုက္တဲ့တာမင္နယ္မွာ ေအာက္ကအတိုင္းဆက္သြားမယ္

#mysqldump -u root -pPASSWORD --opt myTesTdb > snapshot.sql

ဒီေနရာမွာေနာက္တစ္ခုထပ္ေျပာခ်င္တာက ဆာဗာ ၂ ထဲကိုဒီေျပာင္းလုိက္တဲ့ snapshot.sql ကိုသြားထည့္ရမွာပါ .ကၽြန္ေတာ္ကေတာ့ ssh နဲ႔ေခၚျပီးေတာ့ ကြန္မန္းနဲ႔ပဲထည့္လုိက္ပါေတာ့မယ္

#scp snapshot.sql root@ 192.168.0.1:/ .

အဲ့ဒါျပီးရင္ေတာ့ ခုသံုးေနတဲ့ ဒုတိယတာမင္နယ္ကိုပိတ္လုိရပါျပီ . ျပီးရင္ ပထမတာမင္နယ္ကေန ခုလို ေလာဒ့္ခ်ျပီး ထြက္လုိက္ပါ့မယ္

mysql>UNLOCK TABLES;
mysql>quit;

ဒါဆိုရင္ ဆာဗာ ၁ Master ပိုင္းျပင္တာျပီပါျပီ

ဆာဗာ ၂ slave ကိုျပင္ပါ့မယ္

#nano /etc/my.cnf

[mysqld]
[...]
server-id=2
master-host=ဆာဗာ ၁ ရဲ႕ IP ထည့္မယ္
master-user=slave_user
master-password=အေပၚမွာေပးခဲ့တဲ ပတ္စ္၀ါဒ့္
master-connect-retry=ဇယားမွာေဖၚျပေပးတဲ့ နာပါတ္
replicate-do-db=ဆာဗာ` ရဲ႕ database_tabe_name
[...]

ျပီးရင္ SQL ကို restart ခ်ပါ့မယ္

/etc/init.d/mysqld restart

ေနာက္တစ္ဆင့္အေနနဲ႔ SQL ထဲ၀င္ျပိး Table create လုပ္ပါ့မယ္
mysql>STOP SLAVE;
mysql>CREATE DATABASE myTesTdb;
mysql>quit;

ဒီအဆင့္မွာေတာ့ database_table ထဲကို snapshot.sql ကိုထည့္ပါ့မယ္

#mysql -u root -pyourrootsqlpassword myTesTdb < snapshot.sql

ေနာက္တစ္ဆင့္က SQL ထဲျပန္၀င္ျပီး ဆာဗာ၁ နဲ႔ခ်ိတ္ဖို လုပ္ပါ့မယ္

mysql>CHANGE MASTER TO MASTER_HOST='ဆာဗာ IP', MASTER_USER='slave_user',                       MASTER_PASSWORD='အေပၚမွာေပးခဲ့တဲ့ပတ္စ္၀ါဒ္',MASTER_LOG_FILE='ဇယားမွာပါတဲ့နာမည္',                    MASTER_LOG_POS=ဇယားမွသက္မွတ္နာပါတ္;
mysql>START SLAVE;
mysql>SHOW SLAVE STATUS\G
mysql> quit;

ဒါဆိုအားလံုးျပင္ဆင္ျပိးပါျပီ . ဆာဗာ၁ကေန apache database ကိုတစ္ခုခုလုပ္တာနဲ႔ ဆာဗာ၂ကိုသြားျပိးသက္ေ၇ာက္ေနမ်ာျဖစ္ပါတယ္. အားလံုးအဆင္ေျပနုိင္ပါေစ.