mysql使用xtrabackup的全量和增量脚本

需要一个MySQL的自动备份脚本,于是google了一下,发现不是自己看不懂就是运行有问题。那么迫于无赖,不能偷懒了,只能写一个比较适合自己的脚本。脚本较烂,还望轻喷。

上正题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/bin/bash
# MySQL全量和增量备份
# ch
# www.chen-hao.com.cn
# 2016-8-29
# 初始变量配置
Innobackupex_Path=/usr/bin/innobackupex #innobackupex软件文件
Mysql_Client=/usr/bin/mysql #mysql客户端
Mysql_Conf=/etc/my.cnf #mysql配置文件
MYSQL_OPS='--host=localhost --user=root --password=123456' #mysql的连接配置,按需修改
BACKUP_FULL=/home/backup/mysql/full #全量备份目录
BACKUP_INC=/home/backup/mysql/inc #增量备份目录
LOG_DIR=/home/backup/mysql/backup.log #日志文件路径
COMPLETE=$(tail -1 $LOG_DIR | cut -d\' -f2) #临时截取上一个增量备份的信息
DATE=`date +%Y%m%d_%H%M%S`
XINQI=`date +%w` #此项主要结合增量恢复脚本使用
#环境和配置检查
check()
{
#检查目录和创建目录
if [[ ! -d $BACKUP_FULL ]];then
mkdir -p $BACKUP_FULL
fi
if [[ ! -d $BACKUP_INC ]];then
mkdir -p $BACKUP_INC
fi
#安装软件2.4,需要其他版本请自行官网下载
if [[ ! `rpm -q percona-xtrabackup-24-2.4.4-1.el6.x86_64` ]];then
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm &> /dev/null
yum -y install percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm &> /dev/null
fi
if [[ ! -f $Mysql_Client ]];then
Error "未安装mysql客户端"
fi
if [[ ! -f $Mysql_Conf ]];then
Error "mysql配置文件路径不正确"
fi
#检查mysql的运行状态
if [[ `netstat -tlnp |grep mysqld |wc -l` = 0 ]];then
Error "MySQL没有运行"
fi
#验证mysql的用户和密码是否正确
if ! `echo 'exit' | $Mysql_Client -s $MYSQL_OPS >/dev/null 2>&1` ; then
Error "提供的数据库连接配置不正确!"
fi
}
# 全量备份
full()
{
$Innobackupex_Path $MYSQL_OPS $BACKUP_FULL &> /tmp/"$DATE".txt
echo "星期$XINQI" >> $LOG_DIR
grep "Backup created in directory" /tmp/"$DATE".txt >> $LOG_DIR
rm -rf /tmp/"$DATE".txt
}
# 增量备份
# 注意,此增量会根据 $LOG_DIR 文件中的最后一次的文件来做增量
inc()
{
if [[ ! -s $LOG_DIR ]];then
full
exit 0
fi
$Innobackupex_Path $MYSQL_OPS --incremental "$BACKUP_INC" --incremental-basedir=$COMPLETE &> /tmp/"$DATE".txt
echo "星期$XINQI" >> $LOG_DIR
grep "Backup created in directory" /tmp/"$DATE".txt >> $LOG_DIR
rm -rf /tmp/"$DATE".txt
}
# 删除一月前的全备和増备
del()
{
for old_file in $(find $BACKUP_FULL $BACKUP_INC -mtime +30)
do
rm -rf "${old_file}"
done
}
case $1 in
full)
check
del
full
;;
inc)
check
del
inc
;;
*)
cat << EOF
+----------------+
+ Use: +
+ full 全量恢复 +
+ inc 增量恢复 +
+----------------+
EOF
;;
esac

本文标题:mysql使用xtrabackup的全量和增量脚本

文章作者:火柴

发布时间:2016年08月30日 - 13:08

最后更新:2017年08月10日 - 19:08

原始链接:http://www.chen-hao.com.cn/posts/36339/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

火柴 wechat
扫描上方二维码关注我的博客!
0%