พอดีผมเปิดเว็บไปอ่านเจอวิธีทำ replicate เลยเอามาฝากชาว HOSXP อะครับ
ถ้าผมเข้าใจไม่ผิด น่าจะใช้แทน run agent ของ HOSXP ได้เลย ถ้าเราใช้บน linux
คัดลอกมาจากเว็บ
http://www.mindphp.com/modules.php?name=News&file=article&sid=87
บอกเป็นขั้นตอน คล้ายๆของ อ.MN
เผื่อช่วยบางคนที่ยัง run ไม่ผ่านได้บ้าง
มีผิดพลาดตรงไหนช่วยแนะนำด้วยนะครับ ผมก็ยังไม่เคยลองทำ แต่ที่รู้ๆทำแน่ๆ
ทดสอบแล้วผลเป็นอย่างไรช่วยบอกด้วยนะครับ ขอบคุณครับ
ภาพรวมของการทำ Replicate MySQL
ขั้นตอนที่ 1.
หากต้องการ Replicate Master ที่มีข้อมูลอยู่แล้ว จะต้อง Dump ข้อมูลออกมาเพื่อทำให้ Slave มีข้อมูลที่เท่าเทียมกันเสียก่อน
(ตรงนี้ถ้าเดาไม่ผิดน่าจะใช้คำสั่งที่ อ. MN โพสมา คือ load data from master
หรือไม่ก็ใช้ HOSXP Initial Import เข้ามาก็ได้นะครับ)
ขั้นตอนที่ 2.
สร้าง User ขึ้นมาเพื่อทำหน้าที่สำหรับทำหน้าที่ Replicate เท่านั้นในฝั่ง Master โดยใช้คำสั่ง
mysql> GRANT REPLICATION SLAVE ON *.*
-> TO 'repl'@'%.192.168.0.20' IDENTIFIED BY 'slavepass';
* โดยที่ให้สิทธิ์ให้การ Replicate จาก User ที่ชื่อว่า repl และรหัสผ่าน slavepass ที่มาจากเครื่อง IP 192.168.0.20 เท่านั้น
ขั้นตอนที่ 3.
ฝั่ง Master เข้าไปแก้ไขไฟล์ my.ini ที่ C:Program FilesMySQLMySQL Server 5.1>my.ini โดยเพิ่มด้านล้างหัวข้อ [mysqld] ดังนี้
# ——————————
log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
# ——————————-
โดยที่ :
log-bin=mysql-bin # Binary Log
server-id=1 # ลำดับ Server master กำหนด =1
innodb_flush_log_at_trx_commit=1 #สำหรับผู้ใช้ฐานข้อมูลที่เป็น InnoDB จำเ็ป็นจะต้องให้ Master
#commit งานให้เรียบร้อยก่อน ถึงจะทำการ Replicate ไปให้ Slave
sync_binlog=1 # ทำการ Sync Log สำหรับ InnoDB และหากเกิด Master Crash จะไม่ทำให้ Slave Sync ข้อมูลซ้ำ ในกรณีที่ Master ฟื้นกลับมาอีกครั้ง
ขั้นตอนที่ 4.
ฝั่ง Slave ให้เข้าไปแก้ไขไฟล์ my.ini ที่ C:Program FilesMySQLMySQL Server 5.1>my.ini เช่นเดียวกับฝั่ง Master โดยเพิ่มด้านล้างหัวข้อ [mysqld] ดังนี้
#————————————————-
server-id=2
master-host=192.168.0.10
master-port=3306
master-user=repl
master-password-slavepass
master-connect-retry=30
replicate-wild-do-table= %.%
report-host=192.168.0.20
#————————————————-
โดยที่
server-id=2 # ลำดับ Slave หากมี Slave มากกว่า 1 ตัวสามารถกำหนด Server-id ได้จนถึง (2 ยกกำลัง 32) -1 เครื่อง
master-host=192.168.0.10 # หมายเลข IP เครื่อง Master
master-port=3306 # กำหนด Port
master-user=repl # ชื่อ User สำหรับการ Replicate
master-password-slavepass # Password
master-connect-retry=30 # หากติดต่อ Master ไ่ม่ได้ จะติดต่อซ้ำภายใน
replicate-wild-do-table= %.% #กำหนดฐานข้อมูลที่ต้องการ Replicate %.% หมายถึง Database ทุกตัว
ขั้นตอนที่ 5.
เมื่อ Master และ Slave มีข้อมูลเท่ากันแล้ว ดังในขั้นตอนที่ 1 ให้สร้างจุด Check Point เพื่อให้เป็นจุดเริ่มต้นสำหรับการ Replicate โดยใช้คำสั่ง
mysql> FLUSH TABLES WITH READ LOCK;
ให้เรียกดูสถานะการทำงาน เพื่อดู Binary Log name และ Offset ของ Master ดังนี้
ภาพการเรียกดู BinaryLog Name และ Offset ของ Master
Binary Log Name : mysql-bin.00004
Offset : 106
ขั้นตอนที่ 6.
กำหนดฝั่ง Client ให้ติดต่อกับฐานข้อมูล
mysql> CHANGE MASTER TO
-> MASTER_HOST='192,168.0.10',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='slavepass',
-> MASTER_LOG_FILE='mysql-bin.00004‘,
-> MASTER_LOG_POS=106;
และเริ่มต้น Replicate โดยใช้คำสั่ง
mysql> START SLAVE;
เพียงเท่านี้ Slave ก็จะเริ่ม Replicate ข้อมูลจาก Master แล้วครับ
ขอขอบคุณ อ.MN ที่ตั้งกระทู้นี้
ขอขอบคุณ เว็บ
http://www.mindphp.com/modules.php?name=News&file=article&sid=87
ที่ทำให้ผมได้ข้อมูลนี้มาครับ