การทำ MySQL Replication

สภาพแวดล้อมในการติดตั้ง
เครื่อง Master Server
ชื่อ mysql-a1.rujirapong.com
IP 192.168.15.18
เครื่อง Slave Server
ชื่อ mysql-a2.rujirapong.com
IP 192.168.15.32
เชื่อมต่อดังภาพ

เตรียมระบบทั้ง 2 เครื่อง
ติดตั้ง CentOS 5.5 ทั้ง 2 เครื่อง
ทำการอับเกรด MySQL เป็น version 5.1 ดังนี้
ตรวจสอบว่า หลังการติดตั้ง CentOS 5.5 มี MySQL ติดตั้งอยู่เดิม 
rpm -qa | grep -i ‘^mysql-‘
หากพบ version เก่าให้ลบออกโดย
rpm –nodeps -ev <package name>

ดาวน์โหลดและติดตั้ง MySQL 5.1 จากเว็บไซต์ www.mysql.com
โดยดาวน์โหลดและติดตั้ง 3 Package นี้
MySQL-shared-compat-5.1.58-1.rhel5
MySQL-server-community-5.1.58-1.rhel5
MySQL-client-community-5.1.58-1.rhel5
สำหรับเครื่องที่มีข้อมูล Database อยู่เดิมแล้ว จะต้อง dump database import ข้อมูลให้ตรงกันทั้ง 2 เครื่องก่อน

 เริ่มต้น
เครื่อง Master Server mysql-a1.rujirapong.com
1. แก้ไข Configure 
/etc/init.d/mysql stop
vi /etc/my.cnf
เขียนเข้าไป
[mysqld]
log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1 
/etc/init.d/mysql start 
2. ทำการ Add User Replication
mysql -uroot -p

mysql> CREATE USER ‘repl’@’192.168.15.32′ IDENTIFIED BY ‘slavepass';
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’192.168.15.32′;


ความหมายคือ add user ชื่อ repl และอนุญาติ Access จากกมายเลข IP 192.168.15.32
3. หาจุด Checkpoint เพื่อ Replication และดู Master Status
mysql> FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;

สมมุติโชว์
+——————+———-+————–+——————+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 |      356 |              |                  |
+——————+———-+————–+——————+
1 row in set (0.00 sec)
mysql> UNLOCK TABLES;
เก็บข้อมูลตัวอักษรสีแดงไว้ เพื่อนำไปใส่ใน Configure ของ Slave Server

เครื่อง Slave Server ชื่อ mysql-a2.rujirapong.com
1. แก้ MySQL Configure
/etc/init.d/mysql stop
vi /etc/my.cnf
แก้ไขดังนี้

[mysqld]
server-id=2
/etc/init.d/mysql start
2. Change Master
mysql -uroot -p
ใส่ค่าดังนี้
mysql> CHANGE MASTER TO
  MASTER_HOST=’192.168.15.18′,
  MASTER_USER=’repl’,
  MASTER_PASSWORD=’slavepass’,
  MASTER_PORT=3306,
  MASTER_LOG_FILE=’mysql-bin.000001‘,  # ค่าที่ได้จาก Master Server
  MASTER_LOG_POS=356,  # ค่าที่ได้จาก Master Server
  MASTER_CONNECT_RETRY=10; 


3. เริ่ม Replicate
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS \G

สรุป
หากทุกอย่างถูกต้อง ที่เครื่อง Master มีการสร้าง database หรือมีการอับเดทข้อมูลอะไรก็ตาม ข้อมูลจะถูก Replicate มาที่ Slave Server อัตโนมัติ แต่ข้อจำกัดคือ การ Replication ของ MySQL จะเป็นแบบ 1-Way คือจาก Master ไป Slave แต่ข้อมูลหากมีการเปลี่ยนแปลงที่ Slave จะไม่ Replicate กลับมาที่ Master ดังนั้น ระบบนี้จึงเหมาะสำหรับการสำรองข้อมูลเท่านั้น แต่หากระบบหลักมีปัญหาก็อาจจะใช้วิธีสลับ IP หรือกำหนดให้ Application Server ชี้ Database มาที่เครื่อง Slave Server ขึ้นอยู่กับความยืดหยุ่นของแต่ละองค์กร

ขยายพื้นที่ disk ของ vm บน virtualbox


ในการใช้งาน vm ถ้าเราสร้าง disk น้อยไป เวลาใช้งานดิสก์ก็อาจจะเต็มได้ เราสามารถขยายดิสก์ของ vm ได้ดังนี้

ในการขยายดิสก์ เราจะสั่งที่เครื่อง Host หรือก็คือ OS หลักที่เรารันอยู่นั่นเอง โดยรันคำสั่ง Vboxmanage modifyhd <hdd path> --resize <size in MB>
ถ้าเป็นวินโดว์อาจจะต้องเรียกคำสั่งแบบ full path ถ้ายังไม่ได้ทำการเพิ่มตัวแปร environment variable 

ตัวอย่างการเพิ่มขนาด
# vboxmanage modifyhd /media/data/vm/xp.vdi --resize 20480
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

เมื่อเข้าไปดู vm จะสังเกตว่าขนาดของ hdd ได้เพิ่มขึ้นตามที่เรา resize ไปแล้ว 
หลังจากนี้ก็ให้เราหาเครื่องมือ หรือทูลเพื่อเข้าไปจัดการ Partition ที่อยู่ข้างใน vm disk ให้ใช้งานพื้นที่ที่เพิ่มเข้ามาได้