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 [email protected]
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ệudatabasename
– tên cơ sở dữ liệu cần sao lưufilename
– 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 [email protected]:/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.sql
và test-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 [email protected]:/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 [email protected]:/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 [email protected]:/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ệuhost
– 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àobackupfile.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;