ทำ Replicate MySQL ครับ
หลังจากลง MySQL เสร็จแล้ว ( ขอข้ามขั้นตอนนี้เพราะเคยเขียนไว้แล้วกระทู้ล่างๆ นี้ )วันนี้มาทำ กับเครื่องดังนี้โดยสิ่งที่มีดังนี้
1. Master ผมเป็น FreeBSD 6.2
ลง MySQL แบบผ่าน ports เปลี่ยนพาร์ท data แล้วไว้ที่ /home/mysqldata
2. Slave เป็น Debian 4.0
ลง MySQL แบบผ่าน apt-get เปลี่ยนพาร์ท data แล้วไว้ที่ /home/mysqldata
เพื่อง่ายต่อการแบคอัพข้อมูลครับ ลงแบบผ่านซอสคอมไพล์เองก็ได้ แบบกระทู้ก่อนที่เคยเขียนไว้
1.ที่เครื่อง Master
- เข้าใช้ MySQL
# mysql -u root -p
ใส่พาสเวิร์สไป เข้าไปสู่พร้อมของ mysql
>
ทำการแกร้งสิทธิ์ให้เครื่องสลาฟ ให้มีสิทธิ์ดึงข้อมูล โดยคำสั่งนี้
GRANT REPLICATION SLAVE ON *.* TO root@"เครือง slave.ชื่อโดเมน" IDENTIFIED BY 'พาสเวิร์ส root ของ slave';
ทำการแก้ไขไฟล์ config my.cnf ( ที่ต้องก๊อปมาเองก่อนแล้ว )
# vi /etc/my.cnf แล้วใส่ค่านี้เพิ่มเข้าไป
server-id = 1
log-bin=mysql-bin
server-id = 1
binlog-ignore-db = mysql
replicate-ignore-db = mysql
เสร็จแล้วเซฟออกมา
2. ที่เครื่อง Slave
ทำการแก้ไขไฟล์คอนฟิก my.cnf ( ที่ก๊อปมาเองแล้วก่อนหน้านี้เช่นกัน ในเครืองนี้เก็บใน /etc/mysql/my.cnf )
# vi /etc/mysql/my.cnf
แล้วใส่ค่าไปดังนี้
[mysqld]
master-host= ไอพีเครื่อง Master
master-user=root
master-password= พาสเวิร์ส root ของ slave
master-port=3306
server-id=2
เสร็จแล้ว เซฟออกมา
restart service ทั้ง 2 เครือ่งสักที
มาสเตอร์ freeBSD
- /usr/local/etc/rc.d/mysql-server stop
- /usr/local/etc/rc.d/mysql-server start
slave Debian4
- /etc/init.d/mysql stop
- /etc/init.d/mysql start
ตรวจสอบการทำงานของการ replicate
ที่เครื่อง slave เข้า MySQL
แล้วลองดูสเตตัส การทำ slave ดังนี้
> mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.0.217
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 424
Relay_Log_File: bebe-relay-bin.000005
Relay_Log_Pos: 235
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 424
Relay_Log_Space: 235
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
1 row in set (0.00 sec)
จะโชว์สถานะของสลาฟทั้งหมด ว่า running อยู่ ทั้ง IO และ slave SQL มาสเตอร์เครือ่งไหน แล้ว log บนมาสเตอร์เขียนที่ไฟล์ไหน
แล้วมาดูฝั่ง Master บ้าง
ลอกอิน MySQL
> แล้วสั่ง
> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 424 | | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
ดูที่ไฟล์เป็นตัวเดียวกัน ok และระดับหนึ่ง
ทดสอบโดย ผ่านหน้า interface ของ phpmyadmin ก็ได้
โดยลองทดสอบสร้าง database มาสักตัวหนึ่ง ตารางสักตาราง จากฝั่ง Master ( ที่นี้คือ 10.0.0.217)
ดังรูปผมสร้าง ดาต้าเบส ชื่อ REP1 ตารางชื่อ test ใส่ฟิวไปฟิวหนึ่ง ชื่อ id แล้วก็ลองใส่ค่า 55555
แล้วลองเปิดดูที่เครือง Slave ( ที่นี้คือ 10.0.0.232 )
จะเห็นได้ว่ามีตารางโผล่มาอีกอันคือ REP1 และข้อมูลด้านในเหมือนกันกับ ตัว master เด๊ะ ๆ
เป็นอันว่าสำมะเร็จครับ การทำ Replicate MySQL
หากก๊อปมาแล้วบางที ฟังชั่นการ Replicate หลุด
ฟ้องว่าไม่เจอ ตัวมาสเตอร์เราต้องทำการเชื่อมต่อใหม่ด้วยคำสั่ง
CHANGE MASTER TO MASTER_HOST='ip ตัวมาสเตอร์', MASTER_USER='user ที่ระบุในคอนฟิกในการ rep', MASTER_PASSWORD='password ที่ระบุในการทำ rep';
เพิ่มเติมในกรณีที่เกิดเหตุขัดข้องทำให้การ replicate ไม่ทำการ sync กันไม่ว่าจะเป็นไฟดับ หรือ รีบูทเครืองแล้วเออเรอร์
สตาร์ทเซอร์วิสแล้วยังไส่ sync กัน ให้ทำการ stop service ทั้ง2 ฝั่ง
แล้ว copy ข้อมูลของตัว master ทั้งหมด ยกเว้น ที่ขึ้นต้นว่า mysql ต่างๆ นั้นไม่ต้องเอามา
แล้วไปวางบนเครื่อง slave และลบ log ไฟล์เก่าบน slave ออกให้หมด
แล้วค่อยสตาร์ท service ทั้งสองเครืองขึ้นมาใหม่ แล้วลองเทสดู
ไม่มีความคิดเห็น:
แสดงความคิดเห็น