Giới thiệu về MySQL Replication
MySQL Replication là tính năng cho phép dữ liệu từ một database server (gọi là master) được sao chép tự động sang một hoặc nhiều database server khác (gọi là slave). Điều này rất hữu ích trong việc phân phối tải, tăng tính sẵn sàng, hoặc tạo bản backup thời gian thực.
Đối với người mới bắt đầu, quá trình thiết lập có thể trông phức tạp, nhưng nếu làm theo từng bước một, nó sẽ trở nên rõ ràng và dễ thực hiện hơn. Bài viết này sẽ hướng dẫn chi tiết cách thiết lập một hệ thống replication đơn giản giữa hai server MySQL.
Chuẩn bị trước khi bắt đầu
Yêu cầu phần cứng và phần mềm
- Hai server chạy hệ điều hành Linux (Ubuntu/Debian hoặc CentOS). - MySQL hoặc MariaDB đã được cài đặt trên cả hai server. - Cả hai server cần có thể kết nối mạng với nhau. - Đảm bảo MySQL service đang chạy và có thể đăng nhập bằng tài khoản root.
Lưu ý về version
Nên sử dụng cùng một phiên bản MySQL trên cả master và slave để tránh lỗi không tương thích. Nếu sử dụng MariaDB, version cũng nên tương đồng.
Bước 1: Cấu hình server Master
Mở file cấu hình MySQL
Trên server master, mở file my.cnf (hoặc mysqld.cnf trên Ubuntu):
sudo nano /etc/mysql/my.cnf
Thêm các thiết lập replication
Tìm section [mysqld] và thêm các dòng sau:
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=your_database_name
Trong đó:
- server-id phải là một số duy nhất trong hệ thống replication.
- log-bin bật binary log, cần thiết cho replication.
- binlog-do-db chỉ định database nào sẽ được replicate (có thể bỏ qua nếu muốn replicate tất cả).
Lưu file và khởi động lại MySQL:
sudo systemctl restart mysql
Tạo tài khoản replication
Đăng nhập vào MySQL và tạo user dành riêng cho replication:
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON . TO 'repl_user'@'%';
FLUSH PRIVILEGES;
Lấy vị trí binary log hiện tại:
SHOW MASTER STATUS;
Ghi lại giá trị File và Position, chúng sẽ được dùng ở bước tiếp theo.
Bước 2: Cấu hình server Slave
Mở file cấu hình MySQL
Trên server slave, mở file my.cnf:
sudo nano /etc/mysql/my.cnf
Thêm các thiết lập replication
Tương tự như master, thêm vào section [mysqld]:
[mysqld]
server-id=2
relay-log=relay-bin
Lưu ý: server-id phải khác với master.
Quảng cáo
300x250 In-Content Advertisement
Khởi động lại MySQL:
sudo systemctl restart mysql
Kết nối slave với master
Đăng nhập vào MySQL trên slave và chạy lệnh:
CHANGE MASTER TO
MASTER_HOST='master_ip_address',
MASTER_USER='repl_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
Thay thế các giá trị tương ứng với kết quả SHOW MASTER STATUS đã lưu ở bước trước.
Bắt đầu replication:
START SLAVE;
Kiểm tra trạng thái:
SHOW SLAVE STATUSG;
Nếu Slave_IO_Running và Slave_SQL_Running đều hiển thị Yes, replication đã hoạt động.
Bước 3: Kiểm tra và xác nhận
Tạo dữ liệu test trên master
Trên master, tạo một bảng test và insert dữ liệu:
CREATE DATABASE test_repl;
USE test_repl;
CREATE TABLE users (id INT, name VARCHAR(50));
INSERT INTO users VALUES (1, 'Alice');
Kiểm tra trên slave
Truy cập vào slave và chạy:
USE test_repl;
SELECT * FROM users;
Nếu dữ liệu xuất hiện giống hệt, replication đã hoạt động thành công.
Kết luận
Việc thiết lập MySQL Replication không quá phức tạp nếu làm đúng trình tự và cẩn thận trong từng bước. Replication giúp tăng tính dự phòng, cải thiện hiệu năng khi có nhiều kết nối đọc, và hỗ trợ phục hồi dữ liệu nhanh chóng.
Để hệ thống ổn định hơn, có thể cân nhắc thêm các biện pháp như sao lưu định kỳ, giám sát trạng thái replication, và xử lý kịch bản fail-over khi master gặp sự cố. Tuy nhiên, với cấu hình cơ bản này, bạn đã có nền tảng vững chắc để mở rộng sau này.