Get in touch
or send us a question?
CONTACT

Cách tự động hóa sao lưu cơ sở dữ liệu MySQL trong Linux

Các giải pháp được mô tả ở đây hoạt động cho bất kỳ bản phân phối Linux nào: Ubuntu, Red Hat, Open SUSE, CentOS, Debian, Oracle Linux, v.v. Tuy nhiên, các lệnh cài đặt gói có thể khác nhau.

Việc tự động sao lưu cơ sở dữ liệu MySQL Server là rất quan trọng để ngăn ngừa mất mát dữ liệu. Để tự động hóa các bản sao lưu đúng cách, bạn phải làm theo các bước sau:

  1. Tạo một bản sao lưu cơ sở dữ liệu
  2. Zip bản sao lưu
  3. Mã hóa tệp nén
  4. Gửi bản sao lưu tới bộ nhớ Internet bằng FTP, Dropbox, AWS, Google Drive, v.v.
  5. Nhận thông báo qua email liên quan đến kết quả sao lưu
  6. Tạo lịch trình dự phòng
  7. Xóa các bản sao lưu cũ

Bài viết này có 2 giải pháp:

  1. Tạo một tập lệnh bash
  2. Sử dụng AutoMySQLBackup

I. Tập lệnh bash

Trong hầu hết các trường hợp, một tập lệnh bash là một giải pháp tốt. Tuy nhiên, không phải tất cả các vị trí lưu trữ đều cho phép bạn tải tệp lên bằng lệnh shell. Tuy nhiên, nếu tất cả những gì bạn muốn làm là lưu các bản sao lưu vào một thư mục, thì bạn có thể thực hiện việc này bằng cách sử dụng một tập lệnh đơn giản.

Để thiết lập giải pháp này, chúng ta cần cài đặt mailutils postfix . Trong Ubuntu, chúng ta có thể thực hiện việc này như sau:

sudo apt-get update 
sudo apt-get install postfix mailutils

Sau đây là cách triển khai đơn giản nhất của tập lệnh bash để thực hiện sao lưu thông thường. Ở phần đầu của script, chúng tôi chỉ định thư mục lưu trữ sao lưu, địa chỉ email thông báo và khoảng thời gian lưu trữ sao lưu.

# Backup storage directory 
backupfolder=/var/backups

# Notification email address 
recipient_email=<username@mail.com>

# MySQL user
user=<user_name>

# MySQL password
password=<password>

# Number of days to store the backup 
keep_day=30 

sqlfile=$backupfolder/all-database-$(date +%d-%m-%Y_%H-%M-%S).sql
zipfile=$backupfolder/all-database-$(date +%d-%m-%Y_%H-%M-%S).zip 

# Create a backup 
sudo mysqldump -u $user -p$password --all-databases > $sqlfile 

if [ $? == 0 ]; then
  echo 'Sql dump created' 
else
  echo 'mysqldump return non-zero code' | mailx -s 'No backup was created!' $recipient_email  
  exit 
fi 

# Compress backup 
zip $zipfile $sqlfile 
if [ $? == 0 ]; then
  echo 'The backup was successfully compressed' 
else
  echo 'Error compressing backup' | mailx -s 'Backup was not created!' $recipient_email 
  exit 
fi 
rm $sqlfile 
echo $zipfile | mailx -s 'Backup was successfully created' $recipient_email 

# Delete old backups 
find $backupfolder -mtime +$keep_day -delete

Cron cho phép bạn lập lịch chạy script này thường xuyên. Để tạo điều kiện thuận lợi cho việc này, hãy làm như sau:

sudo crontab -e

Sau đó, thêm đường dẫn tập lệnh vào cuối chuỗi

30 22 * * * /home/user/script/mysql_backup.sh

Sau đó, tập lệnh của bạn sẽ được thực thi hàng ngày vào lúc 10:30 tối.

Tóm lược

