[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.
1. Đặt vấn đề
Database của bạn đang dùng cho ứng dụng là MySQL và MariaDB 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
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
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ả
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ẻ
All rights reserved