MySQL 5.7.10 自动备份、自动清理旧备份集(转)

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="[email protected]"  -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=" [email protected] "  -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报错如下:


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

grep: {}: No such file or directory

[[email protected] ~]#

3,crontab定时任务

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


[[email protected]_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

[[email protected]_master_2 ~]#

4,后续扩展问题

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

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

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

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

时间: 2024-11-05 22:03:41

MySQL 5.7.10 自动备份、自动清理旧备份集(转)的相关文章

MySQL 5.7.10 自动备份、自动清理旧备份集

http://blog.csdn.net/mchdba/article/details/51527081 MySQL版本是5.7.10-log社区版本,需要进行备份,但是备份时间长了后,磁盘不够用,所以需要对指定旧的备份集合进行清理工作. 1,mysqldump备份脚本 备份脚本为,里面有几个需要注意的参数: (1)--master-data=2 :这个参数可以在搭建从库的时候,记录当前备份的复制点信息. (2)--extended-insert=false:这个在形成sql语句的时候,一条记录

backup(full,diff,log)备份并清理过时备份

需求说明:每天备份数据库,但是备份文件长期积累不删除,极大的浪费磁盘空间, 针对该情况做了2个sp来解决 备份sp: dbo.dba_db_backup 可以做全备,差备,日志备 备份的目录格式 YYYYMMDD_FULL/DF/LOG /* editor:Lynn function desc: backup full/diff database backup log backupdir @bakpath\YYYYMMDD_FULL/DF/LOG exec demo: EXEC DBO.dba_

Oracle利用exp自动备份及删除旧备份

介于本人能力有限 此方法仅适用于数据量比较小的 数据量巨大的另寻他法 步骤一:编写bat批处理文件 echo 正在删除7天前的备分文件和日志... forfiles /p "D:\Backup\OracleAutoBackup" /m zywl_*.dmp /d -7 /c "cmd /c del @path" forfiles /p "D:\Backup\OracleAutoBackup" /m zywl_*.log /d -7 /c &quo

如何使用windows自动任务实现oracle数据备份及清理

很多时候,我们需要通过客户机进行oracle的备份,这里我们通过使用windows的自动任务来实现oracle的自动备份及备份的清理 自动任务的使用略 1.建立自动备份脚本 @echo off @echo ================================================ @echo  windows环境下Oracle数据库的自动备份脚本 @echo  说明:启动备份时,需要配置以下变量 @echo    1.BACKUP_DIR           指定要备份到哪

innobackupex自动备份脚本(增量备份,自动压缩)

#!/bin/bash #日期转为天数 function date2days { echo "$*" | awk '{ z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3; j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633; print j }' } #说明:脚本执行策略为每天执行一次,执行前需要先建立config文件,并在config文件 #中添加 #backup_

监测mysql错误日志,有错误自动邮件报警

监测mysql错误日志,有错误自动邮件报警 http://blog.csdn.net/yabingshi_tech/article/details/51443401 MySQL:监控慢日志.错误日志.备份数据库的脚本 http://blog.csdn.net/u013820054/article/details/51887256

linux自动代码增量备份 结合 全量备份

需求说明 系统环境:linux(centos7)备份内容:增量备份 结合 全量备份 公司中的生产服务器数据非常重要,所以我们需要通过备份服务器将生产服务器的数据进行备份. rsync的增量备份,不单单会同步新增的内容,就连删除的内容也会同步.假如管理代码人员误操作将代码误删除,那么备份服务器检测到备份原的数据产生变化后,也会与其同步,此时生产服务器与备份服务器的代码都会丢失. 增量备份要求的频率较高,但在生产与备份服务器之间的网络资源消耗较少,所以我们可以使用rsync来做增量备份,然后结合在备

SQL SERVER 2008 R2 自动备份并删除过期备份数据

    我们的系统维护的过程中肯定需要对数据库进行定期的备份,但是如果定时手工备份的话,不但浪费时间,也不能保证每次都可以按时备份,所以自动备份成为了我们的不二选择,但是定时备份需要定期清理备份文件,不然会因为磁盘空间不足导致备份失败,失去备份的准确性,下面我们就一步步来看一下如果自动备份并删除过期备份数据. 1.打开SQL SERVER 2008 R2,连上数据库,右键选择[管理]-[维护计划]-[维护计划向导]. 2. 在名称中为维护计划取一个通俗易懂的名字,例如"EveryDayBak&q

Mysql 存储过程+定时任务,完成分区自动维护

建表: drop table if exists terminal_parameter; CREATE TABLE `terminal_parameter` ( `terminal_parameter_id` int(11) NOT NULL AUTO_INCREMENT, .................... `createtime` datetime NOT NULL, `userid` int(8) NOT NULL, `terminal_id` int(8) DEFAULT NULL