MySQL自动化(全量+增量)备份脚本代码

本文涉及的产品
云数据库 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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#!/bin/bash
#At Sunday, we will backup the completed databases and the incresed binary log during Saturday to Sunday.
#In other weekdays, we only backup the increaing binary log at that day!
################################
#the globle variables for MySQL#
################################
DB_USER= 'root'
DB_PASSWORD= '123456'
DB_PORT= '3306'
BACKUPDIR= '/tmp/mysqlbakup'
BACKUPDIR_OLDER= '/tmp/mysqlbakup_older'
DB_PID= '/data/mysql/log/mysqld.pid'
LOG_DIR= '/data/mysql/log'
BACKUP_LOG= '/tmp/mysqlbakup/backup.log'
DB_BIN= '/usr/local/mysql/bin'
#time variables for completed backup
FULL_BAKDAY= 'Sunday'
TODAY=` date  +%A`
DATE=` date  +%Y%m%d`
###########################
#time variables for binlog#
###########################
#liftcycle for saving binlog 
DELETE_OLDLOG_TIME=$( date  "-d 14 day ago"  +%Y%m%d%H%M%S)
#The start time point to backup binlog, the usage of mysqlbinlog is --start-datetime、--stop-datetime, time format is %Y%m%d%H%M%S, eg:20170502171054, time zones is  [start-datetime, stop-datetime)
#The date to start backup binlog is yesterday at this very moment!
START_BACKUPBINLOG_TIMEPOINT=$( date  "-d 1 day ago"  + "%Y-%m-%d %H:%M:%S" )
BINLOG_INDEX= '/data/mysql/log/mysql-bin.index'
##############################################
#Judge the mysql process is running or not.  #
#mysql stop return 1, mysql running return 0.#
##############################################
function  DB_RUN(){
     if  test  -a $DB_PID &&  test  -a $DB_SOCK; then
         return  0
     else
         return  1
     fi
}
###################################################################################################
#Judge the bacup directory is exsit not.                                                          #
#If the mysqlbakup directory was exsited, there willed return 0.                                  #
# If there is no a mysqlbakup directory, the fuction will create the directory and return value 1.#
###################################################################################################
function  BACKDIR_EXSIT(){
     if  test  -d $BACKUPDIR; then
#        echo "$BACKUPDIR was exist."
         return  0
     else
         echo  "$BACKUPDIR is not exist, now create it."
         mkdir  -pv $BACKUPDIR
         return  1
     fi
}
###################################################################################################
#Judge the binlog is configed or not.                                                          #
#If the mysqlbakup directory was exsited, there willed return 0.                                  #
# If there is no a mysqlbakup directory, the fuction will create the directory and return value 1.#
###################################################################################################
function  BINLOG_EXSIT(){
     if  test  -f $BINLOG_INDEX; then
#        echo "$BACKUPDIR was exist."
         return  0
     fi
}
###################################################
#The full backup for all Databases                #
#This function is use to backup the all databases.#
###################################################
function  FULL_BAKUP(){
     echo  "At `date +%D\ %T`: Starting full backup the MySQL DB ... "
#    rm -fr $BACKUPDIR/db_fullbak_$DATE.sql  #for test !!
     $DB_BIN /mysqldump  --lock-all-tables --flush-logs --master-data=2 -u$DB_USER -p$DB_PASSWORD -P$DB_PORT -A | gzip  > $BACKUPDIR /db_fullbak_ $DATE.sql.gz
     FULL_HEALTH=` echo  $?`
     if  [[ $FULL_HEALTH == 0 ]]; then
         echo  "At `date +%D\ %T`: MySQL DB incresed backup successfully"
     else
         echo  "MySQL DB full backup failed!"
     fi
}
#python
# >>> with open('/data/mysql/log/mysql-bin.index','r') as obj:
# ...    for i in obj:
# ...       print os.path.basename(i)
# ...
# mysql-bin.000006
# mysql-bin.000007
# mysql-bin.000008
# mysql-bin.000009
function  INCREASE_BAKUP(){
     echo  "At `date +%D\ %T`: Starting increased backup the MySQL DB ... "
     $DB_BIN /mysqladmin  -u$DB_USER -p$DB_PASSWORD -P$DB_PORT flush-logs
     $DB_BIN /mysql  -u$DB_USER -p$DB_PASSWORD -P$DB_PORT -e  "purge master logs before ${DELETE_OLDLOG_TIME}"
     for  in  ` cat  $BINLOG_INDEX`
     do
         $DB_BIN /mysqlbinlog  -u$DB_USER -p$DB_PASSWORD -P$DB_PORT --start-datetime= "$START_BACKUPBINLOG_TIMEPOINT"  $i | gzip  >> $BACKUPDIR /db_daily_ $DATE.sql.gz
     done
     # $DB_BIN/mysqlbinlog -u$DB_USER -p$DB_PASSWORD -P$DB_PORT --start-datetime="$START_BACKUPBINLOG_TIME" $LOG_DIR/mysql-bin.[0-9]* |gzip >> $BACKUPDIR/db_daily_$DATE.sql.gz
     INCREASE_HEALTH=` echo  $?`
     if  [[ $INCREASE_HEALTH == 0 ]]; then
         echo  "At `date +%D\ %T`: MySQL DB incresed backup successfully"
     else
         echo  "MySQL DB incresed backup failed!"
     fi
}
function  OLDER_BACKDIR_EXSIT(){
     if  test  -d $BACKUPDIR_OLDER; then
#        echo "$BACKUPDIR_OLDER was exist."
         return  0
     else
         echo  "$BACKUPDIR_OLDER is not exist, now create it."
         mkdir  -pv $BACKUPDIR_OLDER
#        return 1
     fi
}
function  BAKUP_CLEANER(){
     #move the backuped file that created time out of 7 days to the BACKUPDIR_OLDER directory
     returnkey=` find  $BACKUPDIR -name  "*.sql.gz"  -mtime +7 - exec  ls  -lh {} \;`
     returnkey_old=` find  $BACKUPDIR_OLDER -name  "*.sql.gz"  -mtime +14 - exec  ls  -lh {} \;`
     if  [[ $returnkey !=  ''  ]]; then
 
         echo  "----------------------"
         echo  "Moving the older backuped file out of 7 days to $BACKUPDIR_OLDER."
         echo  "The moved file list is:"
         find  $BACKUPDIR -name  "*.sql.gz"  -mtime +7 - exec  mv  {} $BACKUPDIR_OLDER \;
         echo  "-----------------------"
     elif  [[ $returnkey_old !=  ''  ]]; then
         #delete the backuped file that created time out of 14 days from BACKUPDIR_OLDER directory.
         echo  "Delete the older backuped file out of 14 days from $BACKUPDIR_OLDER."
         echo  "The deleted files list is:"
         find  $BACKUPDIR_OLDER -name  "*.sql.gz"  -mtime +14 - exec  rm  -fr {} \;
     fi
}
####################################
#--------------main----------------#
####################################
function  MAIN(){
     DB_RUN  #Judge the process is run or not, if not run, the script will not bakup db
     Run_process=` echo  $?`
     echo  $?
     if  [[ $Run_process == 0 ]]; then
         BINLOG_EXSIT
         binlog_index=` echo  $?`
         echo  "binlog_index:$binlog_index"
         if  [[ $binlog_index == 0 ]]; then
             echo  "**********START**********"
             echo  $( date  + "%y-%m-%d %H:%M:%S %A" )
             echo  "~~~~~~~~~~~~~~~~~~~~~~~"
             if  [[ $TODAY == $FULL_BAKDAY ]]; then
                 echo  "Start completed bakup ..."
                 INCREASE_BAKUP
                 FULL_BAKUP     #full backup to all DB
                 BAKUP_CLEANER
             else
                 echo  "Start increaing bakup ..."
                 INCREASE_BAKUP
             fi
             echo  "~~~~~~~~~~~~~~~~~~~~~~~"
             echo  $( date  + "%y-%m-%d %H:%M:%S %A" )
             echo  "**********END**********"
         else
             echo  "**********START**********"
             echo  $( date  + "%y-%m-%d %H:%M:%S %A" )
             echo  "~~~~~~~~~~~~~~~~~~~~~~~"
             echo  "Sorry, MySQL binlog was not configed, please config the my.cnf firstly!"
             echo  "~~~~~~~~~~~~~~~~~~~~~~~"
             echo  $( date  + "%y-%m-%d %H:%M:%S %A" )
             echo  "**********END**********"
         fi
     else
         echo  "**********START**********"
         echo  $( date  + "%y-%m-%d %H:%M:%S %A" )
         echo  "~~~~~~~~~~~~~~~~~~~~~~~"
         echo  "Sorry, MySQL was not running, the db could not be backuped!"
         echo  "~~~~~~~~~~~~~~~~~~~~~~~"
         echo  $( date  + "%y-%m-%d %H:%M:%S %A" )
         echo  "**********END**********"
     fi
}
#starting runing
 