Tạo tập lệnh bash là một giải pháp tốt và đơn giản nếu bạn biết bash và cách hỗ trợ nó. Tuy nhiên, giải pháp này cũng kéo theo những nhược điểm nhất định. Bạn sẽ thấy rằng rất khó để định cấu hình lưu các bản sao lưu vào Google Drive hoặc DropBox. Lưu trữ đám mây hiếm khi hỗ trợ giao diện CLI. Ngoài ra, nó có thể là một nhiệm vụ khó khăn để thực hiện xóa tự động các bản sao lưu cũ.

II. AutoMySQLbackup

AutoMySQLBackup là một tiện ích dòng lệnh được phân phối theo giấy phép GNU.
Tiện ích này cho phép bạn tự động hóa quá trình sao lưu cho cơ sở dữ liệu MySQL và nó cũng cho phép bạn thực hiện sao lưu gia tăng.

Cài đặt

Nếu bản phân phối Linux của bạn là Debian, thì AutoMySQLBackup có sẵn trong kho lưu trữ
và bạn có thể cài đặt nó đơn giản bằng cách chạy lệnh sau:

sudo apt-get install automysqlbackup

Nếu bản phân phối Linux của bạn dựa trên RPM, quá trình thiết lập sẽ liên quan nhiều hơn một chút.

1. Tải xuống phiên bản AutoMySQLBackup mới nhất

wget https://github.com/sixhop/AutoMySQLBackup/archive/master.zip

2. Tạo một thư mục và giải nén kho lưu trữ đã tải xuống

mkdir /opt/automysqlbackup
mv AutoMySQLBackup-master.zip 
cd /opt/automysqlbackup
tar -zxvf AutoMySQLBackup-master.zip

3. Sau đó cài đặt AutoMySQLBackup

mkdir /opt/automysqlbackup
mv AutoMySQLBackup-master.zip 
cd /opt/automysqlbackup
tar -zxvf AutoMySQLBackup-master.zip

Cài đặt AutoMySQLBackup

Để cấu hình AutoMySQLBackup, bạn phải chỉnh sửa tệp automysqlbackup.conf:

sudo nano /etc/automysqlbackup/automysqlbackup.conf

Xin lưu ý những điều sau:

1. Đường dẫn đến tệp cấu hình

CONFIG_configfile="/etc/automysqlbackup/automysqlbackup.conf"

2. Đường dẫn đến thư mục lưu trữ sao lưu

CONFIG_backup_dir='/var/backup/db'

3. Thông tin kết nối với MySQL

CONFIG_mysql_dump_username='root' 
CONFIG_mysql_dump_password='my_password' 
CONFIG_mysql_dump_host='localhost'

4. Danh sách cơ sở dữ liệu bạn cần hoặc không cần sao lưu

CONFIG_db_names=('my_db') 
CONFIG_db_exclude=('information_schema')

5. Địa chỉ thông báo qua email

CONFIG_mail_address='mail@google.com'

6. Các tùy chọn để lên lịch

CONFIG_rotation_daily=6 
CONFIG_rotation_weekly=35 
CONFIG_rotation_monthly=150

7. Chạy tập lệnh bash sau khi sao lưu

POSTBACKUP="/etc/mysql-backup-post"

Nếu bạn định lưu trữ các bản sao lưu trong một số ngày giới hạn, thì bạn có thể xóa các bản sao lưu bằng cách định cấu hình tập lệnh POSTBACKUP như sau:

# Delete backups that are older than 30 days 
find /var/backup/db -mtime +30 -delete

By default, AutoMySQLBackup will compress the files using “gzip.” You can change this by editing the CONFIG_mysql_dump_compression parameter. If you want to add encryption, then use the CONFIG_encrypt and CONFIG_encrypt_password parameters.

Running

To run AutoMySqlBackup execute the following command:

automysqlbackup /etc/automysqlbackup/automysqlbackup.conf

Summary

This solution can be a good alternative if you are not a bash power user and want a simple solution for backing up MySQL databases to a folder. One particularly notable feature is the ability to create incremental backups. The disadvantages of this solution include lack of support for integrated FTP and cloud storage locations. Even if you just want to upload to FTP, you need to write a separate bash script.

Nguồn: https://sqlbak.com/blog/how-to-automate-mysql-database-backups-in-linux