前言
由于項目需要,要求實作定時備份使用者資料的功能,以便資料庫出現意外時可以恢複資料。本項目為 SaaS 架構,我們會為每個新注冊的公司動态生成一個資料庫,用來存放該公司下的所有資料,是以,我們做資料備份的時候也需要動态備份該項目相關的所有資料庫。
實作思路
經過一番查閱,決定采用 mysql 自帶的備份指令,配合 Linux 的定時任務,實作每天定時備份所有使用者資料。即編寫一個 shell 腳本,寫入備份指令,然後讓 Linux 去定時執行這個腳本。
實作步驟
1. 建立目錄 /root/mysqlbackup/shell/ ,并将 mysql_dump_script.sh 和 mysqlCron.cron 移動到該目錄下
2. 為 mysql_dump_script.sh 和 mysqlCron.cron 賦予可執行權限:
sudo chmod 777 XXX.XX
3. 添加定時任務,執行指令:
crontab mysqlCron.cron
4. 檢視定時任務是否成功建立:
crontab -l
注:
1. mysql_dump_script.sh 是執行資料庫備份腳本,如本例中每次執行會導出所有以 cloud_ 開頭的資料庫的所有結構和資料,
并存至 xx.sql 檔案,xx為執行時的日期。另外,預設儲存最近 31 份檔案,超出部分會從最原始的檔案開始删除,直至總量保持在 31。
2. mysqlCron.cron 是定時任務檔案
附上本文提及的腳本源碼:
mysql_dump_script.sh
#!/bin/bash
#儲存備份個數,備份31天資料
number=31
#備份儲存路徑
backup_dir=/root/mysqlbackup
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#使用者名
username=root
#密碼
password=1234
#如果檔案夾不存在則建立
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi
#資料備份指令,導出所有資料結構和資料
mysql -e "show databases;" -u$username -p$password | grep "cloud_*" | xargs mysqldump -u$username -p$password --databases > $backup_dir/backup-$dd.sql
#記錄建立備份日志
echo "create $backup_dir/$backup-$dd.dupm" >> $backup_dir/log.txt
#找出需要删除的備份
delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1`
#判斷現在的備份數量是否大于$number
count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l`
if [ $count -gt $number ]
then
#删除最早生成的備份,隻保留number數量的備份
rm $delfile
#寫删除檔案日志
echo "delete $delfile" >> $backup_dir/log.txt
fi
mysqlCron.cron
0 2 * * * /root/mysqlbackup/shell/mysql_dump_script.sh