MySQL Replication là gì? Cách setup một máy chủ sao chép dạng Master-Slave.

Tác giả: 04/12/2023

Phần 1: Giới thiệu qua về MySQL Replication (sao chép).

MySQL Replication, hay còn gọi là sao chép MySQL, là một tính năng của hệ quản trị cơ sở dữ liệu MySQL cho phép dữ liệu từ một máy chủ MySQL (gọi là máy chủ Master) được sao chép đến một hoặc nhiều máy chủ khác (gọi là máy chủ Slave). Mục tiêu của quá trình này thường là để cải thiện hiệu suất, có sẵn sàng và cung cấp dự phòng dữ liệu.

Cách hoạt động của MySQL Replication:

1. Master Server: Máy chủ chứa dữ liệu gốc mà bạn muốn sao chép. Khi có bất kỳ thay đổi dữ liệu nào trên Master (thêm, sửa, xóa), các sự kiện này được ghi vào các bản ghi nhật ký (binary logs).

2. Slave Server: Máy chủ nhận bản sao của dữ liệu từ Master. Các sự kiện được đọc từ binary logs của Master và được áp dụng vào cơ sở dữ liệu của Slave.

3. Sự Đồng Bộ Hóa (Replication): Dữ liệu trên Slave được đồng bộ hóa với dữ liệu trên Master. Các thay đổi dữ liệu trên Master được tái tạo trên Slave, giữ cho cả hai máy chủ đồng bộ.

Lợi ích của MySQL Replication bao gồm:

– Hiệu suất: Các Slave có thể giúp giảm tải cho Master bằng cách chia sẻ công việc đọc và ghi.
– Dự phòng dữ liệu: Nếu Master gặp sự cố, bạn có thể chuyển giao ngay lập tức sang một Slave để duy trì sự liên tục của hệ thống.
– Định kỳ sao lưu: Bạn có thể sử dụng một Slave để thực hiện sao lưu dữ liệu mà không gây ảnh hưởng đến hoạt động của Master.

Tính năng này cực kỳ hữu ích trong môi trường sản xuất và là một phần quan trọng của chiến lược quản lý cơ sở dữ liệu.

Phần 2: Setup MySQL Replication (sao chép) dạng Master-Slave.

Yêu cầu: Cùng phiên bản MySQL

Mình sẽ Lab bằng 2 máy chủ như sau:
Master: 103.159.X.A
Slave: 103.124.X.B
Bước 1: Trên Master  tạo 1 user cho việc replication trên master.
Dùng lệnh: mysql -u root -p đăng nhập vào MySQL tạo 1 user như sau.
CREATE USER 'replica'@'103.124.X.B' IDENTIFIED BY 'vanlam304';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'103.124.A.B';
Có nghĩa là:
  1. CREATE USER ‘replica’@’103.124.X.B’ IDENTIFIED BY ‘vanlam304’;
    • Tạo một người dùng mới có tên là ‘replica’ và có địa chỉ IP là ‘103.124.X,B’.
    • Người dùng này được xác định bằng mật khẩu ‘vanlam304’.
  2. GRANT REPLICATION SLAVE ON . TO ‘replica’@’103.124.X.B’;
    • Cấp quyền REPLICATION SLAVE cho người dùng ‘replica’ khi kết nối từ địa chỉ IP ‘103.124.X.B’.
    • Quyền này cho phép người dùng đó thực hiện các thao tác sao chép dữ liệu từ máy chủ Master khi thiết lập replication.

Bước 2: Thêm vào file my.cnf 2 dòng sau:
vi /etc/my.cnf
bind-address     = 103.159.X.A (IP của master)
server-id=1
log-bin=mysql-bin

Bước 3: Khởi động lại vào MySSQL check status master thì hiện thông số sau, lưu lại.
            File: mysql-bin.000001
        Position: 382
    Binlog_Do_DB:
Binlog_Ignore_DB:
VD: 
Bước 4: Ở Slave.
Cấu hình máy chủ Slave 
vi /etc/my.cnf
Thêm vào:
bind-address     = 103.124.X.B( IP máy slave)
server-id=(số mấy cũng được khác id của master là được)
log_bin          = mysql-bin


Ví dụ: 
bind-address     = 103.124.1.1
server-id        = 2
log_bin          = mysql-bin

Bước 5: Khởi động lại MariaDB,
Truy cập: mysql -u root -p
Tắt Slave trước: 
mysql> STOP SLAVE;
Sau đó, setup change slave chạy như sau:
CHANGE MASTER TO

MASTER_HOST='103.159.X.A',
MASTER_USER='replica',
MASTER_PASSWORD='vanlam304',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=382;

Khởi động slave và kiểm tra trạng thái kết nối Master-Slave
start slave;
show slave status\G;

Có 2 chữ Yes màu xanh là cool.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Cùng kiểm chứng kết quả nhé.
Thêm 1 database nào đó trên master

Thì Slave sẽ theo log đó mà sao tự động chép tương tự thành: 

Rất nhanh thôi mình sẽ cập nhật một bài viết mới về Master – Master để bù đắp những phần mà Master – Slave chưa thể làm được.
Chúc các bạn may mắn!!!!!!