MySQL 5 7 10 自动备份 自动清理旧备份集

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

 

MySQL版本是5.7.10-log社区版本,需要进行备份,但是备份时间长了后,磁盘不够用,所以需要对指定旧的备份集合进行清理工作。

 

1,mysqldump备份脚本

备份脚本为,里面有几个需要注意的参数:

(1)--master-data=2 :这个参数可以在搭建从库的时候,记录当前备份的复制点信息。

 

(2)--extended-insert=false:这个在形成sql语句的时候,一条记录一个insert语句

 

(3)--single-transaction:来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为:REPEATABLE READ,以确保本次会话(dump)时,不会看到其他会话已经提交了的数据。

 

备份脚本为:backup_full.sh

date=`date "+%Y%m%d%H%M%S"`

 

back_path=/data/mysql/backup/data

 

mysqldump=/usr/local/mysql/bin/mysqldump

 

cd ${back_path}

 

${mysqldump} -uroot --password="xs_pys@7y895b"  -R -E -h localhost  --socket=/usr/local/mysql/mysql.sock --skip-opt --single-transaction  --flush-logs --master-data=2 --add-drop-table --create-option --quic

 

k --extended-insert=false --set-charset  --disable-keys --databases user_db   |gzip > user_db.${date}.sql.gz

 

${mysqldump} -uroot --password=" xs_pys@7y895b  "  -R -E -h localhost  --socket=/usr/local/mysql/mysql.sock --skip-opt --single-transaction  --flush-logs --master-data=2 --add-drop-table --create-option --quic

 

k --extended-insert=false --set-charset  --disable-keys --databases plocc_system   |gzip > plocc_system.${date}.sql.gz

 

 

2,清理多余备份的脚本

清除旧的备份脚本为:clear_old_backup.sh,大概思路为:

(1)      一年前,保存每个月的1号和16号的备份集合,其它的删除掉(# 1 for one years ago, save 1/16 on every month, else clear )。

 

(2)      六个月前,保存1号和11号和21号的备份集合,其它的删除掉(# 2 for 6 months ago, save 1/11/21 in a month)

 

(3)      一个月前,每天保存6点钟的备份集合,其它的删除掉(# 3 for a month ago,save *063001.sq.gz on a day)

 

 

(4)      三天前,保存6点钟和18点钟的备份集合,其它的删除掉(# 4 for 3 days ago, save 063001.sql.gz  and 183001.sql.gz)

 

脚本clear_old_backup.sh为:

d3=`date '+%Y-%m-%d %H:%M:%S'`

 

d2=`date '+%Y-%m-%d'`

 

logfile=/data/mysql/backup/scripts/clear_old_backup.log

 

old_backupfile=/data/mysql/backup/scripts/old_backupfile_$d2.csv

 

cd /data/mysql/backup/data

 

echo "" >> $logfile

 

echo "-- $d3 begin... --"  >>  $logfile

 

 

 

# 1 for one years  ago, save 1/16 on every month, else clear ,

 

find . -mtime +360 -name  "*.sql.gz" |grep -v "01063001.sql.gz" >>  $old_backupfile;

 

 

 

# 2 for 6 months  ago, save 1/11/21 in a month

 

find . -mtime +180 -name  "*.sql.gz" |grep -v "1063001.sql.gz"   >> $old_backupfile;

 

 

 

# 3 for a month  ago,save *063001.sq.gz on a day

 

find . -mtime +30 -name  "*.sql.gz" |grep -v "063001.sql.gz"   >> $old_backupfile;

 

 

 

# 4 for 3 days ago,  save 063001.sql.gz  and 183001.sql.gz

 

find . -mtime +3 -name  "*.sql.gz" |grep -v "063001.sql.gz" |grep -v  "183001.sql.gz"  >>  $old_backupfile;                                      

 

 

 

# 5 begin clear

 

find /mnt/resource -mtime +5 -name  "*.sql.gz" -exec rm -rf {}   \;

 

 

 

#6 save the clear  sql.gz to a temp directory

 

for i in `cat $old_backupfile`; do

 

         echo  "-- $i -- is cleared."

 

         mv  $i /mnt/resource/

 

done

 

 

 

d4=`date '+%Y-%m-%d %H:%M:%S'`

 

echo "-- $d4 end... --"  >>  $logfile

 

echo "" >> $logfile

 

PS:本来这里是准备采用find . -mtime +180 -name "*.sql.gz" |grep -v "1063001.sql.gz"-exec  rm -rf {}  \;检索完后直接rm删除掉的,但是由于find后使用grep报错不识别{},所以折衷采用了一个方案,将检索到的文件保存在一个临时文件old_backupfile_$d2.csv里面,然后遍历old_backupfile_$d2.csv文件去mv或者rm操作等,find grep exec报错如下:

[root@db1 ~]# find . -mtime +180 -name  "*.sql.gz" |grep -v "1063001.sql.gz" -exec  rm -rf {}   \;                                      

 

grep: {}: No such file or directory

 

[root@db1 ~]#

 

3,crontab定时任务

使用crontab 建立定时任务,每天进行备份和清理工作,让db服务器自动进行。

[root@db_master_2 ~]# crontab -l

 

20 1 * * * sh  /data/mysql/backup/scripts/clear_old_backup.sh                                       

 

30 */6 * * * sh  /data/mysql/backup/scripts/backup_full.sh

 

[root@db_master_2 ~]#

 

 

4,后续扩展问题

简单的备份做好了,简单的旧备份集合清理也搞定了,但是后续还可以再多做些事情,更加完善一些:

(1)      email通知,备份成功或者失败后,邮件通知

(2)      将备份集合copy一份到文件服务器

(3)      自动检查数据库备份的有效性

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值