Sao lưu và khôi phục dữ liệu là vấn đề rất quan trọng khi quản trị cơ sở dữ liệu (CSDL), đảm bảo cho dữ liệu không bị mất mát và nếu có sự cố xảy ra thì có thể khôi phục lại trạng thái của CSDL trước khi xảy ra sự cố. Bài viết này hướng dẫn bạn sao lưu và phục hồi cơ sở dữ liệu MariaDB trên máy chủ CentOS 7.

Mục lục


1. Mô hình

2. Chuẩn bị

3. Backup – Sao lưu dữ liệu

4. Sử dụng SCP để chuyển file/folder giữa các hệ thống

5. Khôi phục dữ liệu được backup qua SSH

1. Mô hình

2. Chuẩn bị

  • 2 máy ảo CentOS 7 cài MariaDB 10.4.x, có kết nối Internet.
  • Tài khoản có thể đăng nhập vào hệ thống và có quyền sudo. Hướng dẫn dưới đây sử dụng tài khoản root.
  • Yêu cầu tối thiểu đối với các thông số trên Server:

3. Backup – Sao lưu dữ liệu

SSH vào MariaDB Server backup bằng root user

ssh root@192.168.136.133

Cú pháp:

mysqldump -u [username] -p [databaseName] > [filename]-$(date +%F).sql

username – tên người dùng có quyền sao lưu cơ sở dữ liệu
databasename – tên cơ sở dữ liệu cần sao lưu
filename – tên của bản sao dữ liệu
-$(date +%F) mốc thời gian sao lưu dữ liệu

Ví dụ 1: Tạo bản sao lưu của toàn bộ hệ thống quản lý cơ sở dữ liệu

mysqldump --all-databases --single-transaction --quick --lock-tables=false > full-backup-$(date +%F).sql -u root -p 

Ví dụ 2: Sao lưu một sơ sở dữ liệu cụ thể. Thay test bằng tên cơ sở dữ liệu bạn muốn sao lưu.

mysqldump -u root -p test --single-transaction --quick --lock-tables=false > test-backup-$(date +%F).sql

Ví dụ 3: Sao lưu một bảng duy nhất từ một cơ sở dữ liệu. Thay test bằng tên cơ sở dữ liệu chứa bảng, thay sinhvien bằng tên bảng bạn muốn sao lưu.

mysqldump -u root -p --single-transaction --quick --lock-tables=false test sinhvien > test-sinhvien-$(date +%F).sql

Phân tích các tùy chọn lệnh được sử dụng ở trên:

--single-transaction – đưa ra câu lệnh BEGIN SQL trước khi vào máy chủ
--quick – Đọc các bảng lớn theo cách không yêu cầu có đủ RAM để phù hợp với toàn bộ bảng trong bộ nhớ.
--lock-tables=false – Không khóa bảng cho phiên sao lưu.

4. Sử dụng SCP để chuyển file/folder giữa các hệ thống

SCP là viết tắt của Secure Copy là một ứng dụng sử dụng giao thức SSH thường dùng để sao chép dữ liệu từ máy linux này sang máy linux khác.

Cài đặt SCP trên Centos 7(Thực hiện trên cả 2 server)

Thường thì SCP được cài đặt sẵn trên linux, nếu chưa có sử dụng lệnh dưới để cài:

yum install scp -y
Lệnh cơ bản
  • Cú pháp:
scp source_file username@destination_host:/destination_folder

Ví dụ 1: Trên server backup chuyển file test-backup-2019-08-10.sql đến server restore

scp test-backup-2019-08-10.sql root@192.168.136.132:/root/testscp

Kiểm tra trên server restore đã nhận được file backup chưa

ls -lah

Output:

-rw-r--r--.  1 root root 2.1K Aug  3 03:32 testscp

Ví dụ 2: Chuyển nhiều file cùng lúc:

Trên server restore, tạo 1 folder chứa các file backup được chuyển đến

 mkdir test 

Trên server backup, thực hiện sao chép 2 file test-backup-2019-08-10.sqltest-sinhvien-2019-08-10.sql sang folder test vừa tạo trên server restore:

scp test-backup-2019-08-10.sql test-sinhvien-2019-08-10.sql  root@192.168.136.132:/root/test

Kiểm tra server restore đã nhận được file backup chưa

ls -lah

Output:

drwxr-xr-x.  3 root root  113 Aug  3 02:34 test
  • Chuyển cả một thư mục, sử dụng tham số -r
scp -r /var/lib root@192.168.136.132:/root/test
  • Từ server backup lấy dữ liệu trên server restore về:
 scp user@hostname:/dir_backup [dir_save] 

Ví dụ: Lấy file /root/test/test-backup-2019-08-10.sql trên server restore về và lưu lại trong file /var/testrestore

scp root@192.168.136.132:/root/test/test-backup-2019-08-10.sql /var/testrestore 

5. Khôi phục dữ liệu được backup qua SSH

Câu lệnh:

mysql -u user -p -h host database_name < backupfile.sql

user – tên tài khoản bạn dùng để khôi phục dữ liệu
host – phần hostname của tài khoản(%, localhost, IP)
database_name – tên cơ cở dữ liệu bạn muốn khôi phục vào
backupfile.sql – file dữ liệu đã sao lưu bạn dùng để khôi phục.

Ví dụ: Trên server restore khôi phục CSDL có trong test-backup-2019-08-10.sql vào CSDL test

mysql -u root -p -h localhost test < /root/test/test-backup-2019-08-10.sql

hoặc

mysql -u root -p
create database test;
source /root/test/test-backup-2019-08-10.sql;

Tham khảo các bài viết khác