shell实现数据库分库分表备份

#!/bin/bash
  2 
  3 backup=/backup/db #存放数据库的位置
  4 nodatabases='information_schema|mycat|performance_schema|sys|mysql' #要过滤的数据库
  5 
  6 mysql  -uroot -predhat -e "show databases"  -N | egrep -v "${nodatabases}" > dbname #将数据库存放在临
    时文件中
  7 
  8 while read line
  9 do
 10    [ -d ${backup}/$line ] || mkdir -p ${backup}/$line  #判断是否有这个目录,若没有则创建
 11    mysqldump -uroot -predhat -B $line | gzip > ${backup}/${line}/${line}.sql.gz #备份数据库,并创建一
    个以数据库为名字的目录
 12     mysql -uroot -predhat -N -e  "show tables from $line" > dbtable #将表存放在临时文件中
 13    while read tb
 14    do
 15       mysqldump -uroot -predhat $line $tb | gzip > ${backup}/${line}/${line}_${tb}.sql.gz #备份表,与
    自身的数据库在同一目录下
 16    done < dbtable #阅读每一行的表
 17 
 18 done < dbname #阅读每一行的数据库
 19         
 20 rm -r dbname dbtable #删除临时文件

运行之后通过tree /backup/db去查看
shell实现数据库分库分表备份_第1张图片
分库分表就成功了

你可能感兴趣的:(数据库,bash)