MySQL Replication


sqlreplicate

ခုရက္ပိုင္းေပ်ာက္ေနျပန္ပါၿပီ။ မအားလပ္တာကတေၾကာင္း၊ 4Mbps Fiber Optics ကိုယ္တိုင္ကိုက SEA GAME အေၾကာင္းျပသျဖင့္လား၊ ဘာလားမသိပါ။ တခါ တခါ လံုး၀ကို Request Time Out က်သြားပါတယ္။ ငုတ္တုတ္ထိုင္ေနရတဲ့ရက္က မ်ားပါတယ္။  IT Director က ကၽြန္ေတာ့္ကို MySQL Database Server ကို Sync လုပ္ရန္ တာ၀န္ေပးပါတယ္။ ဒီထဲမွာ အဲဒီအပိုင္းကိုပဲ တာ၀န္ယူရပါတယ္။  ဒီထဲမွာ ဆိုတာက အမွန္က Database Server က Microsoft SQL Server ကိုသံုးထားပါတယ္။ အဲဒီ Database ကို opensource တခုျဖစ္တဲ့ MySQL ထဲကို ေျပာင္းထဲ့ပါမယ္။ အဲဒီ MySQL Server ကိုမွ ကၽြန္ေတာ္က ရံုးက MySQL Server ထဲကို လွမ္းၿပီးေတာ့ (Sync) Replicate လုပ္ေပးရမွာဗ်။ ကဲ.. စၾကရေအာင္။ အေျခခံေတာ့ရွိရမွာေပါ့ဗ်ာ။ ထပ္ေျပာမေနေတာ့ပါဘူး။ကၽြန္ေတာ္က ေရာသမေမႊ လုပ္တတ္ပါတယ္။ ဘာပဲျဖစ္ျဖစ္ အဆင္ေျပရင္ၿပီးတာပါပဲ။ GUI ေကာ၊ CUI ေကာ ခ်မယ္ေနာ္။ Ready !!!

ရွင္းရွင္းလင္းလင္းျဖစ္သြားေအာင္ Server Site (Remote Site) နဲ႕ Client Site ဆိုပီးခြဲေျပာပါမယ္။ Server Site က Master Server ျဖစ္ၿပီးေတာ့၊ Client Site ကေတာ့ Slave Server ေပါ့။ Master Server က DB တစ္ခုလံုးကို Slave Server က လွမ္းၿပီး Sync လုပ္မယ္။ ဘယ္ platform ပဲျဖစ္ျဖစ္ဒီနည္းသံုးလို႕ရပါတယ္။ Linux ပဲျဖစ္ျဖစ္၊ Windows ပဲျဖစ္ျဖစ္ပါ။ သံုးတတ္ရင္လြယ္ပါတယ္ :P(မသံုးတတ္ရင္ မလြယ္ ဘူးေပါ့)။ ကၽြန္ေတာ္လုပ္တုန္းကေတာ့ Master Server က Windows 7 ပါ။ Slave Server ကေတာ့ Ubuntu Server ပါ။ အဲ့ေတာ့ကာ ေျပာရင္ရႈပ္ေနမွာဆိိုးလို႕ Windows to Windows ဟာပဲ ေျပာျပပါမယ္။

# ပထမဆံုး XAMPP ကို Install လုပ္လိုက္ပါ။

# ၿပီးေတာ့ phpmyadmin လည္းသံုးပါမယ္။ အဲ့ဒီအတြက္ေၾကာင့္ MySQL Setting ကို နည္းနည္းျပင္ဖို႕လိုပါမယ္။ XAMPP ရဲ႕ default MySQL Password က blank ပါ။ အဲေတာ့ Security ရွိသြားေအာင္ Password ထည့္မယ္၊ေျပာင္းပါမယ္။ ၿပီးရင္အဲ့ေျပာင္းထားတဲ့ Password ကို xampp\phpmyadmin\config.inc.php ထဲမွာ သြားေပးရပါမယ္။ နည္းနည္းေတာင္ အေသးစိတ္ေနပါပီ။ တိုတိုေျပာရရင္ phpmyadmin သံုးလို႕ရေအာင္ အရင္လုပ္ပါမယ္။ MySQL Server ကို stop အရင္လုပ္လိုက္ပါမယ္။

# အခုေျပာေနတာ Master Server ဘက္ျခမ္းေရာ၊ Slave Server ဘက္ျခမ္းအထိပါ လုပ္ေပးရမွာပါ။ ကဲ… ၿပီးရင္ Master Server ဘက္ျခမ္းရဲ႕ MySQL ကို Master ျဖစ္ေအာင္ လုပ္မွာျဖစ္တဲ့အတြက္ config ခ်ပါမယ္။ အေသးစိတ္သိခ်င္ ရင္ေတာ့ official site မွာသြားဖတ္ၾကည့္ႏိုင္ပါတယ္။

# XAMPP ရဲ႕ MySQL Config ဆိုတာေလးကို ကလစ္တခ်က္ႏွိပ္လိုက္ပါ။ အဲဒီမွာ my.ini ဆိုတာေလးကို ႏွိပ္လိုက္ပါ။ notepad နဲ႕တက္လာပါလိမ့္မယ္။

