MySQL数据库备份脚本 定期备份 压缩

5 篇文章 0 订阅
3 篇文章 0 订阅


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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值