Shell脚本实战——对MySQL进行分库分表备份

一、查看当前数据库以及数据表


如何除去Datebase标题字样以及系统自带的数据库呢?可以使用以下命令

bash 复制代码
mysql -uroot -p'#BenJM123' -e 'show databases' -N | egrep -v "information_schema|mysql|performance_schema|sys"

剩下的两个就是用户自己创建的表啦,我们要备份的就是这两个数据库中的数据

二、编写脚本

源码如下

bash 复制代码
#!/bin/bash
#********************************************************************
#Author: BenJM
#Date: 2023-07-26
#FileName: Mysql_Bak.sh
#Description: The test script
#********************************************************************


#除去系统自带的库以外,再将存在的数据库名分别保存到dbname文件中
mysql -uroot -p'#BenJM123' -e 'show databases' -N | egrep -v 'information_schema|mysql|performance_schema|sys' > dbname

# 判断是否有/backup/db目录,没有则创建
[ -d /backup/db ] || mkdir -p /backup/db

#一行一行读取dbname中的库名,然后开始备份数据库,进而分别备份数据库中的表
while read line
do
        #备份数据库
        mysqldump -uroot -p'#BenJM123' -B $line | gzip > /backup/db/${line}_$(date +%F).sql.gz

        #分别将数据库中的表名保存到tbname文件中
        mysql -uroot -p'#BenJM123' -e "show tables from $line" -N > tbname

        #判断是否有/backup/db/$line目录,没有则创建
        [ -d /backup/db/$line ] || mkdir /backup/db/$line

        #读取tbname中的表名,备份数据表
        while read line2
        do
                #备份数据表
                mysqldump -uroot -p'#BenJM123' $line $line2 | gzip > /backup/db/$line/${line2}_$(date +%F).sql.gz
        done < tbname
done < dbname

三、检查测试

1.备份检验

运行脚本

查看是否生成备份文件

分库分表备份成功

2.还原检验

删除school和company数据库

删除掉了,只剩下系统自带的那几个数据库

开始还原

我们就直接选择用库的备份文件还原库,由于是压缩的备份文件,所以使用压缩还原

bash 复制代码
gunzip < /backup/db/school_2023-07-26.sql.gz | mysql -uroot -p'#BenJM123' -B
gunzip < /backup/db/company_2023-07-26.sql.gz | mysql -uroot -p'#BenJM123' -B

现在来查看还原情况

最后没有问题,数据还原成功

相关推荐
叼烟扛炮3 小时前
Linux 学习笔记(五十六):IO 多路复用初探——select 的“三宗罪”
linux·服务器·数据库·笔记·学习·php
.痞老板.5 小时前
mysql初阶--数据库基础
数据库·mysql
城北徐宫6 小时前
MySQL约束条件一览
数据库·mysql
码农小河666 小时前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql
ClouGence8 小时前
数据库变更审批困局,被这个开源工具解决了
数据库·开源
TDengine (老段)9 小时前
TDengine IDMP 十大实用功能(9)
大数据·数据库·人工智能·物联网·时序数据库·tdengine·idmp
starrocks_stella10 小时前
EMR Serverless StarRocks Object Table:用 SQL 连接 OSS 文件与多模态 AI
数据库
这个DBA有点耶10 小时前
以为自增ID只是有空洞?聊聊双主架构下无声的“数据覆盖”
数据库·mysql·dba
陈布衣10 小时前
MySQL(1)_MySQL 5.7.21 Linux 安装笔记
linux·笔记·mysql
钱栈up11 小时前
内网全断,怎么核实高炉和烧结系统的数据库对接信息
数据库