运维高级--shell脚本完成分库分表

为什么要进行分库分表

随着系统的运行,存储的数据量会越来越大,系统的访问的压力也会随之增大,如果一个库中的表数据超过了一定的数量,比如说MySQL中的表数据达到千万级别,就需要考虑进行分库分表;

其次随着表数据的不断增大,会发现查询也随着变得缓慢,如果添加索引的话,会发现影响到了新增和删除的性能,如果我们将数据库分散到不同的表上,单表的索引大小就得到了控制,对索引以及表结构的变更会变得很方便和高效;

当数据库实例的吞吐量达到性能的瓶颈时,我们需要扩展数据库实例,让每个数据库实例承担其中一部分数据库的请求,分解总体的大请求量的压力;在数据库进行扩容的时候对应用层的配置改变最少, 就需要在每个数据库实例中预留足够的数据库量

什么是分库分表

简而言之就是数据拆分:将一个表结构分为多个表,或者将一个表数据分片后放入多个表,这些表可以放在同一个数据库里,也可以放到不同的数据库中,甚至可以放到不同的数据库实例中数据拆分的方式

使用shell脚本完成分库操作

以这个数据库为例

复制代码
#!bin/bash
mysql_cmd='-uroot -p123456'  #数据库账号密码
exclude_db='information_schema|performance_schema|sys|mysql' #不用备份的库(数据库自带的那几个)
bak_path=/backup/db #备份到哪个目录
[ -d ${bak_path} ] || mkdir -p ${bak_path} #如果目录不存在就创建
mysql $mysql_cmd -e 'show databases' -N | egrep -v "${exclude_db}" >dbname #获取要备份的库

while read line
do
mysqldump $mysql_cmd --set-gtid-purged=OFF -B $line | gzip > ${bak_path}/${line}_$(date +%F).sql.gz #备
份数据库
done< dbname
rm -f dbname

运行此shell脚本

tree指令显示目录树形结构

使用shell脚本完成分表操作

复制代码
mysql_cmd='-uroot -p123456'  #数据库账号密码
exclude_db='information_schema|performance_schema|sys|mysql' #不需要备份的库
bak_path=/backup/tb  #备份到哪个目录
#获取需要备份的库
mysql ${mysql_cmd} -e 'show databases' -N |egrep -v "${exclude_db}" >dbname 


while read line
do
  [ -d ${bak_path}/$line ] || mkdir -p ${bak_path}/$line  #为每个备份的库创建目录
  #备份库
  mysqldump $mysql_cmd --set-gtid-purged=OFF -B $line | gzip > ${bak_path}/${line}/${line}_$(date +%F).sql.gz 
  mysql -uroot -p123456 -N -e "show tables from $line" >tbname #将表存放在tbname文件中
  while read tb
  do
  #备份表
   mysqldump ${mysql_cmd} --set-gtid-purged=OFF $line $tb | gzip > ${bak_path}/${line}/${line}_${tb}_$(date +%F).sql.gz 
  done <tbname
done< dbname
rm -rf dbname tbname

运行脚本

使用tree命令查看目录树形结构

相关推荐
stolentime4 分钟前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
bush41 小时前
嵌入式linux学习记录四
linux·运维·学习
lihao lihao2 小时前
软硬链接
linux·运维·服务器
TOWE technology2 小时前
智能安防监控系统如何做好防雷?——视频信号SPD综合应用方案解析
运维·服务器·防雷产品·信号保护·信号防雷·spd
楼田莉子2 小时前
Docker学习:Docker介绍及其架构介绍
运维·后端·学习·docker·容器·架构
大明者省3 小时前
IIS 端口绑定正常访问的原理说明与常见误区澄清
运维·服务器·笔记
晚风吹红霞3 小时前
Linux软件包管理器详解 —— yum与apt的使用及软件生态
linux·运维·服务器
曦夜日长4 小时前
Linux系统篇,进程概念(一):计算机体系、操作系统的认识、程序的加载过程
linux·运维·网络
Lv_沐曦4 小时前
Windows磁盘驱动器取消黄色感叹号的方法
运维·windows·bitlocker·黄色感叹号
网络与设备以及操作系统学习使用者5 小时前
零信任架构落地实践详解
运维·网络·学习·架构