Xtrabackup每周增量备份脚本程序

Xtrabackup每周增量备份脚本程序(含附件)

程序描述

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

程序结构

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

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

程序流程图

程序流程图

先决条件

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

注意事项

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

使用方式

  • 执行

1

2

#你的程序路径

/bin/bash /tmp/xtrabackup_cron/bin/mysql_increment_hot_backup.sh

  • 备份成功索引文件内容

1

2

3

# 备份成功 索引文件内容

{week_day:3,          dir:full_2015-12-30_21-45-53_3,          type:full,          date:2015-12-30}

{week_day:3,          dir:incr_2015-12-30_22-09-23_3,          type:incr,          date:2015-12-30}

  • 备份失败错误文件内容

1

2

3

# 备份失败 索引文件内容

{week_day:3,          dir:full_2015-12-30_21-45-53_3,          type:full,          date:2015-12-30}

{week_day:3,          dir:incr_2015-12-30_22-09-23_3,          type:incr,          date:2015-12-30}

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

程序展示

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

  • 配置文件 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 用户名

user=root

# mysql 密码

password=root

# 备份路劲

backup_dir=/tmp/backup

# percona-xtrabackup 备份软件路径

xtrabackup_dir=/usr/local/percona-xtrabackup

# 全备是在一周的第几天

full_backup_week_day=2

# 全量备信息名称 前缀

full_backup_prefix=full

# 增量备信息名称 前缀

increment_prefix=incr

# mysql配置文件

mysql_conf_file=/etc/my.cnf

# 错误日志文件(更具此文件知道备份是否成功)

# format:

# {week_day:1,dir:full/incr_2015-12-29_00-00-00_7,type:full/incr,date:2015-12-30}

error_log=mysql_increment_hot_backup.err

# 索引文件

# format:

# {week_day:1,dir:full/incr_2015-12-29_00-00-00_7,type:full/incr,date:2015-12-30}

index_file=mysql_increment_hot_backup.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

function run() {

# 检测配置文件值

test_conf_file

# 判断是执行全备还是曾量备份

get_backup_type

backup_type=$?

case $backup_type in

0 )

# 全量备份

full_backup

backup_ok=$?

if [ 0 -eq "$backup_ok" ]; 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

# 添加索引, 索引记录了当前最新的备份

append_index_to_file $full_backup_prefix

else

# 全备失败

# 删除备份目录

rm -rf ${backup_dir}/${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}

# 记录错误日志

logging_backup_err $full_backup_prefix

fi

;;

1 )

# 增量备份

increment_backup

backup_ok=$?

if [ 0 -eq "$backup_ok" ]; then

# 增量备份成功

# # 打包最新备份

# tar_backup_file $increment_prefix

# # 将tar备份发送到远程

# send_backup_to_remote $increment_prefix

# 添加索引, 索引记录了当前最新的备份

append_index_to_file $increment_prefix

else

# 增量备份失败

# 删除备份目录

rm -rf ${backup_dir}/${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}

# 记录错误日志

logging_backup_err $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

# 获得程序路径名

program_dir=`dirname $0`/..

# 读取配置文件中的所有变量值, 设置为全局变量

# 配置文件

conf_file="$program_dir/conf/mysql_increment_hot_backup.conf"

# mysql 用户

user=`sed ‘/^user=/!d;s/.*=//‘ $conf_file`

# mysql 密码

password=`sed ‘/^password=/!d;s/.*=//‘ $conf_file`

# mysql 备份目录

backup_dir=`sed ‘/^backup_dir=/!d;s/.*=//‘ $conf_file`

# percona-xtrabackup 备份软件路径

xtrabackup_dir=`sed ‘/^xtrabackup_dir=/!d;s/.*=//‘ $conf_file`

# 全备是在一周的第几天

full_backup_week_day=`sed ‘/^full_backup_week_day=/!d;s/.*=//‘ $conf_file`

# mysql 全备前缀标识

full_backup_prefix=`sed ‘/^full_backup_prefix=/!d;s/.*=//‘ $conf_file`

# mysql 增量备前缀标识

increment_prefix=`sed ‘/^increment_prefix=/!d;s/.*=//‘ $conf_file`

# mysql 配置文件

