在生产环境,我们一般需要定时将数据库进行备份,只需要将数据库的备份写成shell脚本,然后利用linux的cron进行定时调用shell就可以达到定时备份的目的
编写shell脚本,不在于语法的难度,而是想好每一步怎么做。
- 定义备份目录,定义数据库连接信息
- 清理备份目录,我的思路是备份目录只保留当天的,当天以前移动到old目录,当天的备份目录,可以开启另一个shell,将里面的文件传到云端存储
- 获取当前时间及昨天的当前时间
- 通过
mysqldump
备份mysql - 压缩备份后的mysql文件,并删除.sql源文件
- 清理大于5天的备份文件
#!bin/bash
BACK=/home/dbbak/backup
OLDBACK=/home/dbbak/oldbackup
# Database info
DB_USER="user"
DB_PASS="pass"
DB_HOST="host"
DB_NAME1="dbname"
mv $BACK/backup* $OLDBACK/
# Others vars
DATE=$(date +%Y-%m-%d-%H-%M-%S)
# yesterday
YESDATE=$(date +%Y-%m-%d-%H-%M -d "-1day")
# TODO
mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME1 >$BACK/backup-$DB_NAME1-$DATE.sql
#mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME2 >$BACK/backup-$DB_NAME2-$DATE.sql
zip -r $BACK/backup-$DB_NAME1-$DATE.zip $BACK/backup-$DB_NAME1-$DATE.sql
#zip -r $BACK/backup-$DB_NAME2-$DATE.zip $BACK/backup-$DB_NAME2-$DATE.sql
rm -rf $BACK/backup-$DB_NAME1-$DATE.sql
# delete yesterday current the bak
find $OLDBACK -mtime +5 -name "*.zip" -exec rm -rf {} \;