公司用到MySQL的数据库,经常有同事通过一顿骚操作把一些关键的配置数据误删,每次恢复都要花上不少时间,于是写了个壳脚本,结合corntab每天凌晨备份数据库,并保留7天。
同样的备份脚本也可用于生产环境MySQL数据库定时备份。
环境:CentOS 7.5/MySQL 5.7
# !/bin/sh #数据库账号信息 DB_USER="根" DB_PWD="根" DB_HOST=" 127.0.0.1 " DB_PORT=" 3306 " # MYSQL所在目录 MYSQL_DIR=?home/mysql” #备份文件存放目录 BAK_DIR=?home/db_backup” #时间格式化,如20200902 日期='日期+ % Y % m % d ' #备份脚本保存的天数 DEL_DAY=7 #要备份的数据库,空格分隔 数据库=(“apolloconfigdb”“apolloportaldb”“apolloconfigdb-uat”“frame-assistor”“frame-authorization”) #创建日期目录 mkdir BAK_DIR/美元日期 回声”- - - - - - - - - - - - - - - - - - -(日期+ % f % T)美元开始- - - - - - - - - - - - - - - - - -“在祝辞$ {BAK_DIR}/db_backup.log 数据库的" ${数据库[@]}" 做 #执行备份命令 MYSQL_DIR/bin/美元,mysqldump -选择- u DB_USER - p DB_PWD美元- h DB_HOST - p DB_PORT美元${}数据库比;数据库BAK_DIR/日期/美元$ {}. sql 完成 回声”——创建备份文件:$ BAK_DIR/db_backup_ DATE.tar美元。广州”,祝辞的在$ {BAK_DIR}/db_backup.log #将备份好的sql脚本压缩到db_backup_yyyyMMdd.tar.gz 焦油-czf BAK_DIR/db_backup_ DATE.tar美元。广州BAK_DIR/美元日期 #压缩后,删除压缩前的备份文件和目录 rm - f BAK_DIR/日期/美元* 删除目录BAK_DIR/美元日期 #遍历备份目录下的压缩文件=$列表(ls $ {BAK_DIR}/db_backup_ *) #获取截止时间,早于该时间的文件将删除 秒=$(日期- d " $(日期+ % F) - $ {DEL_DAY}天”+ % s) 指数在${}列表 做 #对文件名进行格式化,取命名末尾的时间,格式如20200902 timeString=$ (echo ${指数}| egrep - o”& # 63; [0 - 9] [0 - 9] [0 - 9] [0 - 9] [0 - 9] [0 - 9] [0 - 9] [0 - 9]”) 如果(- n“timeString美元”) 然后 indexDate=$ {timeString///-}。 indexSecond=$(日期- d $ {indexDate} + % s) #与当天的时间做对比,把早于7天的备份文件删除 如果[$((秒- indexSecond美元))gt 0] 然后 rm - f美元指数 回声”- - - - -删除旧的备份文件:$指数”在祝辞$ {BAK_DIR}/db_backup.log fi fi 完成 回声”- - - - - - - - - - - - - - - - - - -美元(日期+ % f % T) - - - - - - - - - - - - - - - - - -”祝辞的在$ {BAK_DIR}/db_backup.log
保存成backupDB。sh脚本后,执行脚本验证一下。查看BAK_DIR备份目录下的db_backup.log可以看到备份的执行情况。
- - - - - - - - - - - - - - - - - - 2020 - 09 - 02 _21:33:01开始- - - - - - - - - - - - - - - - - -
引用>
——创建备份文件:/home/db_backup/db_backup_20200902.tar。广州
- - - - - - - - - - - - - - - - - - 2020 - 09 - 02 _21:33:18结束- - - - - - - - - - - - - - - - - -
验证没问题后,通过crontab - e配置成定时任务执行,要注意的是,,mysqldump备份执行时是会锁表的,建议在凌晨没什么人操作数据库的时候执行备份操作。
#每天凌晨3点执行 3 * * * sh/home/backupDB. 0上海比;2/dev/null祝辞,1, >之前注意:
如果不希望备份时锁表,可以在,mysqldump命令中添加参数——skip-lock-tables;
上述脚本中指定了要备份的数据库,如果想备份所有数据库,则无需指定数据库,在mysqldump命令中添加参数,所有数据库即可。
到此这篇关于shell脚本定时备份MySQL数据库数据并保留指定时间的文章就介绍到这了,更多相关壳定时备份MySQL内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
shell脚本定时备份MySQL数据库数据并保留指定时间