innobackupex 单脚本循环7天一全备6增备脚本更新
#!/bin/bash #日期转为天数
function date2days {
echo "$*" | awk '{
z=int((-$)/); y=$+-z; m=$+*z-;
j=int((*m+)/)+$+y*+int(y/)-int(y/)+int(y/)-;
print j
}'
} #说明:脚本执行策略为每天执行一次,执行前需要先建立config文件,并在config文件
#中添加
#backup_full=
#backup_pre_name=
#即可,注意路径。
#备份策略,每七天一个循环,第一天为全备份,第二天至第六天为增量备份。
#后续会增加已备份文件压缩转移定期删除部分 #######################
db_user="xtrabackup"
db_passwd="mysQlbackup"
db_defaults_file="/home/backup/config/3306.cnf"
db_socket="/var/lib/mysql/mysql_3306.sock"
db_backup="/home/backup/"
db_backup_fulldir="/home/backup/full/"
db_backup_incrementaldir="/home/backup/incremental/"
db_backup_gzfull="/home/backup/gzip/"
db_backup_tarfull="/home/backup/tar.gzdb/"
rm_num= #用于压缩并转移源文件
move_and_tar (){
if [ $# != ]; then
echo "参数不正确"
exit
fi time_rm=`date -d "$1 days ago" +"back_%d-%m-%Y"` if [ $ -eq ]; then
if [ -d ${db_backup_fulldir}${time_rm} ]; then
su - root -c "tar -czPvf ${db_backup_tarfull}${time_rm}_full.tar.gz ${db_backup_fulldir}${time_rm}"
su - root -c "rm -rf ${db_backup_fulldir}${time_rm}"
echo "压缩目录rm $db_backup_fulldir${time_rm}" >>/home/backup/config/tar.log
fi
fi if [ $ -gt -a $ -lt ]; then
if [ -d $db_backup_incrementaldir${time_rm} ]; then
su - root -c "tar -czPvf ${db_backup_tarfull}${time_rm}_increment.tar.gz ${db_backup_incrementaldir}${time_rm}"
su - root -c "rm -rf ${db_backup_incrementaldir}${time_rm}"
echo "压缩目录rm $db_backup_incrementaldir${time_rm}" >>/home/backup/config/tar.log
fi
fi
} #得到当前时间和配置文件
time="$(date +"back_%d-%m-%Y")"
source /home/backup/config/config #计算今天到上次全备份相隔天数
_Day=$(date2days `echo ${backup_full::}|awk 'BEGIN{FS="-"}{print $3,$2,$1}'`)
Day=$(date2days `date +"%Y %m %d"`)
echo $_Day
echo $Day
let result=$Day-$_Day
echo "相差$result天" if [ -z ${backup_full} ] || [ $result -ge ] ; then
#todo
echo '全备份'
backup_full=${time}
innobackupex --defaults-file=$db_defaults_file --no-timestamp --user=${db_user} --password=${db_passwd} --socket=$db_socket ${db_backup_fulldir}${backup_full}/ if [ $? -eq ]; then
echo "${time} 备份成功!!!" >> /home/backup/config/results.log
else
echo "${time} 备份失败???" >> /home/backup/config/results.log
fi #更新配置文件
echo "backup_full=${backup_full}" >/home/backup/config/config
echo "backup_pre_name=full/${backup_full}" >>/home/backup/config/config #自动删除两周以前的备份文件
while [ ${rm_num} -lt -a ${rm_num} -gt ]
do
move_and_tar ${rm_num}
rm_num=`expr ${rm_num} - `
done echo '全备份'
else
#todo
echo '增量备份' innobackupex --defaults-file=$db_defaults_file --socket=$db_socket --no-timestamp --user=${db_user} --password=${db_passwd} --incremental ${db_backup_incrementaldir}${time}/ --incremental-basedir=${db_backup}${backup_pre_name} if [ $? -eq ]; then
echo "${time} 增量备份成功!!!" >> /home/backup/config/results.log
else
echo "${time} 增量备份失败???" >> /home/backup/config/results.log
fi #更新配置文件
echo "backup_full=${backup_full}" >/home/backup/config/config
echo "backup_pre_name=incremental/${time}" >>/home/backup/config/config
echo '增量备份'
fi
脚本目录详细说明
备份主目录 /home/backup :
config(文件夹) full(文件夹) incremental(文件夹) mysql_back.sh(脚本) tar.gzdb(压缩后的备份)
config文件夹目录下:
3306.cnf(从/etc/my.cnf复制过来的配置文件) config(用于脚本读取判断全备还是增备日期) results.log(结果日志) tar.log(压缩日志)
config文件内容如下:
backup_full=back_24-03-2016
backup_pre_name=incremental/back_27-03-2016
第一次使用配置为
backup_full=
backup_pre_name=
即可
以上目录可以根据自己需要修改,脚本日志没有记录,一般我去/var/spool/mail/root 查看
tar.gz文件夹具体备份截图:
innobackupex 单脚本循环7天一全备6增备脚本更新的更多相关文章
- innobackupex 全备、增备脚本
全备脚本:innobackupex --defaults-file=/etc/my.cnf --user root --password mypasswd /mydata/fullbak/ 增备脚本: ...
- Innobackupex MySQL 全备、增备及恢复
简介: 在这之前都是通过 mysqldump 来备份数据库的,由于是逻辑备份,所以采用这种备份方式数据是很安全的,跨平台.版本都很容易. 凡事有利必有弊,逻辑备份在你数据库比较大时,备份.恢复数据所耗 ...
- shell脚本-循环选择语句
shell脚本-循环选择语句 过程式编程语言: 顺序执行 选择执行 循环执行 注:条件中的变量,可以在执行语句中使用,不用在加上"$". if语句 根据命令的退出状态来执行命令 单 ...
- shell脚本循环和信号
条件判断 if 条件1:then COMMAND elif 条件2:then COMMAND else COMMAND(:) : 表示pass 不执行任何命令 fi 读取用 ...
- 微信小程序自定义音频组件,自定义滚动条,单曲循环,循环播放
小程序自定义音频组件,带滚动条 摘要:首先自定义音频组件,是因为产品有这样的需求,需要如下样式的 而微信小程序API给我们提供的就是这样的 而且产品需要小程序有后台播放功能,所以我们不考虑小程序的 a ...
- centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课
centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 ...
- Shell 循环中实现展示进度百分比的脚本方法
Shell 循环中实现展示进度百分比的脚本方法 当我需要处理一个几万行的文件的时候,需要处理的时间是比较长的.我一开始的想法是,没处理一行,就输出一个 # 号.但是这样还是会出现很多很多的 # 号,即 ...
- LinuxShell脚本——循环结构
LinuxShell脚本——循环结构 摘要:本文主要学习了Shell脚本中的循环结构. while循环 基本语法 while循环是最简单的一种循环,如果条件满足则执行循环里的语句,如果条件不满足则退出 ...
- 没事就要多做多练,Shell脚本循环例题做一做
Shell脚本循环例题 一.示例1 二.示例2 三.示例3 四.示例4 ...
随机推荐
- MCC(移动国家码)和 MNC(移动网络码)
国际移动用户识别码(IMSI) international mobile subscriber identity 国际上为唯一识别一个移动用户所分配的号码. 从技术上讲,IMSI可以彻底解决国 ...
- ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引
ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引 因为表KOL_XX_FIN050_TEMP 为临时表,而且有其他session正在使用. 处理步骤: 1.先从 dba ...
- Hibernate一对多和多对一关系详解 (转载)
:双向一对多关系,一是关系维护端(owner side),多是关系被维护端(inverse side).在关系被维护端需要通过@JoinColumn建立外键列指向关系维护端的主键列. publ ...
- 宏ut_2pow_remainder
求余数 12%8=4 n%m也能计算出余数,但效率可能比位操作要低一些 /*************************************************************// ...
- .NET下文本相似度算法余弦定理和SimHash浅析及应用
余弦相似性 原理:首先我们先把两段文本分词,列出来所有单词,其次我们计算每个词语的词频,最后把词语转换为向量,这样我们就只需要计算两个向量的相似程度. 我们简单表述如下 文本1:我/爱/北京/ ...
- shell 全局和局部变量
/******************************************************************** * shell 全局和局部变量 * 声明: * 到目前为止, ...
- @Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别 .(转)
mvc renderaction renderpartial 杂谈 Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. ...
- 关于 mkimage
在嵌入式系统中,Linux内核和根文件系统一般都与bootloader一起烧写在flash芯片中,系统启动后,bootloader将Linux内核压缩到RAM中,并把压缩的根文件系统复制到RAM中,然 ...
- HDU 4825-Xor Sum(trie)
题意: 给你一组数,开始询问给一个数 求组中与该数异或值最大的数. 分析:根据异或的特点 要想得到的异或值最大 尽可能的让两个数的每位都相反 先把给定的一组数建树,数的最后一位对应的节点保存这个数的 ...
- POJ 3177 Redundant Paths 边双(重边)缩点
分析:边双缩点后,消环变树,然后答案就是所有叶子结点(即度为1的点)相连,为(sum+1)/2; 注:此题有坑,踩踩更健康,普通边双缩短默认没有无向图没有重边,但是这道题是有的 我们看,low数组是我 ...