# အဲဒီမွာ [mysqld] section မွာ ႏွစ္ေၾကာင္းသြားေရးပါမယ္။ log-bin=mysql-bin နဲ႕ server-id=1 ဆိုပီးသြားေရးေပးရပါမယ္။ နမူနာေအာက္မွာျပထားပါတယ္။

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port= 3306
socket = “C:/xampp/mysql/mysql.sock”
basedir = “C:/xampp/mysql”
tmpdir = “C:/xampp/tmp”
datadir = “C:/xampp/mysql/data”
pid_file = “mysql.pid”
log-bin=mysql-bin
server-id=1

# ၿပီးရင္ save လိုက္ပါ။ log-bin=mysql-bin ဆိုတာက Master ျဖစ္ဖို႕အတြက္ binlogging က enable ျဖစ္ေနရပါမယ္။ ဒါမွ Slave က Sync လွမ္းလုပ္တဲ့အခါက်ရင္ တိုက္ၾကည့္စစ္ေဆးႏိုင္ေအာင္အတြက္ျဖစ္ပါတယ္။ ေနာက္က server-id=1 ဆိုတာကေတာ့ ကၽြန္ေတာ္တို႕ Computer မွာသံုးတဲ့ Internet Protocol (IP) နဲ႕တူပါတယ္။ တစ္စက္နဲ႕ တစ္စက္ လွမ္းခ်ိတ္ဖို႕ IP လိုသလိုမ်ိဳးေပါ့။ သူကေတာ့ server-id နဲ႕သြားပါတယ္။ my.ini မွာ လုပ္ဖို႕လိုတာဒါအကုန္ပါပဲ။

# သာမန္ဆိုရင္ေျပာတာပါ။ တျခား အသံုးျပဳလို႕ရတဲ့ inno_db_flush ဆိုပီး အမ်ားႀကီး ရွိပါေသးတယ္။ MySQL Server ကို start ျပန္လုပ္လိုက္ပါ။ မွားၿပီး config ခ်မိရင္ status မွာ နီနီစာသားေတြ ေပၚလာပီး debug error ထုတ္ျပပါလိမ့္မယ္။

# Master ထဲက database ေတြကို အရင္ဆံုး dump လုပ္ပါမယ္။ ၿပီးရင္ slave ထဲထည့္ဖို႕ေပါ့။ dump လုပ္ရျခင္းအေၾကာင္းအရင္းကေတာ့ ခုနက Master ရဲ႕ bin-log ေတြနဲ႕ tables postion စတာေတြကို slave မွာ connect မလုပ္ခင္ တူေနဖို႕အတြက္ပါပဲ။ MySQL ထဲကို ၀င္ပါမယ္။

# > myql -uroot -p

# database ကို လက္ရွိရွိေနတဲ့ tables position နဲ႕ bin log မွာ ရပ္ေနေစဖို႕အတြက္ lock ခ်ပါမယ္။

# mysql > flush tables with read lock;

# mysql > show master status; ဆိုပီးလုပ္လိုက္ရင္ master-log-file နဲ႕ master-log-pos ရဲ႕ data ေတြကိုလာျပပါလိမ့္မယ္။ အဲတာေတြကို စာရြက္မွာ မွတ္လိုက္ပါ။ ဒါဆို အိုေကပါပီ။ၿပီးရင္….

# quit နဲ႕ထြက္လိုက္ပါ။ စတင္ၿပီး dump လုပ္ပါမယ္။

> mysqldump -uroot -p –all-databases –master-data > fulldb.db

ဆိုပီး shell ထဲမွာ Enter ေခါက္လိုက္ပါ။ ဒါဆို shell ရဲ႕ path လမ္းေၾကာင္းထဲမွာ ခုနက dump ေဒတာ ေရာက္ရွိေနပါလိမ့္မယ္။ ၿပီးရင္ lock ျပန္ျဖည္ေပးရပါမယ္။ ကၽြန္ေတာ္ကေတာ့ slave server ဘက္ျခမ္းမွာ db ကို execute လုပ္ၿပီးမွ unlock tables; လုပ္ပါတယ္။ error တက္ဖူးထားလို႕ပါ 😛

> unlock tables;

# ဒါဆိုရင္ေတာ့ Master ဘက္အျခမ္းကၿပီးသင့္သေလာက္ၿပီးပါၿပီ။ ကိုယ့္ကို လာခ်ိတ္ထားတဲ့ slave host ကို ၾကည့္တာေလာက္ပဲ က်န္ပါေတာ့တယ္။

