MySQL Replication là gì?
MySQL Replication là tính năng cho phép dữ liệu từ một MySQL server (gọi là master) được sao chép tự động đến một hoặc nhiều server khác (gọi là slave). Cơ chế này hoạt động theo hướng bất đồng bộ, tức là master không cần chờ slave xác nhận đã nhận dữ liệu trước khi trả kết quả về cho client. Nhờ vậy, hệ thống vẫn đảm bảo hiệu năng cao trong khi vẫn duy trì tính nhất quán giữa các node.
Về mặt kiến trúc, master ghi lại mọi thay đổi vào binary log, slave đọc log này và áp dụng các thay đổi tương ứng vào cơ sở dữ liệu của mình. Quá trình này diễn ra liên tục, giúp slave luôn ở trạng thái gần như đồng bộ với master.
Vì sao nên sử dụng Replication?
Replication mang lại nhiều lợi ích thiết thực cho hệ thống:
– Phân tán tải đọc: Các ứng dụng có thể trỏ các truy vấn SELECT đến slave, giảm tải cho master.
– Tính sẵn sàng cao: Khi master gặp sự cố, một slave có thể được thăng cấp thành master mới.
– Sao lưu dữ liệu: Slave cung cấp bản sao dữ liệu thời gian thực, hỗ trợ khôi phục nhanh khi cần.
– Phân tích và báo cáo: Các tác vụ tốn tài nguyên như báo cáo, analytics có thể chạy trên slave mà không ảnh hưởng đến hoạt động chính.
Các loại Replication
Có ba kiểu replication phổ biến:
– Asynchronous Replication: Master ghi log và trả kết quả ngay lập tức, không chờ slave xác nhận. Tốc độ cao nhưng có thể mất mát dữ liệu nếu master gặp sự cố trước khi log được gửi đi.
– Semi-synchronous Replication: Master đợi ít nhất một slave xác nhận đã nhận log trước khi trả kết quả. Cân bằng giữa hiệu năng và độ an toàn.
– Synchronous Replication: Master đợi tất cả slave xác nhận trước khi trả kết quả. Đảm bảo dữ liệu luôn nhất quán nhưng hiệu năng thấp.
Cấu hình Replication cơ bản
Để thiết lập replication, cần cấu hình trên cả master và slave:
Trên master:
– Bật binary log trong file my.cnf:
log_bin = mysql-bin
server_id = 1– Tạo user replication:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON . TO 'repl'@'%';