运维高级--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命令查看目录树形结构

相关推荐
<但凡.43 分钟前
Linux修炼:库制作与原理(一)
linux·运维·服务器
Maple_land2 小时前
编译器的“隐形约定”与本地变量:解锁Linux变量体系的关键密码
linux·运维·服务器·c++·centos
小蜜蜂爱编程3 小时前
Ubuntu无法开机Failed to activate swap /swapfile
linux·运维·ubuntu
阿巴~阿巴~3 小时前
CPU 指令集、权限与用户态内核态机制
linux·运维·服务器·指令集·权限·用户态内核态
小涵4 小时前
企业SRE/DevOps向的精通Linux课程培训课程
linux·运维·devops·1024程序员节
航Hang*4 小时前
第1章:初识Linux系统——第8节:查看/修改权限控制和ACL
linux·运维·服务器·笔记·操作系统
一个处女座的程序猿O(∩_∩)O4 小时前
深入浅出 SSE:实现服务器向客户端的单向实时通信
运维·服务器
捷智算云服务4 小时前
DGX A100服务器常见故障解析与维修攻略
运维·服务器
安当加密4 小时前
基于TDE透明加密实现异地服务器间文件自动加密传输的实践与思考
运维·服务器
悠悠121384 小时前
Jenkins 从0基础到有点基础——如何安装
运维·jenkins