mysql_conf_file=`sed ‘/^mysql_conf_file=/!d;s/.*=//‘ $conf_file`

# 备份错误日志文件

error_log=$program_dir/var/`sed ‘/^error_log=/!d;s/.*=//‘ $conf_file`

# 备份索引文件

index_file=$program_dir/var/`sed ‘/^index_file=/!d;s/.*=//‘ $conf_file`

# 备份日期

backup_date=`date +%F`

# 备份日期

backup_time=`date +%H-%M-%S`

# 备份日期

backup_week_day=`date +%u`

# 创建相关目录

log_dir=$program_dir/log

var_dir=$program_dir/var

mkdir -p $backup_dir

mkdir -p $log_dir

mkdir -p $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

# 全量备份

function full_backup() {

backup_folder=${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}

mkdir -p $backup_dir/$backup_folder

$xtrabackup_dir/bin/innobackupex \

--defaults-file=$mysql_conf_file \

--user=$user \

--password=$password \

--no-timestamp \

$backup_dir/$backup_folder > $log_dir/${backup_folder}.log 2>&1

return $?

}

# 增量备份

function increment_backup() {

backup_folder=${increment_prefix}_${backup_date}_${backup_time}_${backup_week_day}

incr_base_folder=`sed -n ‘$p‘ $index_file | \

awk -F ‘[, {}]*‘ ‘{print $3}‘ | \

awk -F ‘:‘ ‘{print $2}‘`

mkdir -p $backup_dir/$backup_folder

$xtrabackup_dir/bin/innobackupex \

--defaults-file=$mysql_conf_file \

--user=$user \

--password=$password \

--no-timestamp \

--incremental \

$backup_dir/$backup_folder \

--incremental-basedir=$backup_dir/$incr_base_folder > $log_dir/${backup_folder}.log 2>&1

return $?

}

# 删除之前的备份(一般在全备完成后使用)

function delete_before_backup() {

cat $index_file | awk -F ‘[, {}]*‘ ‘{print $3}‘ | \

awk -v backup_dir=$backup_dir -F ‘:‘ ‘{if($2!=""){printf("rm -rf %s/%s\n", backup_dir, $2)}}‘ | \

/bin/bash

cat $index_file | awk -F ‘[, {}]*‘ ‘{print $3}‘ | \

awk -v log_dir=$log_dir -F ‘:‘ ‘{if($2!=""){printf("rm -rf %s/%s.log\n", log_dir, $2)}}‘ | \

/bin/bash

}

# 备份索引文件

function backup_index_file() {

cp $index_file ${index_file}_$(date -d "1 day ago" +%F)

}

# 备份索引文件

function send_index_file_to_remote() {

echo ‘send index file ok‘

}

# 添加索引, 索引记录了当前最新的备份

function append_index_to_file() {

echo "{week_day:$backup_week_day, \

dir:${1}_${backup_date}_${backup_time}_${backup_week_day}, \

type:${1}, \

date:${backup_date}}" >> $index_file

}

# 记录 错误消息到文件

function logging_backup_err() {

echo "{week_day:$backup_week_day, \

dir:${1}_${backup_date}_${backup_time}_${backup_week_day}, \

type:${1}, \

date:${backup_date}}" >> $error_log

}

# 清空索引

function purge_index_from_file() {

> $index_file

}

# 清空错误日志信息

function purge_err_log() {

> $error_log

}

# 打包备份

function tar_backup_file() {

echo "tar $1 ok"

}

# 发送备份到远程

function send_backup_to_remote() {

echo "send $1 remote ok"

}

# 判断是应该全备还是增量备份

# 0:full, 1:incr

function get_backup_type() {

full_backup_week_day=`sed ‘/^full_backup_week_day=/!d;s/.*=//‘ $conf_file`

backup_type=0

if [ "$full_backup_week_day" -eq `date +%u` ]; then

backup_type=0

else

backup_type=1

fi

if [ ! -n "`cat $index_file`" ]; then

backup_type=0

fi

return $backup_type

}

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

xtrabackup_cron

时间: 2024-10-12 21:36:28

Xtrabackup每周增量备份脚本程序的相关文章

Xtrabackup全量备份/增量备份脚本

