การทำ MySQL Replication

ความต้องการ

ต้องการสำรอง Database MySQL ไว้อีก Site ต่าง Location เพื่อเป็นการทำ Backup หรืออาจจะเพื่อสำรองข้อมูลเมื่อเครื่อง Database หลักมีปัญหา

สภาพแวดล้อมในการติดตั้ง

เครื่อง 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 ขึ้นอยู่กับความยืดหยุ่นของแต่ละองค์กร

ข้อมูลเพิ่มเติม

http://dev.mysql.com/doc/refman/5.1/en/replication-howto-newservers.html 

This entry was posted in How to and tagged , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>