摘要:本文介绍了如何使用 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_schema
、mysql
、performance_schema
和sys
。DBS
:使用mysql
命令获取所有非系统数据库的列表。- 对于每个数据库
db
:TABS
:使用mysql
命令获取该数据库中的所有表的列表。- 如果备份目录不存在,则创建一个新的备份目录。
- 使用
mysqldump
命令备份整个数据库,并将备份文件压缩并存储到相应的备份目录中。 - 对于每个表
tab
:- 使用
mysqldump
命令备份该表,并将备份文件压缩并存储到相应的备份目录中。
- 使用
四、运行脚本
[root@master node1]# sh bak_v2.sh
脚本将自动备份每个数据库和它们的表,并将备份文件按照数据库和表的层次结构存储在指定的备份目录中。
五、验证
用tree命令查看,已完成备份