一、查看当前数据库以及数据表
如何除去Datebase标题字样以及系统自带的数据库呢?可以使用以下命令
mysql -uroot -p'#BenJM123' -e 'show databases' -N | egrep -v "information_schema|mysql|performance_schema|sys"
剩下的两个就是用户自己创建的表啦,我们要备份的就是这两个数据库中的数据
二、编写脚本
源码如下
#!/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数据库
删除掉了,只剩下系统自带的那几个数据库
开始还原
我们就直接选择用库的备份文件还原库,由于是压缩的备份文件,所以使用压缩还原
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
现在来查看还原情况
最后没有问题,数据还原成功