โดยเครื่อง Master จะรับหน้าที่เขียนข้อมูล (writer) และ Slave จะรับหน้าที่อ่านข้อมูล (reader)
ในที่นี้เครื่อง Master จะทำงานอยู่ที่ 192.168.1.10 และ Slave ทำงานอยู่ที่ 192.168.1.11
ในเครื่อง Master
ทำการ dump ฐานข้อมูลที่ต้องการ
mysqldump -r root -p database_name > dump.sql
แก้ไขไฟล์ my.cnf บน Unix/Linux จะอยู่ที่ /etc/my.cnf เพิ่ม parameters ข้างล่างลงในส่วนของ [mysqld]
server-id = 1 log-bin binlog-do-db=database_name binlog-ignore-db=mysql
โดยแก้ไข
database_name เป็นชื่อฐานข้อมูลที่ต้องการทำ replicate เราสามารถเพิ่มฐานข้อมูลที่ต้องการทำ replicate โดยการเพิ่ม parameter binlog-do-db ตามจำนวนฐานข้อมูล
ส่วน binlog-ignore-db เป็น parameter เพื่อระบุว่าไม่ต้องทำ replication ในฐานข้อมูลที่ระบุ
เข้าสู่ mysql shell
mysql -u root -p
จากนั้นทำการสร้าง user สำหรับ replicate
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@192.168.1.11 IDENTIFIED BY 'slave';
โดยคำสั่งดังกล่าวจะสร้าง user ที่มีสิทธิในการทำ slave replicate จากเครื่อง 192.168.1.11 โดยมี
username เป็น replication
password เป็น slave
ทำการ restart mysql
service mysqld restart
ที่เครื่อง Slave แก้ไข my.cnf โดยเพิ่มในส่วน mysqld
server-id=2 master-host = 192.168.1.10 master-user = replication master-password = slave master-port = 3306
ทำการ copy ฐานข้อมูลที่ dump เอาไว้
scp root@192.168.1.10:/path/to/dump.sql ./
จากนั้นทำการ import ข้อมูลเข้าสู่ฐานข้อมูล
mysql -u root -p -D database_name < dump.sql
จากนั้น restart แล้วเข้าสู่ mysql shell
mysql -u root -p
สั่งให้ replcation ทำงานด้วย
mysql> start slave;
ตรวจสอบการทำงานของ replication โดย
mysql> show slave statusG;
โดยจะแสดงผลเป็น
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.1.10
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysqld-bin.000002
Read_Master_Log_Pos: 181740123
Relay_Log_File: mysqld-relay-bin.000018
Relay_Log_Pos: 5488
Relay_Master_Log_File: mysqld-bin.000002
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: 181740123
Relay_Log_Space: 5644
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: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
โดยให้ตรวจสอบโดยค่า SLAVE_IO_RUNNING และ SLAVE_SQL_RUNNING จะต้องเป็น Yes ถ้าเป็น No ให้ดู error ที่เกิดขึ้นในส่วนของ Last_Error, Last_IO_Error และ Last_SQL_Error แล้วแก้ไขให้ถูกต้อง