I. Giới thiệu
MySQL có một chức năng gọi là Replicate cho phép duy trì các bản sao của Database từ server Master (gốc) sang một server Slave (dự phòng) để lưu trữ các dữ liệu phục vụ cho các trường hợp bạn muốn sao lưu hoặc phòng hờ trường hợp xấu nhất nếu server gốc một ngày nào đó gặp phải vấn đề ngoài ý muốn liên quan đến dữ liệu làm việc của bạn.
Hôm nay Long Vân sẽ hướng dẫn cho các bạn cách cấu hình Master – Slave để sao lưu Database nhé.
II. Chuẩn bị
– 1 Server Linux đóng vai trò làm Master.
– 1 Server Linux đóng vai trò làm Slave.
– Cơ sở dữ liệu: MySQL 8. trở lên.
III. Cài đặt MySQL Server
1. Cài đặt MySQL
Ubuntu/Debian:
sudo apt update
sudo apt install mysql-server -y
CentOS/Redhat:
sudo yum update
sudo yum install mysql-server -y
2. Khởi động MySQL
Ubuntu/Debian:
systemctl start mysql.service
systemctl enable mysql.service
CentOS/Redhat:
systemctl start mysqld
systemctl status mysqld
IV. Cấu hình Master – Slave
Server Master
1. Truy cậo vào file cấu hình của MySQL và điều chỉnh các thông số cần thiết như sau:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
– bind-address: IP của server
– Master log_error: file log lỗi (mặc định)
– server-id: id của server ( bạn có thể chọn bất kỳ số nào làm giá trị nhưng số đó phải là duy nhất không được trùng với các id của server khác)
– binlog_do_db: Database mà bạn muốn Replicate
* Bạn có thể Replicate nhiều Database với chỉnh sửa như sau:
binlog_do_db = db
binlog_do_db = db_1
binlog_do_db = db_2
Sau khi điều chỉng thông số hoàn tất chúng ta sẽ restart lại MySQL để nhận cấu hình:
sudo systecmtl restart mysql
2. Tiếp theo sẽ vào MySQL tạo user và phân quyền bằng lệnh “sudo mysql“:
mysql> CREATE USER 'slave_user'@'slave_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'slave_server_ip';
mysql> FLUSH PRIVILEGES;
*Lưu ý: thay thế các thông số của slave_user thành thành thông tin của server Slave nhé!
Tiếp theo ta sẽ truy xuất toạ độ Binary Log từ server Master
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
Đây sẽ là vị trí mà các server Slave bắt đầu sao chép database, chúng ta sẽ lưu lại thông tin của “File” và “Position”, vì sẽ cần dùng để cấu hình cho server Slave
3. Tạo Database cần sao lưu cho server Master:
mysql> CREATE DATABASE longvan_db;
mysql> Use longvan_db;
mysql> CREATE TABLE longvan_table ( longvan_column varchar(30) );
mysql> INSERT INTO longvan_table VALUES (‘longvan.net'), ('support.longvan.net');
Server Slave
Đầu tiên chúng ta sẽ vào file config của Mysql
vi /etc/mysql/mysql.conf.d/mysql.cnf
Ở đây các thông số sẽ tương tự với Master ngoại trừ server-id là đặc thù nên phải thay đổi, và ngoài ra thêm phần relay-log xác định vị trí lưu nhật ký chuyển tiếp của bản sao Database.
Restart lại MySQL để nhận cấu hình trên server Slave
sudo systemctl restart mysql
Sau đó chúng ta vào giao diện của Mysql để cấu hình cho server Slave kết nối được Master
sudo mysql
mysql> CHANGE REPLICATION SOURCE TO
mysql> SOURCE_HOST='Master_server_ip', # ip của server Master
mysql> SOURCE_USER='slave_user', # user replicate tạo trên server Master
mysql> SOURCE_PASSWORD='password', # password user replicate
mysql> SOURCE_LOG_FILE='mysql-bin.000004’, # thông số File lưu ở server Master
mysql> SOURCE_LOG_POS=157; # thông số Position đã lưu ở Master
Sau đó chúng ta sẽ dùng lệnh START SLAVE; để bắt đầu sao lưu database
Như ta thấy vậy là server Slave đã replicate được database của server Master