整個流程主要分爲:
- 創建備份數據庫的文件夾;
- 編寫備份數據庫以及清理過期文件的腳本;
- 編寫定時任務,定時啓動腳本
創建備份目錄
這裏演示的備份目錄是在/root/mysql_bak,可以根據自己想要把備份目錄放在哪個文件夾下更改對應路徑即可:
mkdir /root/mysql_bak
編寫腳本
進入mysql_bak目錄
cd /root/mysql_bak
創建backup.sh文件
vi backup.sh
#!/bin/bash
#*****************************************
#***********mysql自動備份壓縮*************
#filename=backup_dbfile.sh *
#Author:fengbin *
#email:[email protected] *
#*****************************************
#設置mysql登陸參數
User=root
Password=oneapm_si
echo "******root賬戶登錄成功*************"
#備份文件要保存的目錄
date=`date +"%Y%m%d"`
Path=/app/mysql//backup_databases/$date
export PATH=$PATH:/app/mysql/mysql/bin
[ -d "$Path" ] || mkdir -p "$Path"
echo"***backup_path=/app/mysql/backup_databases/date successfully ***"
#備份和壓縮all databases 全量備份並壓縮
mysqldump -u$User -p$Password --opt --routines --flush-logs --single_transaction --master-data=2 --all-databases >$Path/$date.sql
cd $Path
tar czvf $date.sql.tar.gz $date.sql
echo "$date.sql.tar.gz備份成功!"
#刪除.sql 文件 只保留tar.gz壓縮文件
rm -rf $date.sql
echo "**************刪除.sql 文件 只保留tar.gz壓縮文件********"
# keep 7-days的數據
find /app/mysql/backup_mysql/backup_databases/* -mtime +7 -exec rm -rf {} \;
echo "*************刪除7天前的目錄和tar.gz file************"
賦予權限,如果不給予權限的話,該腳本是無法運行的
chmod +x backup.sh
編輯定時任務
執行以下命令:crontab -e
#每週日零點執行數據庫備份腳本
0 0 * * 0 /root/mysql_bak/backup.sh
Crontab 格式
分 時 日 月 周 執行命令
第 1 列分鐘 1~59,每分鐘用 * 或者*/1表示,整點分鐘數爲00或0
第 2 列小時 1~23(0 表示 0 點)
第 3 列日 1~31
第 4 列月 1~12
第 5 列星期 0~6(0 表示星期天)
第 6 列要運行的命令
0 3 * * * /root/mysql_bak/backup.sh,此命令表示在每天的凌晨三點執行一次腳本,可自行調整時間
重啓crondtab服務
編寫好定時任務後,需要重啓crondtab服務,命令如下:
service crond restart