一.全量备份脚本 1.全量备份脚本 #!/bin/bash #Description:xtrabackup complete #Author:created by michael #2017-08-07 v0.1 # USER=root PASSWD=123456 BACKUP_DIR=/backup/mysql/complete DATE=$(date +"%F_%T") [[ -d $BACKUP_DIR ]] || mkdir $DATE_DIR innobackupex --u

xtrabackup一键自动化备份脚本 【原创】

xtrabackup一键自动化备份脚本 V1 [原创] xtrabackup备份工具安装与使用 http://990487026.blog.51cto.com/10133282/1697094 需要填写的信息 备份文件路径        backdir=/ASSET.innobackupex mysql用来备份用户   user=root mysql用户的密码     pass=asset 输出的信息保存路径    logfile=/var/www/html/index.html l [[ema

MySQL 利用xtrabackup进行增量备份详细过程汇总

Xtrabackup下载.安装以及全量备份请参考:http://blog.itpub.net/26230597/viewspace-1465772/ 1,创建mysql备份用户 mysql -uroot --password="" -e"CREATE USER 'backup'@'192.168.%' IDENTIFIED BY '123456'"; mysql -uroot --password="" -e"GRANT RELOAD,

svn dump增量备份脚本

svn 增量备份脚本, 环境:系统,centos6.5,svn version 1.6.11,httpd Apache/2.2.15 (Unix) APR 1.3.9, APR-Util 1.3.9,全部为yum编译 一些常用命令 svn ls -v /opt/svn/snn                  查看svn目录文件列表 svn --version                      查看svn版本 svnadmin create /opt/svn/snn          

【mysql】使用xtrabackup在线增量备份及恢复l数据库

一.介绍 1.Xtrabackup有这么几个文件 innobackupex innobackupex 是xtrabackup的一个符号链接 . innobackupex still supports all features and syntax as 2.2 version did, but is now deprecated and will be removed in next major release. xtrabackup 一个由C编译而来的二进制文件,可以整备MySQL datab

xtrabackup的mysql备份脚本

一.安装xtrabackup工具 安装方法见:xtrabackup安装 二.配置备份脚本 1.拷贝mysql_backup_shell到mysql业务服务器目录,比如:/data/backup_shell/mysql_backup_shell 2.进入拷贝后mysql_backup_shell所在目录, 然后执行chmod 777 mysql_backup.sh 3.修改backup.conf 需要修改的项: mysql_conf_file=/usr/local/meb/my.cnf.3309

Python 生产环境Mysql数据库增量备份脚本

Mysql数据库常用的办法是通过mysqldump导出sql进行备份,但是不适合数据量很大的数据库,速度,锁表是两个严重的问题.前面写了一遍blog介绍xtrabackup的热备工具.下面的脚本是基于xtrabackup实现自动备份数据库的功能. 需求描述: 每天晚上23点,对数据库进行一次完整备份.第二天0-22点,每小时进行一次增量备份.每次备份前把上次的完整备份和23次增量备份移动到指定目录里,保留7天的数据. ps:不要问我,为什么是23点执行完整备份,0点不更好处理吗?bingo,这是

mysql全库备份/增量备份脚本

http://hongge.blog.51cto.com/ 生产环境中Mysql数据库的备份是周期性重复的操作,所以通常是要编写脚本实现,通过crond计划任务周期性执行备份脚本 mysqldump备份方案: 周日凌晨1点全库备份 周一到周六凌晨每隔4个小时增量备份一次 设置crontab任务,每天执行备份脚本 # crontab –e #每个星期日凌晨1:00执行完全备份脚本 0 1 * * 0 /root/mysqlfullbackup.sh >/dev/null 2>&1 #周一

度量系统服务端文件本地异地差异备份(增量备份)脚本示例

度量产品部署好服务端后,因为服务端有各类封装加密的附件,文件等资料,为保障数据安全,除了建立高可用性的备份机制外,我们可以通过批处理脚本,结合到系统计划进行本地或异地备份,为考虑容量情况,也可以采用增量备份进行.下面代码是一个示例批处理脚本,可以按照自己的思路编写简单而强大的服务端备份策略: @echo offREM ************************************************************REM *服务端文件增量备份,每年的数据保存在DestDir