【mysql使用xtrabackup做全量增量备份】mysql_backup.sh

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#!/bin/bash
#
# 2014/12/16
# v5.1
# increment backup, with timestamp, compressed, with master & slave.
 
######################
s_port= "$1"
s_action= "$2"
s_slave= "$3"
 
#####  配置参数  ######
##
f_my_cnf= "/data/svr/mysql/my.cnf.${s_port}"
d_bak_base= "/data/backup/mysql/${s_port}"
s_copies=6
s_password= "xxx"
##
 
####################### 用法
function  usage() {
     cat  <<EOF
 
 
[-] 用法: $0 port [full|incr|full_tar|full_stream] [slave]
 
$0 3306 full &              全备份,未压缩;完成后压缩前一天的备份;
$0 3306 incr &              增量备份,未压缩;完成后压缩前一天的备份;
$0 3306 full_tar &          全备份,未压缩;完成后,压缩这个备份;
$0 3306 full_stream &       全备份,边备份边压缩,stream= tar 模式;
 
[-] 针对slave实例:
$0 3306 full slave &
$0 3306 incr slave &
$0 3306 full_tar slave &
$0 3306 full_stream slave &
 
[-] 针对 crontab 的配置:
+------------------------------+
# [mysql]
0 0 * * 6 $0 3306 full &
0 0 * * 0-5 $0 3306 incr &
+------------------------------+
 
EOF
     exit  2
}
 
#######################
test  ${s_port} -gt 0
if  [ $? -gt 0 ];  then
     echo  "[+] Tips: 端口没有指定或者有误;"
     usage
     exit  3;
fi
 
if  [ -z ${s_slave} ];  then
     s_args= "--defaults-file=${f_my_cnf} --host=127.0.0.1 --port=${s_port} --user=root --password=${s_password}"
else
     s_args= "--defaults-file=${f_my_cnf} --host=127.0.0.1 --port=${s_port} --user=root --password=${s_password} --slave-info --safe-slave-backup"
fi
 
d_bak_gz= "${d_bak_base}/gz"
d_bak_tmp= "${d_bak_base}/tmp"
d_bak_log= "${d_bak_base}/log"
d_bak_full= "${d_bak_base}/full"
f_bak_stream= "${d_bak_full}/mysql-stream-$(date +%F).gz"
 
[ -d ${d_bak_gz} ] ||  mkdir  -p ${d_bak_gz}
[ -d ${d_bak_tmp} ] ||  mkdir  -p ${d_bak_tmp}
[ -d ${d_bak_log} ] ||  mkdir  -p ${d_bak_log}
[ -d ${d_bak_full} ] ||  mkdir  -p ${d_bak_full}
 
###################### 清理旧备份
function  do_cleanup() {
     echo  "[-] `date` delete old files over ${s_copies} days ... "
     find  ${d_bak_gz} - type  f -name  "*.gz"  -mtime +${s_copies} -print
     find  ${d_bak_gz} - type  f -name  "*.gz"  -mtime +${s_copies} -delete
     find  ${d_bak_full} - type  f -name  "*.gz"  -mtime +${s_copies} -print
     find  ${d_bak_full} - type  f -name  "*.gz"  -mtime +${s_copies} -delete
     find  ${d_bak_log} - type  f -name  "*.log"  -mtime +${s_copies} -print
     find  ${d_bak_log} - type  f -name  "*.log"  -mtime +${s_copies} -delete
 
     echo  "[-] `date` done."
}
 
###################### 压缩今天之前的目录,清理旧备份
function  do_tar_yesterday() {
     local  s_yesterday=$( date  -d  "1 day ago"  +%F)
 
     echo  "[-] `date` waiting for file compression process ..."
     cd  ${d_bak_tmp}
     ls  | grep  - v  "`date +%F`"  | xargs  -i  tar  zcf  "{}.tar.gz"  {} --remove-files
     echo  "[-] `date` move: `ls *.gz` to: ${d_bak_gz}"
     mv  *.gz ${d_bak_gz}
    
     do_cleanup
}
 