# Slave ဘက္အျခမ္းကို သြားက်အံုးစို႕။ ခုနက Master အတိုင္း my.ini မွာ ႏွစ္ခုပဲ သြားျပင္ပါမယ္။ ဘာျဖစ္မယ္လို႕ ထင္ပါသလဲ။ server-id ပါ။ မတူတာေပးလိုက္ပါ။ ကၽြန္ေတာ္ကေတာ့ server-id=2 လို႕ေပးပါတယ္။ၿပီးရင္ report-host ထည့္ပါမယ္။ အဲဒီလိုထည့္ပါမွ phpmyadmin မွာတက္ၾကည့္ရင္ေပၚပါလိမ့္မယ္။ report-host=sql-slave ေပါ့။ (sql-slave) ဆိုတာ local မွာဆိုရင္ေတာ့ computer name ေပါ့၊ Internet မွာဆိုရင္ေတာ့ Host Name ေပါ့ဂ်ာ။ (ေမာလိုက္တာ…   :P)

# ကဲ.. ၿပီးရင္ ခုနက Master Server က dump ကုိ Slave Server ထဲ Execute လုပ္ပါမယ္။

> mysql -uroot -p < fulldb.db

ဒါဆိုရင္ Master Server ထဲက db ေတြ အကုန္ေရာက္ကုန္ပါပီ။ Master Server ကိုခ်ိတ္ဖို႕အတြက္ လိုအပ္တဲ့ MySQL Entry ေတြရိုက္ထည့္ရပါဦးမယ္။ Master Server မွာေပးထားတဲ့ password ပါျဖစ္သြားပါမယ္။ လိုအပ္တဲ့အတြက္ MySQL Service ကို restart လုပ္ေပးသင့္ရင္ လုပ္ေပးပါ။

# mysql> use mysql;

# mysql> change master to

> master_log_file = ‘mysql-bin.0004’ ,

> master_log_pos = 199;

ဆိုပီး ခုနက Master Server မွာ Show Master Status လုပ္တုန္းက ေပၚလာတဲ့ entry ေတြကို ထည့္ေပးရပါမယ္။ ကၽြန္ေတာ္ခုထည့္ထားတဲ့ဟာက အစမ္းပါ။ ကိုယ့္ဖာသာေပၚလာတဲ့ဟာကို ေျပာင္းထည့္ေပးရပါမယ္။

# ၿပီးရင္ Master Server ကိုသြားလိုက္ပါ။ phpmyadmin သံုးပါမယ္။

# ၀င္၀င္ခ်င္းမွာပဲ Replication ဆိုတဲ့ Tab ကိုရွာလိုက္ပါ။ မေတြ႕ဘူးဆိုရင္more နဲ႕ ဆက္ၾကည့္ပါ။ ၿပီးရင္ ႏွိပ္ပါ။

# Master Replication ဆိုတဲ့ေနရာမွာ ေပၚေနမွာျဖစ္ပါတယ္။ Replication User တစ္ခုေဆာက္လုိက္ပါ။ အဲဒီအေကာင့္နဲ႕ Slave Server မွာ phpmyadmin ဆက္သံုးပါမယ္။

# Slave Server မွာလဲ ခုနအတိုင္းလုပ္ပါ။ ဒါေပမဲ့ ခ်ိတ္ရမဲ့ host, username, password တို႕လာေတာင္းပါလိမ့္မယ္။ host ကေတာ့ Master Server ရဲ႕ name  ေပါ့။ username ကေတာ့ ခုနက Master မွာလုပ္ခဲ့တဲ့ Replication အေကာင့္ပါ။ ၿပီးရင္ GO လိုက္ပါ။

# shell ထဲက၊ MySQL prompt ထဲကေန …

# mysql > start slave; ဆိုပီး ရိုက္ထည့္လိုက္ပါ။ ဒါဆိုရင္ စတင္ အလုပ္လုပ္ပါၿပီ။

# phpmyadmin မသံုးခ်င္ဘဲ CUI သမားမ်ားကေတာ့ ခုနက change master to ဆိုတဲ့ေနရာမွာ master-host, master-user, master-password ဆိုပီးထည့္ႏိုင္ပါတယ္။

# report-host ထည့္ထားတဲ့အတြက္ေၾကာင့္ phpmyadmin မွာ slave host ဆို ပီးျပေနပါလိမ့္မယ္။

# Slave Server ကေန Master Server ဆီ အလုပ္၊လုပ္မလုပ္ လွမ္းၾကည့္ လို႕ရပါတယ္။

# mysql > show slave status\G; ဆိုပီး Enter ေခါက္လိုက္ပါ။

master-host ဆိုတဲ့ ေနရာမွာ Waiting for sync from master server လို႕ေပၚေနရင္ အိုေကေနပါၿပီ။

# Master Server ကေနလဲ ကိုယ့္ဆီ Connected ျဖစ္ေနတဲ့ Slave ကိုၾကည့္လို႕ရပါတယ္။

# mysql > show slave hosts;

ဒါဆိုရင္ေတာ့ Master Server ဆီက ဘယ္ Database ပဲ create လုပ္လုပ္၊ drop လုပ္လုပ္ အၿမဲတမ္း Sync ျဖစ္ေနတဲ့အတြက္ေၾကာင့္ Slave Server ဆီမွာ effective ျဖစ္ေနမွာပါ။ 🙂

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s