+7

[Linux] Làm thế nào backup tự động hằng ngày database Mysql hoặc Mariadb với MySQLDump

Chào 500 anh em yêu tech. Lại là mình đây, lâu rồi chưa có bài viết nào mới chia sẻ với anh em. Hôm nay mình có tip nhỏ chia sẻ với anh em đây. Làm thế nào Backup tự động hằng ngày database Mysql hoặc Mariadb với MySQLDump.

Hình minh hoạ database backup

1. Đặt vấn đề

Database của bạn đang dùng cho ứng dụng là MySQLMariaDB có thể bị hỏng, lỗi... do phần cứng server như đĩa, ram vì một sự cố đột ngột như ngắt điện chẳng hạn có thể làm hỏng hoàn toàn các bảng dữ liệu. Và việc sao lưu dữ liệu bằng cách sao chép dữ liệu hoặc tạo một bản snapshot trên đĩa cứng có thể không đảm bảo an toàn cho cơ sở dữ liệu ????

2. Giải pháp

Backup database daily
Như các bạn thấy trên hình là một giải pháp backup database daily. Điều này có nghĩa các bạn sẽ tạo một scripts backup và một cron job trên server để thực hiện việc này.

Mục đích của scripts:

  • Dump toàn bộ nội dung của database vào một file
  • Nén tệp thành một tệp zip
  • Ghi nhật ký về những gì đang diễn ra
  • (Tùy chọn) Đẩy dữ liệu backup(file zip) đến một NAS server

3. Các bước để tạo backup tự động hằng ngày

Ở đây mình đang sử dụng hệ điều hành Unbuntu cài Mysql hoặc Mariadb.

Bước 1: Tạo một user backup

Đầu tiên các bạn login vào database

sudo mysql

Tạo một user backup

GRANT LOCK TABLES, SELECT ON DATABASE_NAME.* TO 'USER_BACKUP'@'localhost' IDENTIFIED BY 'PASSWORD'; #Thay đổi password bạn muốn
FLUSH PRIVILEGES;

Bước 2: Tạo một scripts backup

Đầu tiên các bạn tạo một nơi để lưu trữ

cd ~
mkdir Database_Backup
touch db_backup.sh
sudo chmod 700 db_backup.sh
nano db_backup.sh

Thêm nội dung scripts vào db_backup.sh

#!/bin/bash

backupfolder=/home/Database_Backup # Thư mục lưu trữ file backup
logfile=/home/db_backup.log #ghi log ra file
# MySQL user
user=USER_BACKUP
# MySQL password
password=password
# Ngày giữ lại file backup
keep_day=15
sqlfile=$backupfolder/all-database-$(date +%Y-%m-%d_%H-%M-%S).sql
zipfile=$backupfolder/all-database-$(date +%Y-%m-%d_%H-%M-%S).zip
echo Starting Backup [$(date +%Y-%m-%d_%H-%M-%S)] >> $logfile
 
# Tạo một backup
/usr/bin/mysqldump -u$user -p$password --all-databases >> $sqlfile
if [ $? == 0 ]; then
  echo 'Sql dump created' >> $logfile
else
  echo [error] mysqldump return non-zero code $? >> $logfile
  exit
fi
# Compress backup
zip -j $zipfile $sqlfile
if [ $? == 0 ]; then
  echo 'The backup was successfully compressed' >> $logfile
else
  echo '[error] Error compressing backup' >> $logfile
  exit
fi
rm $sqlfile
echo $zipfile >> $logfile
echo Backup complete [$(date +%Y-%m-%d_%H-%M-%S)] >> $logfile
# Delete old backups
find $backupfolder -mtime +$keep_day -delete

Lưu lại và thoát chạy thử

./db_backup.sh 

Bước 3: Tạo một cron job backup hằng ngày

crontab -e

Thiết lập backup vào một thời gian trong ngày

30 22 * * * /home/will/db_backup.sh #Thay đổi thời gian bạn muốn

Backup vào lúc 10h tối hàng ngày

Bước 4: Kiểm tra backup

Sau khi chạy các bước trên bây giờ các bạn kiểm tra thành quả

Backup file

4. Tổng kết

Đóng máy, một tip nhỏ nhỏ giúp các bạn có thể sao lưu database của mình hằng ngày hi vọng hữu ích với các bạn. Thân ái!

Follow các kênh mình chia sẻ

Vibo chia sẻ

Youtube

Blog chia sẻ


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.