###################### 压缩指定目录
function  do_tar() {
     echo  "[-] `date` waiting for file compression process ..."
     cd  ${d_bak_full}
     ls  | grep  - v  ".gz"  | xargs  -i  tar  zcf  "{}.tar.gz"  {} --remove-files
 
     do_cleanup
}
 
###################### 全备份,未压缩;完成后压缩前一天的备份;
function  do_full() {
     echo  "[+] `date` +------------------------Start--------------------+"
     innobackupex ${s_args} ${d_bak_tmp}
     echo  "[-] `date` +------------------------cleanup------------------+"
     do_tar_yesterday
     echo  "[-] `date` +------------------------The End------------------+"
}
 
###################### 增量备份,未压缩;完成后压缩前一天的备份;
function  do_increment() {
     echo  "[+] `date` +------------------------Start--------------------+"
     innobackupex --incremental ${s_args} ${d_bak_tmp}
     echo  "[-] `date` +------------------------cleanup------------------+"
     do_tar_yesterday
     echo  "[-] `date` +------------------------The End------------------+"
}
 
###################### 全备份,未压缩;完成后,压缩这个备份;
function  do_full_tar() {
     echo  "[+] `date` +------------------------Start--------------------+"
     innobackupex ${s_args} ${d_bak_full}
     echo  "[-] `date` +------------------------cleanup------------------+"
     do_tar
     echo  "[-] `date` +------------------------The End------------------+"
}
 
###################### 全备份,边备份边压缩,stream=tar模式;
function  do_full_stream() {
     echo  "[+] `date` +------------------------Start--------------------+"
     innobackupex --stream= tar  ${s_args} ${d_bak_full} | gzip  >${f_bak_stream}
     echo  "[-] `date` +------------------------cleanup------------------+"
     do_cleanup
     echo  "[-] `date` +------------------------The End------------------+"
}
 
 
 
#################### 
case  ${s_action}  in
     full)
         do_full > "${d_bak_log}/$(date +%F_%H-%M-%S).log"  2>&1
         ;;
     incr)
         do_increment > "${d_bak_log}/$(date +%F_%H-%M-%S).log"  2>&1
         ;;
     full_tar)
         do_full_tar > "${d_bak_log}/$(date +%F_%H-%M-%S).log"  2>&1
         ;;
     full_stream)
         do_full_stream > "${d_bak_log}/$(date +%F_%H-%M-%S).log"  2>&1
         ;;
     *)
         usage
         ;;
esac




本文转自 pcnk 51CTO博客,原文链接:http://blog.51cto.com/nosmoking/1594778,如需转载请自行联系原作者

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
存储 关系型数据库 MySQL
mysql数据库备份与恢复
MySQL数据库的备份与恢复是确保数据安全性和业务连续性的关键操作。
27 4
|
4月前
|
存储 SQL 关系型数据库
|
2月前
|
关系型数据库 MySQL Linux
mysql 主从同步 实现增量备份
【8月更文挑战第28天】mysql 主从同步 实现增量备份
37 3
|
2月前
|
SQL 关系型数据库 MySQL
在Linux中,如何备份和恢复MySQL数据库?
在Linux中,如何备份和恢复MySQL数据库?
|
2月前
|
SQL 数据可视化 关系型数据库
MySQL 备份可视化巡检系统
MySQL 备份可视化巡检系统
|
2月前
|
SQL 存储 关系型数据库
MySQL备份:mydumper 备份恢复工具生产实战
MySQL备份:mydumper 备份恢复工具生产实战
|
2月前
|
安全 关系型数据库 MySQL
揭秘MySQL海量数据迁移终极秘籍:从逻辑备份到物理复制,解锁大数据迁移的高效与安全之道
【8月更文挑战第2天】MySQL数据量很大的数据库迁移最优方案
295 17
|
2月前
|
存储 关系型数据库 MySQL
MySQL备份与恢复
MySQL备份与恢复
47 0
|
2月前
|
关系型数据库 MySQL Shell
分享一篇mysql数据库备份脚本
分享一篇mysql数据库备份脚本
23 0
|
2月前
|
关系型数据库 MySQL 机器人
【MySQL】两个脚本自动化搞定 MySQL 备份恢复--XtraBackup
【MySQL】两个脚本自动化搞定 MySQL 备份恢复--XtraBackup
下一篇
无影云桌面