程序描述

本程序是一个对percona xtrabackup使用的脚本,它完成了MySQL每周的备份。

程序结构

此程序包含了4个目录(bin、conf、log、var):

  • bin:存放运行备份的主脚本程序(*.sh)。
  • conf:存放着程序运行的配置文件变量(*.conf)。
  • log:存放的是备份时xtrabackup的输出内容(*.log)。
  • var:存放了索引文件(*.index)和错误记录文件(*.err)。
  1. *.index:每当备份成功后都会记录一条信息到此文件中,此文件也是增量备份的一个基础文件,程序会用过此文件判断是增量备份还是全量备份。
  2. *.err:每当备份出错了会记录一条数据到此文件。如果需要对备份成功与否进行监控,可以通过此文件的变化来判断是否备份成(文件无变化就是备份成功了)。

程序流程图

Xtrabackup每周增量备份脚本程序

 


程序流程图

先决条件

确保你的xtrabackup 程序在机器上已经可以正确使用。

注意事项

为了安全请使用root以外的用户来使用本程序,本人专门使用了一个mysql用户来执行mysql相关的操作。

使用方式

  • 执行

 

 
1
2
#你的程序路径
sh

 

  • 备份成功索引文件内容

 

 
1
2
3
# 备份成功 索引文件内容
}
}

 

  • 备份失败错误文件内容

 

 
1
2
3
# 备份失败 索引文件内容
}
}

(提示:其实索引文件的内容格式和错误文件的一样)

程序展示

以下主要展示了程序文件中的内容。附件将会在文章尾部附上

  • 配置文件 mysql_increment_hot_backup.conf

 

 
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
# mysql 用户名
root
 
# mysql 密码
root
 
# 备份路劲
backup
 
# percona-xtrabackup 备份软件路径
xtrabackup
 
# 全备是在一周的第几天
2
 
# 全量备信息名称 前缀
full
 
# 增量备信息名称 前缀
incr
 
# mysql配置文件
cnf
 
# 错误日志文件(更具此文件知道备份是否成功)
# format:
# {week_day:1,dir:full/incr_2015-12-29_00-00-00_7,type:full/incr,date:2015-12-30}
err
 
# 索引文件
# format:
# {week_day:1,dir:full/incr_2015-12-29_00-00-00_7,type:full/incr,date:2015-12-30}
index

 

  • 主程序说明

程序说明这里分4个模块来看(主逻辑、变量初始化、检测文件正确性、使用的其他方法)

  1. 主逻辑

 

 
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
{
# 检测配置文件值
test_conf_file
 
# 判断是执行全备还是曾量备份
get_backup_type
?
in
)
# 全量备份
full_backup
?
then
# 全备成功
# # 打包最新备份
# tar_backup_file $full_backup_prefix
# # 将tar备份发送到远程
# send_backup_to_remote $full_backup_prefix
# 备份索引文件
backup_index_file
# # 发送索引文件到远程
# send_index_file_to_remote
# 清除之前的备份
delete_before_backup
# 清除索引文件
purge_index_from_file
# 添加索引, 索引记录了当前最新的备份
full_backup_prefix
else
# 全备失败
# 删除备份目录
}
# 记录错误日志
full_backup_prefix
fi
;
)
# 增量备份
increment_backup
?
then
# 增量备份成功
# # 打包最新备份
# tar_backup_file $increment_prefix
# # 将tar备份发送到远程
# send_backup_to_remote $increment_prefix
# 添加索引, 索引记录了当前最新的备份
increment_prefix
else
# 增量备份失败
# 删除备份目录
}
# 记录错误日志
increment_prefix
fi
;
esac
}
 
run

2. 变量初始化

 
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
# 获得程序路径名
.
# 读取配置文件中的所有变量值, 设置为全局变量
# 配置文件
# mysql 用户
`
# mysql 密码
`
# mysql 备份目录
`
# percona-xtrabackup 备份软件路径
`
# 全备是在一周的第几天
`
# mysql 全备前缀标识
`
# mysql 增量备前缀标识
`
# mysql 配置文件
`
# 备份错误日志文件
`
# 备份索引文件
`
 
# 备份日期
`
# 备份日期
`
# 备份日期
`
 
# 创建相关目录
log
var
backup_dir
log_dir
var_dir

3. 检测配置文件正确性

4. 使用的其他方法

 
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
# 全量备份
{
}
 
_folder
\
\
\
\
\
1
?
}
 
# 增量备份
{
}
\
\
`
 
_folder
\
\
\
\
\
\
\
1
?
}
 
# 删除之前的备份(一般在全备完成后使用)
{
\
\
bash
  
\
\
bash
}
 
# 备份索引文件
{
)
}
 
# 备份索引文件
{
'send index file ok'
}
 
# 添加索引, 索引记录了当前最新的备份
{
         dir:${1}_${backup_date}_${backup_time}_${backup_week_day}, \
         type:${1}, \
_file
}
 
# 记录 错误消息到文件
{
         dir:${1}_${backup_date}_${backup_time}_${backup_week_day}, \
         type:${1}, \
_log
}
 
# 清空索引
{
_file
}
 
# 清空错误日志信息
{
_log
}
 
# 打包备份
{
}
 
# 发送备份到远程
{
}
  
# 判断是应该全备还是增量备份
# 0:full, 1:incr
{
`
0
then
0
else
1
fi
then
0
fi
_type
}

(提示:其实在程序中的有关将备份成功的文件打包步骤和远程传输步骤还没有实现,有兴趣的可以自行处理。当然,熟练使用xtrabackup的可以直接使用xtrabackup中的--stream 和 --remote-host 参数来进行远程备份。这样貌似自己实现将备份传输到远端有点多余。 :) )

 

xtrabackup_cron

相关文章:

  • 2021-10-22
  • 2022-03-11
  • 2021-09-14
  • 2021-11-04
  • 2021-09-18
  • 2022-02-22
  • 2021-12-08
  • 2021-11-27
猜你喜欢
  • 2021-09-02
  • 2022-01-02
  • 2022-12-23
  • 2022-12-23
  • 2021-06-26
  • 2021-09-27
  • 2022-12-23
相关资源
相似解决方案