Làm thế nào để thiết lập MySQL replication


Mình đi theo step by step cho nó dễ làm một chút.
Một cách ngắn gọn: MySQL replication cho phép bạn có một bản copy của database chính (master) trên một server phụ (slave) và tất cả mọi update của master server thì lập tức được sao chép sang slave server. Vì thế sẽ có sự đồng bộ giữa master và slave server. Dĩ nhiên cần phân biệt rằng MySQL replication không phải là backup vì một câu lệnh delete của MySQL cũng thực hiện trên slave.
MySQL replication làm cho hệ thống high availability.


Ta có tesdb tại server master có ip=192.168.1.2 và muốn tạo bản sao của nó

1. Phần master

Trước hết comment dòng sau , trong file /etc/mysql/my.cnf

#skip-networking
#bind-address = 127.0.0.1

Và thêm vài dòng sau vào /etc/mysql/my.cnf

log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=testdb
server-id=1

File log này để xem những thay đổi của master trên slave. Khởi động lại rồi vào root

mysql -u root -p
Enter password:

GRANT REPLICATION SLAVE ON *.* TO ‘slave_user’@’%’ IDENTIFIED BY ‘<some_password>’;
FLUSH PRIVILEGES;
USE testdb;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Dòng lệnh cuối cùng sẽ cho ra một cái bảng có một record. Bạn ghi lại cái record ra giấy nháp để cần thiết cho sau này.

Đến bây giờ sẽ có hai cách để master update ra slave. Trường hợp thứ nhất là dùng database dump, thứ hai là dùng lệnh LOAD DATA FROM MASTER; trên slave

mysqldump -u root -p<password> –opt testdb > testdb.sql

Chuyển file này đến slave server .
Sau cùng là unlock testdb

mysql -u root -p
Enter password:
UNLOCK TABLES;
quit;

Phần cấu hình trên master đã xong.

2. Cấu hình slave

Trước hết tạo database testdb (slave)

mysql -u root -p
Enter password:
CREATE DATABASE testdb;
quit;

Nếu bạn dùng cách thứ nhất để update thì chạy dòng lệnh sau:

mysql -u root -p<password> exampledb < /path/to/testdb.sql

Bây giờ cần nói cho mySQL của slave bít rằng nó là slave và nó cần bít cái master database của nó nữa. Thêm các dòng sau vào /etc/mysql/my.cnf

server-id=2
master-host=192.168.1.2
master-user=slave_user
master-password=secret
master-connect-retry=60
replicate-do-db= testdb

Với cách thứ hai thì bạn sử dụng dòng sau để update:

mysql -u root -p
Enter password:
LOAD DATA FROM MASTER;
quit;

Sau cùng :

mysql -u root -p
Enter password:
SLAVE STOP;
CHANGE MASTER TO MASTER_HOST=’192.168.1.2′, MASTER_USER=’slave_user’, MASTER_PASSWORD=”, MASTER_LOG_FILE=’xem note’, MASTER_LOG_POS= int;

START SLAVE;
quit;

master_host: là địa chỉ ip của server master
master_user: là user đã grant replication trên master server
master_log_file: trong bảng đã show master status
master_log_pos: trong bảng show master status phần cấu hình master

Ok xong rồi! Khi nào testdb được update trên master nó sẽ được lặp lại trên slave

Bình luận về bài viết này