shell脚本:使用mysqldump实现分库分表备份

news2024/11/16 11:43:44

一.什么是分库分表备份

分库分表备份是一种数据库备份策略,用于处理大型数据库系统中的数据分布和备份需求。当数据库的数据量非常大时,单个数据库可能无法满足性能和可扩展性的要求。为了解决这个问题,使用分库分表技术将数据库拆分成多个库和表,每个库和表分别存储一部分数据。

在分库分表备份中,备份操作也需要按照分库分表的方式进行。具体而言,备份程序会遍历每个库和表,并对其进行备份操作。这样可以确保所有数据被备份,同时使备份过程更高效。

分库分表备份的主要优势有:

  • 提高系统的可扩展性和性能:通过分库分表,可以将数据分布在多个节点上,从而提高系统的负载能力和处理性能。
  • 精确备份和恢复:分库分表备份可以确保每个数据库和表的数据都得到备份,同时也可以针对需要恢复的具体数据进行恢复操作,提高了备份和恢复的精确性。
  • 部分故障隔离:当某个库或表发生故障时,只需恢复受影响的库或表,而不需要恢复整个数据库系统。

二.基本思路

使用`mysqldump`实现分库分表备份的基本思路如下:

  1. 确定要备份的数据库列表:首先确定要备份的数据库列表,这些数据库可能是分布在不同的库中。
  2.  遍历数据库:对于每个数据库,遍历其中的表。
  3. 备份表:对于每个表,使用`mysqldump`命令备份表结构和数据到指定的备份文件中。
  4. 重复以上步骤:对其他数据库中的表重复执行步骤3,直到所有的数据库和表都备份完成。

三.脚本编写

#!/bin/bash
#########################
#File name:mysqldump_db.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2023-07-17 04:50:04
#Description:
#########################

# MySQL连接信息
db_user="root"
db_password="RedHat@123"
db_cmd="-u${db_user} -p${db_password}"
exclude_db="information_schema|mysql|performance_schema|sys|Database"
bak_dir=/backup/db/mysqldump_test/
# 判断备份路径是否存在
[ -d ${bak_dir} ] || mkdir ${bak_dir}

# 查找出需要备份的数据库
 mysql ${db_cmd} -e"show databases" -N 2>/dev/null | egrep -v "$exclude_db" > dbtmp
# 循环遍历数据库列表
while read db
do
        #对数据库进行备份
    mysqldump ${db_cmd} --set-gtid-purged=off $db 2>/dev/null | gzip > ${bak_dir}/`date +%F`-$db.sql.gz
        #判断是否备份成功
    if [ $? -eq 0 ]
    then
        echo "database $db is being backed up ... success!"
    else
        echo "database $db is being backed up ... failure!"
    fi
        #根据数据库进行分表备份 
    [ -d ${bak_dir}/$db ] || mkdir -p ${bak_dir}/$db
               # 获取数据库中的表名列表
    mysql ${db_cmd}  $db -e "SHOW TABLES;" | grep -v "Tables_in" > tbtmp

    # 循环遍历表名列表
    while read tb
    do
        # 对表进行备份
        mysqldump ${db_cmd} --set-gtid-purged=off $db $tb 2>/dev/null | gzip > ${bak_dir}/$db/`date +%F`-$db-$tb.sql.gz

        # 判断是否备份成功
        if [ "$?" -eq 0 ]; then
            echo "Backup of $db.$tb successful!"
        else
            echo "Backup of $db.$tb failed!"
        fi
    done < tbtmp
done < dbtmp
#删除临时文件
rm -rf tbtmp
rm -rf dbtmp                                                                    

运行结果如下:

四.脚本描述 

这个脚本是用于对MySQL数据库进行备份的。以下是脚本的解释:

1. 定义MySQL连接信息:

db_user="root"
db_password="RedHat@123"
db_cmd="-u${db_user} -p${db_password}"

   这里指定了 MySQL 的用户名和密码并在 `db_cmd` 变量中构建了传递给 MySQL 命令的连接信息。

2. 定义排除数据库和备份路径:

