【SHELL脚本】MYSQLDUMP备份数据库,含忽略数据表

背景介绍:项目的数据库十分重要,必须保证数据不能丢失。项目组的数据库为mysql5.7.12,采用备份工具mysqldump

开发需求:

  1. 备份指定多个数据库

  2. 部分数据库的部分数据表需要指定忽略

  3. 打包上传到go-FastDFS文件管理器

下面为脚本代码:

#!/bin/bash

# 数据库连接配置
mysql_host="10.6.111.10"
mysql_user="root"
mysql_password="xxxxx"
# 需要备份的数据库。不同数据库以空格分隔,同一数据库中需要忽略备份的多个表以.号连接。如:数据库名1.数据表名1.数据表名2 数据库名2.数据表名1.数据表名2
backup_databases="demo nacos xxl_job_xujunwei.xxl_job_log.xxl_job_user"

# 当前日期
curr_date=$(date +%Y%m%d)
backup_dir="${curr_date}"

# 上传文件服务器配置
upload_host="10.10.110.10"
upload_port="8080"
upload_scene="mysql"
upload_group="group1/upload"


# 生成命令以忽略部分表的备份,如--ignore-table=xxl_job_xujunwei.xxl_job_user
function build_ignore_table_name(){
    database_table=$@
    arr=($(echo $database_table | tr "." "\n"))
    database=${arr[0]}
    ignore_key="--ignore-table="
    ignore_table=""
    # 遍历拼接--ignore-table字段
    for((i=1; i<${#arr[@]};i++))
    do
        str="$ignore_key$database.${arr[$i]}"
        ignore_table="$str $ignore_table"
    done
}


echo "* 备份数据库信息,并上传到文件服务器。*" >> backup.log

# 判断文件夹是否存在,不存在则创建
mkdir -p ${backup_dir}



echo -e "\n当前日期${curr_date},开始备份数据库:" >> backup.log

# 遍历备份数据库
for database_table in ${backup_databases}
do
    # 获取数据库名称    
    str_arr=($(echo $database_table | tr "." "\n"))
    database=${str_arr[0]}

    # 查看是否包含“.”符号
    contain_str=$(echo $database_table | grep "\.")

    # 若没有包含“.”符号,则完整备份该数据库;否则包含“.”符号,则忽略部分数据表的备份
    if [ -z "$contain_str" ]; then
        # echo "等于空,说明不包含. 应执行完整备份" --set-gtid-purged=OFF会记录binlog日志,以便恢复主库时,主从同步
        mysqldump -h ${mysql_host} -p${mysql_password} -u${mysql_user}  --databases ${database} --ssl-mode=disabled --single-transaction --column-statistics=0 --set-gtid-purged=OFF >./${backup_dir}/${database}_${curr_date}.sql
    else
        # echo "不等于空,则执行忽略表的备份"
        # 调用函数,生成忽略表的命令
        build_ignore_table_name ${database_table}
        mysqldump -h ${mysql_host} -p${mysql_password} -u${mysql_user}  --databases ${database} $ignore_table --ssl-mode=disabled --single-transaction --column-statistics=0 --set-gtid-purged=OFF >./${backup_dir}/${database}_${curr_date}.sql
    fi
done


# 打包压缩以便备份
tar -jcf ${curr_date}.tar ./${backup_dir}/*.sql
echo -e "\n${curr_date}.tar 打包压缩完成" >> backup.log


# 上传压缩的备份文件到go-fastDFS
curl -F scene=${upload_scene} -F file=@./${curr_date}.tar http://${upload_host}:${upload_port}/${upload_group}

# 判断返回状状态,是否上传成功
if [  $? -eq 0 ]; then
    echo -e "\n${curr_date}.tar上传完成。" >> backup.log
else
    echo -e "\n${curr_date}.tar上传失败,请校验" >> backup.log
fi

注:本脚本主要放容器中运行,可在容器中配置参数和定时执行时间。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值