mysqldump全量和增量备份脚本

写好了xtrabackup的备份脚本才发现线上数据库是5.1的,既然这样那就只有用mysqldump来备份了。不过好在mysqldump更简单,只需要简单的一两条命令即可,增量备份使用复制binlog的方式来实现,后期恢复直接跑二进制日志即可。

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
#!/bin/bash
# mysqldump 全量和增量备份
# ch
# 2016-09-01
# 基础环境变量设置
USER=root
PASSWD=123456
HOST=localhost
LOG_DIR=/home/backup/backup.log
BIN_DIR=/home/mysql_data
BIN_FILE=$BIN_DIR/master1_bin.index
DATE=`date +%Y%m%d`
DUMPFILE="$DATE".sql
GZDUMPFILE="$DATE".sql.tgz
# 检查环境是否配置正确
check(){
if [[ ! "mysql -h"$HOST" -u"$USER" -p"$PASSWD" -e 'show databases;'" ]];then
echo "$DATE,客户端连接错误,备份失败" >> $LOG_DIR
exit 2
fi
if [ ! -d $BIN_DIR ];then
echo "BIN_DIR路径错误,请检查后重试" >> $LOG_DIR
exit 3
fi
if [ ! -f $BIN_FILE ];then
echo "BIN_FILE路径错误,请检查后重试" >> $LOG_DIR
exit 4
fi
}
# 全量备份
full(){
BACK_DIR=/home/backup/full
if [ ! -d $BACK_DIR ];then
mkdir -p $BACK_DIR
fi
BEGIN=`date +"%Y年%m月%d日 %H:%M:%S"`
cd $BACK_DIR
mysqldump -h"$HOST" -u"$USER" -p"$PASSWD" -A -E -R --triggers --master-data=2 -l --flush-logs > $DUMPFILE || echo "备份出错" >> $LOG_DIR
tar czvf $GZDUMPFILE $DUMPFILE &> /dev/null && rm -rf $DUMPFILE
LAST=`date +"%Y年%m月%d日 %H:%M:%S"`
POSITION=$(mysql -h"$HOST" -u"$USER" -p"$PASSWD" -e 'show master status\G' | grep Position | awk -F: '{print $2}')
BINFILE=$(mysql -h"$HOST" -u"$USER" -p"$PASSWD" -e 'show master status\G' | grep File | awk -F: '{print $2}')
echo "全量备份开始: $BEGIN" >> $LOG_DIR
echo "全量备份结束: $LAST $GZDUMPFILE $BINFILE $POSITION" Bakup succ! >> $LOG_DIR
}
# 增量备份
inc()
{
BACK_DIR=/home/backup/inc
if [ ! -d $BACK_DIR ];then
mkdir -p $BACK_DIR
fi
mysqladmin -u$USER -p$PASSWD flush-logs
COUNTER=`wc -l $BIN_FILE | awk '{print$1}'`
NEXTNUM=0
BEGIN=`date +"%Y年%m月%d日 %H:%M:%S"`
echo "增量备份开始: $BEGIN" >> $LOG_DIR
for file in `cat $BIN_FILE`
do
base=`basename $file`
NETXNUM=`expr $NEXTNUM+1`
if [ $NEXTNUM -eq $COUNTER ]
then
echo $base skip! >> $LOG_DIR
else
dest=$BACK_DIR/$base
if (test -e $dest)
then
echo $base exits! >> $LOG_DIR
else
cp $BIN_DIR/$base $BACK_DIR
echo $base copying! >> $LOG_DIR
fi
fi
done
LAST=`date +"%Y年%m月%d日 %H:%M:%S"`
echo "增量备份结束: $LAST" $Next $BACK_DIR Bakup succ! >> $LOG_DIR
}
case $1 in
full)
check
full
;;
inc)
check
inc
;;
*)
cat << EOF
+----------------+
+ Use: +
+ full 全量备份 +
+ inc 增量备份 +
+----------------+
EOF
;;
esac

本文标题:mysqldump全量和增量备份脚本

文章作者:火柴

发布时间:2016年09月01日 - 14:09

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

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

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

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