exclude_db="information_schema|mysql|performance_schema|sys|Database"
bak_dir=/backup/db/mysqldump_test/

   这里指定了需要从备份中排除的数据库列表,并设置了备份文件存储的目录。

3. 检查备份路径是否存在:

[ -d ${bak_dir} ] || mkdir ${bak_dir}

   这里通过判断备份目录是否存在,如果不存在则创建该目录。

4. 查找需要备份的数据库:

mysql ${db_cmd} -e"show databases" -N 2>/dev/null | egrep -v "$exclude_db" > dbtmp

   这里执行 MySQL 命令来获取数据库列表,将结果保存到 `dbtmp` 文件中,并对其中的数据库进行排除。

5. 循环遍历数据库列表:

while read db
do
...
done < dbtmp

   这里使用 `while read` 循环读取 `dbtmp` 文件中的每一行,即数据库列表。

6. 对数据库进行备份:

mysqldump ${db_cmd} --set-gtid-purged=off $db 2>/dev/null | gzip > ${bak_dir}/`date +%F`-$db.sql.gz

   这里使用 `mysqldump` 命令对每个数据库进行备份,备份的内容会经过 `gzip` 压缩,并将结果保存到以日期和数据库名称命名的压缩文件中。

7. 根据数据库分表进行备份:

[ -d ${bak_dir}/$db ] || mkdir -p ${bak_dir}/$db
mysql ${db_cmd}  $db -e "SHOW TABLES;" | grep -v "Tables_in" > tbtmp
while read tb
do
      ...
done < tbtmp

   这里首先检查存放分表备份的目录是否存在,若不存在则创建。然后获取指定数据库中的表名列表,并保存到 `tbtmp` 文件中。接着循环读取 `tbtmp` 文件中的每个表名,对每个表进行备份。

8. 删除临时文件:

rm -rf tbtmp
rm -rf dbtmp

   最后删除脚本运行过程中创建的临时文件 `tbtmp` 和 `dbtmp`。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决eclipse 打开报错 An error has occurred. See the log file null.

解决eclipse 打开报错an error has ocurred. See the log file null 出现原因&#xff1a;安装了高版本的jdk,更换 jdk 版本&#xff0c;版本太高了。 解决方案&#xff1a;更改环境变量 改成 jkd 1.8

【RTT驱动框架分析00】-应用层函数调用流程-串口为例

应用层函数调用流程分析以-串口为例 1. rt_device_find调用流程 RTT内部有一个全局变量数组rt_object_container数组的数量就是 rt_object_info_type 内核对象的种类&#xff0c;其中包含一个RT_USING_DEVICE (设备的数据类型)&#xff0c;数组内部的每一个变量包含一个链表&…

Codeforces算法心得——A. Escalator Conversations

大家好&#xff0c;我是晴天学长&#xff0c;今天开始尝试一些外国的题目了&#xff0c;不得不说&#xff0c;创新性挺高的&#xff0c;然后是全英文&#xff0c;也可以练练英文的水平&#xff0c;后面我会持续的更新的&#xff01;加油&#xff01;&#x1f4aa;&#x1f4aa;…

新零售行业如何做会员管理和会员营销

蚓链数字化营销系统全渠道会员管理解决方案&#xff0c;线上线下统一管理&#xff0c;打造私域流量&#xff0c;微信、门店会员全渠道管理&#xff0c;打通私域流量池&#xff0c;实现裂变营销&#xff1a; 开启新零售之路&#xff0c;必然要摒弃原有的管理模式&#xff0c;大…

JDK17 中的新特性初步了解

1. Switch 语句的增强 jdk12 &#xff0c;switch语句不用写break了&#xff0c;直接写箭头和对应的值。 jdk 17中&#xff0c; 加了一个逗号&#xff0c;用于匹配多对一。 如果要在每个case里写逻辑&#xff0c;可以写在花括号里。 在返回值的前面加上yield的关键字。 也可以对…

如何查看网页中请求的路由地址

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

软考A计划-系统集成项目管理工程师-项目质量管理-中

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

MySQL中锁的简介——行级锁

1.行级锁概念及分类 可通过以下语句查看意向锁和行锁的加锁情况&#xff1a; select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;InnoDB的行锁是针对于索引加的锁&#xff0c;不通过索引条件检索数据&#xff0…

