运维脚本: Mysql数据库备份

news/2024/12/2 12:24:00/文章来源:https://www.cnblogs.com/chang157122/p/18581622

背景介绍

  • 在数据库管理和运维中,定期备份数据库是防止数据丢失和灾难恢复的基础。对于 MySQL 数据库,手动备份可能会导致频繁的操作失误或遗漏,因此,自动化备份脚本的编写变得尤为重要。
  • 本文将为你介绍如何编写一个简单且实用的 MySQL 备份脚本,通过该脚本,用户可以轻松自动化备份过程,确保数据库数据的安全

目标和用途

  • 创建一个简单的 Bash 脚本,用于自动备份 MySQL 数据库。
  • 通过自动化脚本来减轻数据库管理负担,确保定期备份。
  • 提供自动化的备份策略,例如按日期创建备份文件,保留历史备份等。

备份工具

  • 采用percona-xtrabckup实现MySQL数据库物理热备。
  • xtrabckup 优点
    • 备份速度快,物理备份可靠。
    • 备份过程不会打断正在执行的事务(无需锁表)
    • 自动备份校验
    • 还原速度快

脚本示例

  1 #!/bin/bash
  2 # 作者: 阿杰
  3 # 说明:Mysql数据库备份脚本
  4 # 备份工具: percona-Xtrabackup
  5 # 备份策略:
  6 #     (1) 每周日凌晨2点进行全量备份
  7 #     (2) 每周一至周六凌晨两点进行增量备份
  8 # 定时任务配置策略
  9 # 0 2 * * * bash /data/mysql_backup/mysql_backup.sh
 10 # 告警:可根据备份失败触发邮件告警机制。告警需自行配置
 11 
 12 
 13 # 日志记录
 14 log_err() {
 15     printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: \033[31mERROR: \033[0m$@\n" >> /data/mysql_backup/error.log
 16     exit 1
 17 }
 18 
 19 log_info() {
 20     printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: \033[32mINFO: \033[0m$@\n" >> /data/mysql_backup/info.log
 21 }
 22 
 23 log_warning() {
 24     printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: \033[33mWARNING: \033[0m$@\n" >> /data/mysql_backup/warning.log
 25 }
 26 
 27 
 28 
 29 # 初始化函数
 30 init
 31 function init() {
 32     init_config
 33     check_backup_is_exist
 34 }
 35 
 36 # 初始化配置
 37 function init_config() {
 38     # 备份工具
 39     xtrabckup_path="/usr/bin/innobackupex"
 40     # Mysql配置文件路径
 41     mysql_cnf_path="/etc/my.cnf"
 42     # 线程数
 43     thread_cnt=4
 44     #备份路径, 时间格式:年- 45     backup_base_dir="/data/mysql_backup/$(date "+%Y-%U")"
 46     # 当前备份文件
 47     current_backup_path="${backup_base_dir}/$(date "+%Y-%m-%d")"
 48 
 49     # 数据库信息
 50     db_host="localhost"
 51     db_user="root"
 52     db_password="xxxxxxx"
 53 
 54 }
 55 
 56 # 检查是否存在percona-Xtrabackup 工具
 57 function check_backup_is_exist() {
 58     if [ -z "$(rpm -qa | grep xtrabackup)" ];then
 59         curl -o /tmp/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm  https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm > /dev/null 2>&1
 60         if [ $? -ne 0 ];then
 61             log_err "[check_backup_is_exist] 在线安装 percona-xtrabackup 备份工具失败! 请检查是否可出网"
 62         fi
 63         yum -y install /tmp/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm 1> /dev/null 
 64         if [ $? -ne 0 ];then
 65             log_err "[check_backup_is_exist] yum 安装 percona-xtrabackup 备份工具失败! " 
 66         fi
 67     fi
 68 }
 69 
 70 # 全量备份
 71 function full_backup() {
 72     # 不存在则创建
 73     if [ ! -d "$backup_base_dir" ];then
 74         mkdir -pv $backup_base_dir > /dev/null 2>&1
 75         if [ $? -ne 0 ];then
 76             log_err "[full_backup] 创建备份目录 $backup_base_dir 失败!"
 77         fi
 78         # 全量备份
 79         full
 80     else
 81         # 目录存在,目录下内容为空 则执行全量备份
 82         if [ -z "$(ls $current_backup_path | wc -l)" ];then
 83             full
 84         else
 85             log_warning "[full_backup] 存在已有备份数据, 跳过全量备份!"
 86             return
 87         fi
 88     fi
 89 
 90 
 91 }
 92 
 93 function full() {
 94     $xtrabckup_path --defaults-file=$mysql_cnf_path --host=$db_host --user=$db_user --password=$db_password --parallel=$thread_cnt --slave-info --safe-slave-backup --no-timestamp $current_backup_path 1> /dev/null
 95     if [$? -ne 0 ];then
 96         log_err "[full_backup] 执行备份失败 备份路径: $current_backup_path"
 97     fi
 98     log_info "[full_backup] 全量备份结束, 备份路径: $current_backup_path"
 99     # 全量备份完成后退出脚本
100     exit 1
101 }
102 
103 # 增量备份
104 function incremental_backup() {
105     prev_backup_dir="/data/mysql_backup/$(date "+%Y-%U")/$(date -d "-1day" "+%Y-%m-%d")"
106     stat $prev_backup_dir > /dev/null 2>&1
107     if [ $? -ne 0 ];then
108         log_warning "[incremental_backup] 前一天执行备份失败 备份路径:$prev_backup_dir"
109         # 查找上一次备份结果
110         while true;do
111             local i=2
112             prev_backup_dir="/data/mysql_backup/$(date "+%Y-%U")/$(date -d "-${i}day" "+%Y-%m-%d")"
113             stat $prev_backup_dir > /dev/null 2>&1
114             if [ $? -eq 0 ];then
115                 break
116             fi
117             ((i++))
118         done
119     fi
120     $xtrabckup_path --defaults-file=$mysql_cnf_path --host=$db_host --user=$db_user --password=$db_password --parallel=$thread_cnt --slave-info --safe-slave-backup --no-timestamp $current_backup_path --incremental-basedir=${prev_backup_dir} 1> /dev/null
121     if [ $? -ne 0 ]; then
122         log_err "[incremental_backup] 执行增量备份失败, 备份路径: $current_backup_path"
123     fi
124     log_info "[incremental_backup] 增量备份结束, 备份路径: $current_backup_path"
125 }
126 
127 
128 # 主函数
129 function main() {
130     full_backup
131     incremental_backup
132 }
133 
134 main

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/845379.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lsky Pro挂载alist

首先需要去修改lsky代码,如果是docker可以 docker exec -it lsky-pro /bin/bash 然后安装个vim apt install vim cd app cd Services/ ls vi ImageService.php 然后vim输入 :set nu 显示行号,然后找到345行,粘贴进去 authType => 1, lwebdav存储策略问题 Issue #497 ls…

使用Go语言开发的一款轻量级可视化服务器监控监控软件

大家好,我是兔兔,兔兔答题的开发者。兔兔答题是一款简单、易用的答题系统,可应用于微信考试、付费考试、社会调查问卷、明星知识问答、员工培训考核、模拟自测、企业面试、试题库等多种场景。兔兔答题官网文档 进入给大家分享的内容是一款轻量级的日志可视化图形工具。在兔兔…

中电金信:源启数据资产平台的智能化与安全化的创新之道

中国企业在数智化转型中在数据治理领域遭遇多重挑战,包括在数据标准化、数据质量提升、数据分级分类,以及数据安全治理等。近几年,中电金信依托自主研发的智能数据底座“源启数据资产平台”,助力企业实现数据驱动的业务经营和精益管理。该平台不断吸纳全球数据治理领域的前…

【WEB漏洞】并发漏洞+经典案例

一、简单介绍1.1 并发漏洞概述1.2 并发漏洞常出现的功能点及解决方法1.2.1 用户注册/账户管理1.2.2 秒杀/抢购功能1.2.3 支付与结算1.2.4 文件读写1.2.5 日志记录1.2.6 缓存更新1.2.7 任务调度1.2.8 数据库操作1.2.9 队列消费1.2.10 多线程计算1.2.11 微服务间的并发请求1.2.12…

AI之旅:Microsoft.Extensions.AI 送惊喜,Cnblogs.DashScope.AI 表支持

https://www.cnblogs.com/cmt/p/185775742024年10月8日,微软 .NET 官方博客发布了一篇博文 Introducing Microsoft.Extensions.AI Preview – Unified AI Building Blocks for .NET,给 .NET 开发者带来了一个小惊喜,.NET 类库将增加一个统一的调用 AI 服务的抽象接口层。Mic…

word 图标变为文本图标 修复不起作用

参考 https://blog.csdn.net/qq_42925869/article/details/141466944,在HKEY_CURRENT_USER\Software\Classes\Applications目录下发现没有WORD的程序,因此参考其他程序结构,手动新建。 新建完成后再次应用office tool plus修复,修复完成后图标恢复。

CH585_IAP升级步骤

1、打开名为:McuProgramIAPTool.exe的工具,工具界面如图: 注:仅下载界面有效2、给接收器升级时,不需要保证2.4G处于连接状态,只要接收器插在PC上即可完成升级 3、选择接口:mi_034、点击搜索按钮,如果插入了2.4G接收器,会枚举到对应设备,返回已连接信息5、选择要升级的…

YASKAWA安川DX100控制柜维修看这几步

维修YASKAWA安川DX100控制柜需要综合运用多种诊断技巧,并遵循严格的安全操作规程。通过预防性维护和及时的故障处理,可以显著提高DX100控制柜的可靠性和使用寿命,从而保障企业生产线的稳定运行。同时,建议联系子锐机器人维修定期对YASKAWA安川机器人维修和保养。一、YASKAW…

待办事项太多?这些App让你轻松搞定!

在日常工作和生活中,许多人都有过忘记重要事项或任务堆积的困扰。为了提高工作效率和生活质量,越来越多的人开始寻求一种高效的方式来管理自己的任务和待办事项。幸运的是,随着技术的进步,各类待办事项App应运而生,它们不仅能够帮助我们合理安排时间,还能通过各种智能化功…

cors问题复现

目录环境配置前端服务器 (端口3000)配置API服务器 (端口5000)启用配置 环境 Debian12 192.168.2.102/24rambo@mac:~$ cat /etc/apt/sources.list.d/debian.sources Types: deb URIs: https://mirrors.tuna.tsinghua.edu.cn/debian Suites: bookworm bookworm-updates bookworm…

Qt/C++实现帧同步播放器/硬解码GPU绘制/超低资源占用/支持8K16K/支持win/linux/mac/嵌入式/国产OS等

一、前言 首先泼一盆冷水,在不同的电脑上实现完完全全的帧同步理论上是不可能的,市面上所有号称帧同步的播放器,同一台电脑不同拼接视频可以通过合并成一张图片来绘制实现完完全全的帧同步,不同电脑,受限于网络的延迟,命令交互的时间占用,不同硬件之间的主频偏差等,肯定…