Incremental backup mariadb

Last modified by Admin on 2023/12/27 09:18

Tổng quan

Incremental backup là một sang sao lưu dữ liệu tăng dần so với bản backup lần đầu tiên. Trong incremental backup, bản backup đầu tiên sẽ là bản backup đầy đủ. Các bản tiếp theo sẽ chỉ lưu trữ những thay đổi so với bản đầu tiên. Điều này sẽ giúp việc sao lưu nhanh hơn và tiết kiệm bộ nhớ hơn mà vẫn đảm bảo dữ liệu đầy đủ. Đồng thời có thể hỗ trợ việc thực hiện restore được nhiều lần, đối với csdl có lượng dữ liệu lớn, hạn chế downtime cho quá trình backup và restore.

image2022-10-12_17-6-50.png

Ở bài này mình sẽ thực hiện increment backup và restore dữ liệu này sang một server khác. Các thông tin cơ bản như sau

  • Hệ điều hành: Ubuntu 22.04
  • Mariadb
  • Server Vmware:
    • Server 1: 192.168.126.139
    • Server 2: 192.168.126.140

Các bước thực hiện

Cài đặt mariadb

Bước này bạn cần thực hiện ở cả 2 server vmware. Update repo của ubuntu

sudo apt update -y

Thực hiện cài đặt mariadb

sudo apt install mariadb-server mariadb-client -y

Thực hiện cài đặt secure cho mariadb

sudo mariadb-secure-installation

Nhấn Enter để xác nhận chưa có pass root do là lần cài đặt đầu tiên.

image2022-10-12_17-7-25.png

Sau đó bạn nhập password cho user root của mariadb. Ở các mục tiếp theo, bạn chọn yes thumb_up hết ở tất cả các mục

Khởi động mariadb


sudo systemctl start mariadb
sudo systemctl enable mariadb

image2022-10-12_17-8-49.png


Cấu hình binary logging

Tiếp theo, ta cần kích hoạt binary logging để có thể thực hiện incremental backup. Mở file cấu hình mariadb

sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

image2022-10-12_17-9-1.png

Bỏ comment dòng log_bin và chỉnh sửa như sau:

log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_format = mixed

lưu lại file sau đó restart lại mariadb

sudo systemctl restart mariadb

Ta kiểm tra thử thư mục lưu binary log

ll -a /var/log/mysql/

image2022-10-12_17-9-48.png

Tạo database và insert dữ liệu

Ta sẽ tạo thử 1 database và insert dữ liệu vào

mysql -u root -p

image2022-10-12_17-10-12.png

CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_tbl( my_id INT NOT NULL AUTO_INCREMENT, my_field VARCHAR(100) NOT NULL, submission_date DATE, time_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY ( my_id ) );
INSERT into test_tbl (my_field) VALUES ('val1');
INSERT into test_tbl (my_field) VALUES ('val2');
INSERT into test_tbl (my_field) VALUES ('val3');
EXIT;

image2022-10-12_17-11-3.png

Thực hiện full backup

Tiếp theo, ta sẽ thực hiện backup database vừa tạo ra file sql

mysqldump -uroot -p test_db --single-transaction --flush-logs --master-data=2 > test_db.sql

Trong đó --flush-logs là option giúp đóng file log binary hiện tại và tạo 1 file binary mới.

Kiểm tra số lượng file log hiện tại

ll -a /var/log/mysql/

image2022-10-12_17-11-42.png

Tiếp theo, ta sẽ thực insert thêm bản ghi cho database

mysql -u root -p
USE test_db;
INSERT INTO test_tbl (my_field) VALUES ('val4');
INSERT INTO test_tbl (my_field) VALUES ('val5');
INSERT INTO test_tbl (my_field) VALUES ('val6');
Exit;

image2022-10-12_17-11-54.png

Thực hiện restore sang server khác

Ta sẽ thực hiện làm mới binary log cho incremental backup trước khi gửi sang server khác.

mysqladmin -uroot -p flush-logs

Ta sẽ sử dụng rsync để chuyển file log và file dump sang 1 server mới như sau:

rsync -av test_db.sql 192.168.126.140:/home/huantt
rsync -av /var/log/mysql/mysql-bin.000002 192.168.126.140:/home/huantt

image2022-10-12_17-12-57.png

Thực hiện tạo database mới ở server cần restore

mysql -u root -p


CREATE DATABASE test_db;
EXIT;

image2022-10-12_17-13-46.png

Thực hiện restore database từ file sql.

mysql -u root -p test_db < test_db.sql

Check thử nội dung data đã restore được

mysql -u root -p


USE test_db;
SELECT * FROM test_tbl;

image2022-10-12_17-14-20.png

Thực hiện restore database từ file binary log

mysqlbinlog mysql-bin.000002 | mysql -u root -p test_db

Tiếp tục check lượng data đã restore được

mysql -u root -p


USE test_db;
SELECT * FROM test_tbl;

image2022-10-12_17-14-32.png

Như vậy là bạn đã thự hiện xong việc restore database dạng incremental sang 1 server mới thành công.