短视频矩阵营销系统技术开发者开发笔记分享

一、开发短视频seo抖音矩阵系统需要遵循以下步骤&#xff1a; 1. 确定系统需求&#xff1a;根据客户的需求&#xff0c;确定系统的功能和特点&#xff0c;例如用户注册登录、视频上传、视频浏览、评论点赞等。 2. 设计系统架构&#xff1a;根据系统需求&#xff0c;设计系统的…

【141. 环形链表】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#x…

Android 测试

工程目录图 1- Espresso 2- uiautomator Espresso 文档UI Automator文档ui-automator 英文文档 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 代码&#xff1a;testespresso 参考文献 Android 利用 espre…

“RWEQ+”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践

土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2&#xff0c;占国土总面积的16.7%&#xff0c;严重影响这些地区的资源开发和社会经…

Java的第十六篇文章——枚举、反射和注解(后期再学一遍)

目录 1. 枚举 1.1 学习目标 1.2 内容讲解 1.2.1 枚举的概述 1.2.2 为什么要使用枚举 1.2.3 作用 1.2.4 格式 2. 反射 2.1 学习目标 2.2 内容讲解 2.2.1 类加载&#xff08;了解&#xff09; 2.2.2 类的加载过程 2.2.3 类的初始化 2.2.4 类的加载器 2.2.5 Java系…

7年经验之谈 —— 浅谈web性能测试

什么是性能测试&#xff1f; web性能应该注意些什么&#xff1f; 性能测试&#xff0c;简而言之就是模仿用户对一个系统进行大批量的操作&#xff0c;得出系统各项性能指标和性能瓶颈&#xff0c;并从中发现存在的问题&#xff0c;通过多方协助调优的过程。而web端的性能测试…

9.容器服务更新和发现

文章目录 容器服务更新和发现服务发现consul概念关键特性总结 部署consul架构初始化部署群集查看 部署registrator服务器consul-template 模板文件consul多节点 容器服务更新和发现 服务发现 什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务…

吃透《西瓜书》第三章 线性模型:对数几率回归

&#x1f349; 吃瓜系列 教材&#xff1a;《机器学习》 周志华著 &#x1f552;时间&#xff1a;2023/7/26 目录 一、对数几率回归 1.1 定义和基本思想 1.2 对数记录回归建模 1.3 广义线性模型 1.3.1 指数族分布 1.3.2 广义线性模型的三条假设 1.4 对数几率回归的广义线…

百城巡展 | 人大金仓7月携手全国伙伴赋能“一带一路”沿线区域协同创新

盛夏7月&#xff0c;人大金仓“百城巡展”来到西宁、乌鲁木齐、银川、拉萨&#xff0c;携手核心伙伴、用户&#xff0c;打造科技创新合作平台&#xff0c;不断打磨数据库领域中国方案&#xff0c;赋能“一带一路”沿线区域协同创新&#xff0c;助力信创产业高质量发展&#xff…

【C++】Day7 标准莫板库

1. 实现vector相关函数 #include <iostream>using namespace std;template <typename T> class Myvector { private:T* first;T* last;T* end; public:Myvector(int size 10){ //构造函数this->first new T[size];this->last this->first;this-&g…

【计算机视觉中的 GAN 】 - 条件图像合成和 3D 对象生成(2)

一、说明 上文 【计算机视觉中的 GAN 】或多或少是GANs&#xff0c;生成学习和计算机视觉的介绍。我们达到了在 128x128 图像中生成可区分图像特征的程度。但是&#xff0c;如果你真的想了解GAN在计算机视觉方面的进展&#xff0c;你肯定必须深入研究图像到图像的翻译。…

【广州华锐互动】自来水厂净水流程3D模拟还原有哪些作用?

自来水厂净水流程3D模拟还原是一种新型的培训方式&#xff0c;它通过虚拟现实技术&#xff0c;将自来水工艺流程以三维立体的形式呈现出来&#xff0c;为学员提供直观、真实的学习体验。这种培训方式具有以下意义&#xff1a; 首先&#xff0c;自来水厂净水流程3D模拟还原可以…