MySQL数据库备份脚本 定期备份 压缩
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++工具全局替换" "为"" 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表达式的相关内容可以参照
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定时备份数据库(全库备份): Linux find查询最近更新访问过的文件:
下一篇:
加载resources目录下的文件