mysql的分库分表脚本

目录

一.分库分表优点

1,提高系统的可扩展性和性能:通过分库分表,可以将数据分布在多个节点上,从而提高系统的负载能力和处理性能。

2,精确备份和恢复:分库分表备份可以确保每个数据库和表的数据都得到备份,同时也可以针对需要恢复的具体数据进行恢复操作,提高了备份和恢复的精确性。

3,部分故障隔离:当某个库或表发生故障时,只需恢复受影响的库或表,而不需要恢复整个数据库系统。

二.过程思路

使用mysqldump实现分库分表备份的基本思路如下:

1,确定要备份的数据库列表:首先确定要备份的数据库列表,这些数据库可能是分布在不同的库中。

2,遍历数据库:对于每个数据库,遍历其中的表。

3,备份表:对于每个表,使用mysqldump命令备份表结构和数据到指定的备份文件中。

重复以上步骤:对其他数据库中的表重复执行步骤3,直到所有的数据库和表都备份完成。

脚本实现

sql 复制代码
# MySQL连接信息
db_user="root"
db_password="fu@192.168.128.128"
db_cmd="-u${db_user} -p${db_password}"
#要备份的库
exclude_db="information_schema|mysql|performance_schema|sys|Database"
bak_dir=/backup/db/mysqldump_test/
# 判断备份路径是否存在
[ -d ${bak_dir} ] || mkdir ${bak_dir}
 
# 查找出需要备份的数据库
 mysql \${db_cmd} -e"show databases" -N 2>/dev/null | egrep -v "$exclude_db" > dbtmp
# 循环遍历数据库列表
while read db
do
        #对数据库进行备份
    mysqldump ${db_cmd} --set-gtid-purged=off $db 2>/dev/null | gzip > ${bak_dir}/`date +%F`-$db.sql.gz
        #判断是否备份成功
    if [ $? -eq 0 ]
    then
        echo "database $db is being backed up ... success!"
    else
        echo "database $db is being backed up ... failure!"
    fi
        #根据数据库进行分表备份 
    [ -d ${bak_dir}/$db ] || mkdir -p ${bak_dir}/$db
               # 获取数据库中的表名列表
    mysql ${db_cmd}  $db -e "SHOW TABLES;" | grep -v "Tables_in" > tbtmp
 
    # 循环遍历表名列表
    while read tb
    do
        # 对表进行备份
        mysqldump ${db_cmd} --set-gtid-purged=off $db $tb 2>/dev/null | gzip > ${bak_dir}/$db/`date +%F`-$db-$tb.sql.gz
 
        # 判断是否备份成功
        if [ "$?" -eq 0 ]; then
            echo "Backup of $db.$tb successful!"
        else
            echo "Backup of $db.$tb failed!"
        fi
    done < tbtmp
done < dbtmp

验证

最后,可以用tree命令看看数据库及表对应的结构关系

相关推荐
星恒随风2 小时前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql
无奈笑天下4 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
xiaoye-duck5 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
AllData公司负责人5 小时前
AI大模型数据开发底座系列说明书:AllData集成DB-GPT开源项目建设 AI 多模态分析底座,涵盖模态解析/智能大屏/MCP 扩展!
大数据·数据库·人工智能·gpt·数据采集·数据接入·模态解析
隔窗听雨眠6 小时前
MySQL进程卡死的定位思路与恢复实践
mysql·故障排查·数据库运维
2601_967987376 小时前
Sqlite参考手册
数据库·python·sqlite·api·教程
隔窗听雨眠6 小时前
Oracle日志体系分层结构与故障定位路径
数据库·oracle·故障排查
为思念酝酿的痛6 小时前
C语言操作MySQL
数据库·mysql
ShineWinsu7 小时前
对于Qt:QTabWidget常见属性的解析
开发语言·数据库·c++·qt·浏览器·qtabwidget·标签页
星恒随风17 小时前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql