Trước khi đọc và thực hiện theo hướng dẫn ở bài này yêu cầu bạn đã biết cách cấu hình để có thể thực hiện Data Replication dạng Master-> Slave
Khi nghe đến Database Replication người ta nghĩ ngay đến khả năng đồng bộ giữa các máy chủ dữ liệu một cách tự động với nhau theo hướng Master -> Slave có nghĩa là Slave sẽ là bản sao của Master mà không thể ngược lại. Tức là mọi thay đổi trên Master sẽ được làm y nguyên trên Slave chứ khi có sự thay đổi trên Slave thì không ảnh hưởng gì đến Master nhưng có thể sẽ làm hỏng quá trình 2 database này đồng bộ với nhau.
Còn 1 loại đồng bộ nữa đó là 2 database này ngang hàng với nhau, chúng tác động qua lại với nhau và thay nhau làm chủ. Tức là khi Database 1 có sự thay đôi về dữ liệu thì nó sẽ làm Master để Database 2 đồng bộ theo và ngược lại. Cái cần thiết đó là cấu hình làm sao để không bị xảy ra hiện tường trùng Primary key của các tables.
MySQL đã đưa vào thêm 3 định nghĩa (chính xác hơn là 2 thuộc tính mới) ảnh hưởng đến quá trình Replication này đó là replicate-same-server-id:
auto-increment-increment: Phải được đặt bằng với số lượng server sẽ tham ra đồng bộ ở dạng này (Dual master)
auto-increment-offset: Báo cho Server biết là bước nhảy của trường auto-increment (thường là primary-key) như thế nào.
Ví dụ cụ thể như sau:
Tôi có 2 MySQL server với tên là server1 và server2, 2 MySQL server này chạy trên 2 máy chủ độc lập với nhau và tôi cần đồng bộ 2 server này với nhau theo kiểu Master<->Master cho 2 database có tên là dbname
Bước 1. Đồng bộ dữ liệu bạn đầu: Dùng các chương trình backup và Restore để đảm bảo rằng dữ liệu của database dbname ở cả 2 server là như nhau trước khi thực hiện các bước tiếp theo.
Bước 2. Cấp quyền thực hiện Repilcation cho User:
Tại mỗi server ta đăng nhập vào MySQL với quyền Root và thực hiện 2 câu lệnh:
GRANT REPLICATION SLAVE ON *.* TO ‘slave_user’@'%’ IDENTIFIED BY ‘<some_password>’; (thay đổi slave_user bằng username và <some_password> bằng password của user mà bạn dùng để đồng bộ)
FLUSH PRIVILEGES;
Bước 3. Cấu hình để MySQL Database chấp nhận đồng bộ dạng Master <-> Master:
Tại Server1 ta làm như sau:
Mở file my.conf hoặc my.ini bằng một text-editor nào đó và thêm vào đoạn sau trong phần [mysql]
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
master-host = <Server2>
master-user = <slave user>
master-password = <slave password>
master-connect-retry = 60
replicate-do-db = <database name>
log-bin =mysql-bin.log
binlog-do-db = <database name>
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
Tại server2 ta làm tương tự nhưng với nội dung hơi khác một chút
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset =2
master-host = <Server1>
master-user = <slave user>
master-password = <slave password>
master-connect-retry = 60
replicate-do-db = <database name>
log-bin =mysql-bin.log
binlog-do-db = <database name>
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
Trong 2 đoạn trên các phần chữ đầm là phần các bạn phải chỉnh lại cho phù hợp, những phần màu đỏ là đánh dấu sự khác nhau giữa 2 server
Bước 4. Chuẩn bị để bắt đầu đồng bộ:
Tính đến đây thì phần cấu hình coi như đã xong, ta cần tiến hành báo cho 2 máy chủ biết là phải tiến hành bắt đầu đồng bộ từ đâu. Nghĩa là báo cho server2 biết bắt đầu đồng bộ từ dòng bao nhiêu trong relay-log của server1 và ngược lại
Tai cả 2 máy chủ tạm dừng đồng bộ bằng lệnh slave stop.
Lấy thông tin về Relay-log hiện tại ở server1. Tại server1 đăng nhâp vào MySQL bằng tài khoản root và chạy lệnh:
Show master status;
kết quả dạng sau:
+---------------+----------+--------------+------------------+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+---------------+----------+--------------+------------------+
| mysql-bin.006 | 183 | exampledb | |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)
Tại server2 đăng nhâp vào MySQL bằng tài khoản root và chạy lệnh:
CHANGE MASTER TO MASTER_HOST=’<server1>’, MASTER_USER=’<slave user>’, MASTER_PASSWORD=’<slave password>’, MASTER_LOG_FILE=’<mysql-bin.006>’, MASTER_LOG_POS=<183>;
Tại server2 tiến hành Show master status; để lấy File và Position và thay vào câu lệnh chạy trên server1 như trên
Bước 5. Tiến hành đồng bộ:
Khâu chuân bị đã hoàn tất, tại lần lượt các server ta chạy lệnh Slave Start; trong MySQL Console
Bước 6. Kiểm tra:
Tại các server chạy lệnh Show slave status\G và xem 2 thống số “Slave_IO_Running” và “Slave_SQL_Running” nếu đều là Yes thì coi như thành công, còn có lỗi thì cần kiểm tra kỹ lại các bước.
Chúc các bạn thành công!
Bình luận gần đây