首页 > 数据库 >运维脚本: Mysql数据库备份

运维脚本: Mysql数据库备份

时间:2024-12-02 12:32:50浏览次数:9  
标签:-% log 运维 -- 备份 Mysql path backup

背景介绍

  • 在数据库管理和运维中,定期备份数据库是防止数据丢失和灾难恢复的基础。对于 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

 

标签:-%,log,运维,--,备份,Mysql,path,backup
From: https://www.cnblogs.com/chang157122/p/18581622

相关文章

  • Centos7.9 安装mysql8.4.3-lts 记录过程
    1、下载并上传mysqlrpm安装包tar-xvfmysql-8.4.3-1.el7.x86_64.rpm-bundle.tar2、按照如下顺序执行安装;如果有依赖缺少,执行yum-yinstall依赖名称rpm-ivhmysql-community-common-8.4.3-1.el7.x86_64.rpmrpm-ivhmysql-community-client-plugins-8.4.3-1.el7.x86_64......
  • mysql Error Code 1175异常解决方法
    第一种方法:当用MySQLWorkbench进行数据库的批量更新时,执行一个语句会碰到以下错误提示:ErrorCode:1175Youareusingsafe...withoutaWHEREthatusesaKEYcolumn因为是MySQLWorkbench的默认的安全设置是不能批量更新表的。当要执行的SQL语句是进行批量更新或者删除的......
  • COC云运维中心新特性解读,让智能运维更高效
    云运维中心(CloudOperationsCenter,简称COC)是一个为用户提供安全、高效的一站式智能运维平台,满足客户集中运维诉求。承载华为云确定性运维业务场景,提供变更管理、批量运维等核心特性,实现在安全合规的前提下,提升用户运维能力成熟度和云上运维效率。 2024年11月,COC全新升级,对快速......
  • JAVA开源毕业设计 医护人员排班系统 Vue.JS+SpringBoot+MySQL
    本文项目编号T014,文末自助获取源码\color{red}{T014,文末自助获取源码}......
  • JAVA开源毕业设计 美容院管理系统 Vue.JS+SpringBoot+MySQL
    本文项目编号T012,文末自助获取源码\color{red}{T012,文末自助获取源码}......
  • 生鲜配送ERP系统_升鲜宝生鲜配送供应链管理系统Mysql表结构数据字典的生成小工具V0.01
    生鲜配送ERP系统_升鲜宝生鲜配送供应链管理系统Mysql表结构数据字典的生成小工具V0.01_SaaS全链路生鲜供应链管理系统_升鲜宝_15382353715 最近要交付升鲜宝生鲜配送供应链管理系统源代码给上海的客户,需要将蓝湖UI设计图及数据字典交接给别人。在网上找了半天没有找到合适的根......
  • Mysql数据库基础篇笔记
    目录sql语句DDL——数据库定义语言(定义库,表,字段)数据库操作:表操作:DML增删改语句DQL语法编写顺序:条件查询DCL用户管理:权限管理:函数常见字符串内置函数常见数值内置函数常见日期内置函数常见流程内置函数约束外键约束多表查询连接查询:内连接:相当于查询A,B......
  • MySQL底层概述—8.JOIN排序索引优化
    大纲1.Join算法原理2.IN和EXISTS函数3.MySQL排序之索引排序(Usingindex)4.MySQL排序之额外排序(Usingfilesort)5.排序优化之尽量使用索引排序6.索引单表优化7.索引多表优化 1.Join算法原理(1)Join简介(2)驱动表的定义(3)三种Join算法(4)总结 (1)Join简介Join......
  • MySQL底层概述—7.优化原则及慢查询
    大纲1.Explain概述2.Explain详解3.索引优化数据准备4.索引优化原则详解5.慢查询设置与测试6.慢查询SQL优化思路 1.Explain概述使用Explain关键字可以模拟查询优化器来执行SQL查询语句,从而知道MySQL是如何处理SQL语句的,从而分析出查询语句和表结构的性能瓶颈。 MySQL......
  • 升鲜宝生鲜配送供应链管理系统Mysql表结构数据字典的生成小工具V0.01
    最近最近要交付升鲜宝生鲜配送供应链管理系统源代码给上海的客户,需要将蓝湖UI设计图及数据字典交接给别人。在网上找了半天没有找到合适的根据Mysql生成Word数据字典,自己就写了几行代码,记录一下.后面可能会继续改造。主要的代码如下:usingSystem;usingSystem.Collections.Gene......