前言:
系统已经开发好半年之久了 一直是一个人在开发功能,一直忽略数据库安全这一块。最近刚好有时间 就将阿里云数据库进行动态定时备份,记录一下,方便更多人学习。
1.新建一个.sh 结尾的shell脚本文件(或者直接找一个现成的.sh文件然后改名字)
touch xxx.sh
2. 编辑shell脚本文件
vim xx.sh
3.编写脚本到.sh文件
#!/bin/sh
#将要备份的数据库
database_name=你的数据库名称
if [ -n "$1" ];then
database_name=$1
echo $database_name
fi
#保存备份个数
number=5
#备份保存路径
backup_dir=/home/backup/business-data-desk-db
#日期
dd=`date +%Y%m%d%M%S`
#备份工具
tool=mysqldump
#用户名
username=数据库用户名
#密码
password=数据库密码
#简单写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.dump
$tool -u $username -p$password $database_name > $backup_dir/$database_name-$dd.sql
#写创建备份日志
echo "create $backup_dir/$database_name-$dd.sql" >> $backup_dir/log.txt
#找出需要删除的备份
delfile=`ls -l -crt $backup_dir/$database_name-*.sql | awk '{print $9 }' | head -1`
#判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/$database_name-*.sql | awk '{print $9 }' | wc -l`
if [ $count -gt $number ]
then
rm $delfile #删除最早生成的备份,只保留number数量的备份
#写删除文件日志
echo "delete $delfile" >> $backup_dir/log.txt
fi
4.加入定时任务
执行命令 crontab -e
在里面加入你刚刚写好的脚本文件全部路径 并设置好时间
例如你的文件在 /etc/test.sh 你想设置在凌晨 2点执行:
则: * 2 * * * /etc/test.sh >/dev/null 2>&1;
我的任务是中午13.30 和晚上23.30执行
注意: 执行命令末尾追加 >/dev/null 2>&1; 意思是堆积标准输出和错误输出, 这样就不用发送mail了;
我是因为不加会报以下的错,所以建议加上