MySQL Replication là một kỹ thuật trong MySQL cho phép dữ liệu từ một Server CSDL MySQL [master] được nhân bản đến một hoặc nhiều Server MySQL khác [slave]. Ở bài này mình sẽ hướng dẫn các bạn cấu hình mysql replication với 1 master và 2 slave. Điều kiện tiên quyết là máy của bạn đã được cài đặt MariaDB. Nếu máy của bạn chưa cài đặt MariaDB thì có thể xem chi tiết cách cài đặt tại đây.
Mục lục
- Mô hình chuẩn bị
- IP planning
- Cấu hình trên master
- Cấu hình trên slave 1
- Cấu hình thêm slave vào hệ thống
- Kiểm tra.
1. Mô hình chuẩn bị.
2. IP Planning.
3. Cấu hình trên Master.
- Cấu hình firewall, cho phép lắng nghe port 3306
firewall-cmd --add-port=3306/tcp --zone=public --permanent
- Reload xác nhận cấu hình.
firewall-cmd --reload
- Chỉnh sửa file
7vi /etc/my.cnf
vi /etc/my.cnf
- Trong phần
8 thêm các dòng sau:vi /etc/my.cnf
[mariadb]
server-id=1
log-bin=master
binlog-format=row
binlog-do-db=replica_db
- Trong đó :
9 là tùy chọn được sử dụng trong replication cho phép master server và slave server có thể nhận dạng lẫn nhau. Server_id Với mỗi server là khác nhau, nhận giá trị từ 1 đến 4294967295[mariadb >=10.2.2] và 0 đến 4294967295[mariadb =vi /etc/my.cnf
0 hay[mariadb] server-id=1 log-bin=master binlog-format=row binlog-do-db=replica_db
1 là tên cơ sở nhật ký nhị phân để tạo tên tệp nhật ký nhị phân.[mariadb] server-id=1 log-bin=master binlog-format=row binlog-do-db=replica_db
2 là định dạng dữ liệu được lưu trong file bin log.[mariadb] server-id=1 log-bin=master binlog-format=row binlog-do-db=replica_db
3 là tùy chọn để nhận biết cơ sở dữ liệu nào sẽ được replication. Nếu muốn replication nhiều CSDL, bạn phải viết lại tùy chọn binlog-do-db nhiều lần. Hiện tại không có option cho phép chọn toàn bộ CSDL để replica mà bạn phải ghi tất cả CSDL muốn replica ra theo option này.[mariadb] server-id=1 log-bin=master binlog-format=row binlog-do-db=replica_db
- Restart lại dịch vụ mariadb để nhận cấu hình mới.
systemctl restart mariadb
- Sử dụng root user đăng nhập vào MariaDB.
mysql -u root -p
- Tạo CSDL có tên là
4.[mariadb] server-id=1 log-bin=master binlog-format=row binlog-do-db=replica_db
create database replica_db;
- Tạo Slave user, password và gán quyền cho user đó. Ví dụ sử dụng username là
5 và password là[mariadb] server-id=1 log-bin=master binlog-format=row binlog-do-db=replica_db
6.[mariadb] server-id=1 log-bin=master binlog-format=row binlog-do-db=replica_db
> create user 'slave_user'@'%' identified by 'abc@123';
> stop slave;
Query OK, 0 rows affected, 1 warning [0.062 sec]
> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'abc@123';
Query OK, 0 rows affected [0.061 sec]
- Xác nhận lại các thay đổi với câu lệnh:
FLUSH PRIVILEGES;
- Sử dụng câu lệnh dưới đây để chắc chắn rằng không có bất cứ điều gì được ghi vào master database trong quá trình replication dữ liệu. Ghi nhớ
7 and[mariadb] server-id=1 log-bin=master binlog-format=row binlog-do-db=replica_db
8 của[mariadb] server-id=1 log-bin=master binlog-format=row binlog-do-db=replica_db
9 để có thể thực hiện cấu hình trên slave.[mariadb] server-id=1 log-bin=master binlog-format=row binlog-do-db=replica_db
FLUSH TABLES WITH READ LOCK;
- Tiến hành
0 CSDL trên master server và chuyển nó đến slave server.systemctl restart mariadb
firewall-cmd --reload
0- Đăng nhập vào MariaDB với root user và thực hiện unlock table bằng lệnh:
firewall-cmd --reload
1- Copy
1 file tới Slave server 1.systemctl restart mariadb
firewall-cmd --reload
2 - Sử dụng câu lệnh dưới để kiểm tra trạng thái của master.
firewall-cmd --reload
34. Cấu hình trên Slave1
- Cấu hình firewall, cho phép lắng nghe port 3306.
firewall-cmd --add-port=3306/tcp --zone=public --permanent
- Reload xác nhận lại cấu hình.
firewall-cmd --reload
- Chỉnh sửa /etc/my.cnf .
firewall-cmd --reload
6Sau đó thêm vào các dòng sau:
firewall-cmd --reload
7- Import CSDL master. Enter password của root user trong Mariadb.
firewall-cmd --reload
8- Restart MariaDB service để tiếp nhận thay đổi.
systemctl restart mariadb
- Sử dụng root user đăng nhập vào MariaDB Server.
mysql -u root -p
- Hướng dẫn Slave tìm file Master Log file và Start Slave.
vi /etc/my.cnf
1- Kiểm tra trạng thái của Slave, sử dụng lệnh:
vi /etc/my.cnf
2Slave status.5. Cấu hình thêm Slave vào hệ thống.
5.1 Cấu hình trên Master.
- Bật tính năng read only để không ghi thêm dữ liệu mới vào CSDL và tắt replication:
vi /etc/my.cnf
3- Tiến hành backup CSDL trên master server và chuyển nó đến slave server.
vi /etc/my.cnf
4- Đăng nhập vào MariaDB với root user và thực hiện unlock table bằng lệnh sau.
vi /etc/my.cnf
5- Copy masterdatabase.sql file tới Slave server.
vi /etc/my.cnf
65.2 Cấu hình trên Slave 2.
Các bạn thực hiện cấu hình tương tự như ở slave 1.
Lưu ý : phần chỉnh sửa trong file
2 ở mục server-id bạn phải đặt id khác với id của master và slave 1. phần chỉnh sửa trong file systemctl restart mariadb
systemctl restart mariadb
2 ở mục
server-id bạn phải đặt id khác với id của master và slave 1. 6. Kiểm tra.
Sử dụng tài khoản root đăng nhập vào mysql. Sau đó tạo và insert thông tin vào các bảng trên master. Đăng nhập vào các slave để kiểm tra thông tin đã được đồng bộ từ master qua slave hay chưa.
- Ở bài này mình sẽ tạo bảng SV và insert các thông tin vào bảng trên máy master như hình dưới đây :
- Sau đó sử dụng tài khoản root đăng nhập vào mariadb để kiểm tra thông tin từ máy master đã được đồng bộ qua các máy slave chưa.
Sử dụng câu lệnh
systemctl restart mariadb
3 để hiển thị các bảng.Như vậy là các thông tin ở máy Master đã được đồng bộ qua máy Slave.
Chúc các bạn thành công.