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

相关推荐
杨云龙UP44 分钟前
SQL Server2022部署:Windows Server 2016下安装、SSMS配置、备份还原与1433端口放通全流程_20260508
运维·服务器·数据库·sql·sqlserver·2022
梦想与想象-广州大智汇1 小时前
自建docker加速镜像,使用 Cloudflare Workers/Pages 部署加速教程
运维·docker·容器
枳实-叶1 小时前
【Linux驱动开发】第四天:dmesg日志全解+驱动加载失败极速排查
linux·运维·驱动开发
武超杰1 小时前
Nginx从入门到精通
运维·nginx
weixin_704266052 小时前
Nginx 反向代理 + 6 种负载均衡策略
运维·nginx
fish_xk3 小时前
Linux开方工具
linux·运维·服务器
中科三方5 小时前
输入域名后无法访问?教你快速区分域名解析问题与服务器问题
运维·服务器
internet Boy5 小时前
桌面运维面试常见问题及标准答案(完整版)
运维
liuluyang5306 小时前
linux kernel CONFIG_KCMP解析
linux·运维·服务器