编写shell脚本,利用mysqldump实现mysql数据库分库分表备份

摘要:本文介绍了如何使用 Shell 脚本和 mysqldump 工具实现 MySQL 数据库的分库分表备份。通过编写脚本,我们可以自动化备份多个数据库以及每个数据库中的所有表,并将备份文件按照数据库和表的层次结构进行存储。

一、准备工作

        在开始编写 Shell 脚本之前,请确保已经安装了 MySQL 数据库和 mysqldump 工具。同时,你需要创建一个用于存储备份文件的目录。

二、编写shell脚本

创建一个新的文件,例如 bak_v1.sh

#!/bin/bash

# 定义备份目录和连接选项
BAK_DIR="/backup/db"
CMD_OPT="-uroot -p030429"
EX_DB="information_schema|mysql|performance_schema|sys"

# 获取所有数据库(排除系统数据库)
DBS=$(mysql ${CMD_OPT} -N -e 'show databases' | egrep -v ${EX_DB})

# 备份每个数据库及其表
for db in $DBS
do
  # 获取数据库中的所有表
  TABS=$(mysql ${CMD_OPT} -N -e "show tables from $db")

  # 创建数据库备份目录(如果不存在)
  [ -d ${BAK_DIR}/$db ] || mkdir -p ${BAK_DIR}/$db

  # 备份整个数据库
  mysqldump ${CMD_OPT} -B $db | gzip > ${BAK_DIR}/$db/${db}_$(date +%F).sql.gz

  # 备份每个表
  for tab in $TABS
  do
    mysqldump ${CMD_OPT} $db $tab | gzip > ${BAK_DIR}/$db/${db}_${tab}_$(date +%F).sql.gz
  done
done

三、解释脚本代码

  • BAK_DIR:指定备份文件存储的目录路径。
  • CMD_OPT:指定 MySQL 连接选项,包括用户名和密码。
  • EX_DB:指定要排除的系统数据库,例如 information_schemamysqlperformance_schema 和 sys
  • DBS:使用 mysql 命令获取所有非系统数据库的列表。
  • 对于每个数据库 db
    • TABS:使用 mysql 命令获取该数据库中的所有表的列表。
    • 如果备份目录不存在,则创建一个新的备份目录。
    • 使用 mysqldump 命令备份整个数据库,并将备份文件压缩并存储到相应的备份目录中。
    • 对于每个表 tab
      • 使用 mysqldump 命令备份该表,并将备份文件压缩并存储到相应的备份目录中。

四、运行脚本

[root@master node1]# sh bak_v2.sh 

脚本将自动备份每个数据库和它们的表,并将备份文件按照数据库和表的层次结构存储在指定的备份目录中。

五、验证

用tree命令查看,已完成备份

编写shell脚本,利用mysqldump实现mysql数据库分库分表备份_第1张图片

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