linux 使用mysqldump命令备份数据库,gzip进行压缩.只保留固定数量的备份文件,逾期自动删除.
1. 编写脚本 /home/someShells/db_back.sh
脚本内容:
#!/bin/bash
#保存备份个数,备份31天数据
number=31
#备份保存路径
backup_dir=/home/mysqlbackup
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份工具
back_tool=mysqldump
#压缩工具
ys_tool=gzip
#将要备份的数据库
database_name=test_db
#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi
#简单写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql
#本处直接将用户和密码写在了数据的配置文件my.cnf,不需要再明文写出
$back_tool $database_name > $backup_dir/$database_name-$dd.sql
#压缩文件
$ys_tool $backup_dir/$database_name-$dd.sql
#写创建备份日志
echo "create $backup_dir/$database_name-$dd.sql.gz" >> $backup_dir/log.txt
#找出需要删除的备份
files_delete=`find "$backup_dir" -type f -name "${database_name}*" -mtime +$number`
if [ -n "$files_delete" ];
then
rm $files_delete;
#写删除文件日志
echo "delete $files_delete" >> $backup_dir/log.txt;
fi
注意事项:
1. 如果是在Win环境下编辑上传的,需要注意换行符的编码和linux下不一样,容易导致脚本运行出错,建议使用NotePad++工具全局替换"\r"为""
2. 关于mysqldump: 在使用定时任务执行的时候, 系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,则会导致出现找不到mysqldump命令(脚本可以直接执行, 但用定时任务执行却发现备份后的文件是空文件, 查询定时任务日志,会发现提示找不到mysqldump命令)
解决方法:
1、知道mysql命令或mysqldump命令的完整路径,可以使用find命令查找
find / -name mysqldump -print
比如mysql的路径是:/usr/local/mysql/bin/mysqldump
2、映射一个链接到/usr/bin目录下,相当于建立一个软链接文件
ln -s /usr/local/mysql/bin/mysqldump /usr/bin
此时再使用mysqldump命令就可以了
2. 赋予脚本可执行权限
chmod +x /home/someShells/db_back.sh
3. 修改mysql的配置文件
vim /etc/my.cnf
添加内容:
[mysqldump]
user=root
password=root
4.编写定时任务myJob.cron
vim myJob.cron
添加内容:
#分 时 天 月 星期 待执行的脚本
* * * * * /home/someShells/db_back.sh # 每分钟执行一次
关于cron表达式的相关内容可以参照https://blog.csdn.net/weixin_45884459/article/details/113851090
5. 执行定时任务
crontab myJob.cron
#crontab -l 可以查看定时任务是否成功
6. 另一种比较保守的删除备份文件的模式
#找出需要删除的备份
delfile=`ls -l -crt $backup_dir/*.gz | awk '{print $9 }' | head -1`
#判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/*.gz | awk '{print $9 }' | wc -l`
if [ $count -gt $number ];
then
#删除最早生成的备份,只保留number数量的备份
rm $delfile;
#写删除文件日志
echo "delete $delfile" >> $backup_dir/log.txt;
fi
7. 参考文献
MySQL定时备份数据库(全库备份):https://www.cnblogs.com/letcafe/p/mysqlautodump.html#4841113
Linux find查询最近更新访问过的文件: https://blog.csdn.net/apextrace/article/details/7399567