shell脚本定时备份MySQL数据库数据并保留指定时间
公司用到的MySQL数据库,经常有同事通过一顿骚操作把一些关键的配置数据误删,每次恢复都要花上不少时间,于是写了个shell脚本,结合corntab每天凌晨备份数据库,并保留7天。
同样的备份脚本也可用于生产环境MySQL数据库定时备份。
环境:CentOS7.5/MySQL5.7
#!/bin/sh #数据库账号信息 DB_USER="root" DB_PWD="root" DB_HOST="127.0.0.1" DB_PORT="3306" #MYSQL所在目录 MYSQL_DIR="/home/mysql" #备份文件存放目录 BAK_DIR="/home/db_backup" #时间格式化,如20200902 DATE=`date+%Y%m%d` #备份脚本保存的天数 DEL_DAY=7 #要备份的数据库,空格分隔 DATABASES=("apolloconfigdb""apolloportaldb""apolloconfigdb-uat""frame-assistor""frame-authorization") #创建日期目录 mkdir$BAK_DIR/$DATE echo"-------------------$(date+%F_%T)start---------------">>${BAK_DIR}/db_backup.log fordatabasein"${DATABASES[@]}" do #执行备份命令 $MYSQL_DIR/bin/mysqldump--opt-u$DB_USER-p$DB_PWD-h$DB_HOST-P$DB_PORT${database}>$BAK_DIR/$DATE/${database}.sql done echo"---backupfilecreated:$BAK_DIR/db_backup_$DATE.tar.gz">>${BAK_DIR}/db_backup.log #将备份好的sql脚本压缩到db_backup_yyyyMMdd.tar.gz tar-czf$BAK_DIR/db_backup_$DATE.tar.gz$BAK_DIR/$DATE #压缩后,删除压缩前的备份文件和目录 rm-f$BAK_DIR/$DATE/* rmdir$BAK_DIR/$DATE #遍历备份目录下的压缩文件 LIST=$(ls${BAK_DIR}/db_backup_*) #获取截止时间,早于该时间的文件将删除 SECONDS=$(date-d"$(date+%F)-${DEL_DAY}days"+%s) forindexin${LIST} do #对文件名进行格式化,取命名末尾的时间,格式如20200902 timeString=$(echo${index}|egrep-o"?[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]") if[-n"$timeString"] then indexDate=${timeString//./-} indexSecond=$(date-d${indexDate}+%s) #与当天的时间做对比,把早于7天的备份文件删除 if[$(($SECONDS-$indexSecond))-gt0] then rm-f$index echo"----deletedoldbackupfile:$index">>${BAK_DIR}/db_backup.log fi fi done echo"-------------------$(date+%F_%T)end---------------">>${BAK_DIR}/db_backup.log
保存成backupDB.sh脚本后,执行脚本验证一下。查看BAK_DIR备份目录下的db_backup.log可以看到备份的执行情况。
-------------------2020-09-02_21:33:01start---------------
---backupfilecreated:/home/db_backup/db_backup_20200902.tar.gz
-------------------2020-09-02_21:33:18end---------------
验证没问题后,通过crontab-e配置成定时任务执行,要注意的是,mysqldump备份执行时是会锁表的,建议在凌晨没什么人操作数据库的时候执行备份操作。
#每天凌晨3点执行 03***sh/home/backupDB.sh>/dev/null2>&1&
注意:
如果不希望备份时锁表,可以在mysqldump命令中添加参数--skip-lock-tables;
上述脚本中指定了要备份的数据库,如果想备份所有数据库,则无需指定数据库,在mysqldump命令中添加参数--all-databases即可。
到此这篇关于shell脚本定时备份MySQL数据库数据并保留指定时间的文章就介绍到这了,更多相关shell定时备份MySQL内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。