BACKDIR_EXSIT $BACKUP_LOG
OLDER_BACKDIR_EXSIT $BACKUP_LOG
MAIN >> $BACKUP_LOG









本文转自 wangpengtai  51CTO博客,原文链接:http://blog.51cto.com/wangpengtai/1942258,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
25天前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
143 61
|
2月前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
4天前
|
Web App开发 人工智能 JSON
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
AutoMouser是一款Chrome扩展程序,能够实时跟踪用户交互行为,并基于OpenAI的GPT模型自动生成Selenium测试代码,简化自动化测试流程。
82 17
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
|
20天前
|
Web App开发 数据采集 JavaScript
Chrome浏览器实例的TypeScript自动化脚本
Chrome浏览器实例的TypeScript自动化脚本
|
1月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
70 7
|
1月前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
2月前
|
SQL 测试技术 API
如何编写API接口的自动化测试脚本
本文详细介绍了编写API自动化测试脚本的方法和最佳实践,涵盖确定测试需求、选择测试框架、编写测试脚本(如使用Postman和Python Requests库)、参数化和数据驱动测试、断言和验证、集成CI/CD、生成测试报告及维护更新等内容,旨在帮助开发者构建高效可靠的API测试体系。
|
2月前
|
运维 Devops
自动化运维:从脚本到DevOps的进化之旅
在数字化时代,自动化运维不仅是提高生产效率的关键,更是企业竞争力的象征。本文将带领读者穿越自动化运维的发展历程,从最初的脚本编写到现代DevOps文化的形成,揭示这一演变如何重塑IT行业的工作模式。通过具体案例,我们将展示自动化工具和实践如何简化复杂任务,优化流程,并促进团队协作。你将发现,自动化运维不仅关乎技术的进步,更体现了人、流程和技术三者之间协同增效的深层逻辑。
|
2月前
|
监控 安全 测试技术
在实施自动化和持续集成的过程中,如何确保代码的安全性和合规性
在自动化和持续集成中,确保代码安全与合规至关重要。措施包括集成自动化安全工具、执行自动化合规检查、进行代码质量与安全检测、评估开源代码安全、实施基础设施即代码的安全标准、采用多层防御策略、加强安全教育与文化建设、使用合规性检测工具及许可证合规分析等,共同提升代码安全性与合规水平。
|
2月前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录

热门文章

最新文章