当前位置: 首页 > news >正文

shell脚本备份mysql数据库和库下表

目录

注意:

一.脚本内容

二.执行效果

三.创建定时任务


注意:

  • 以下为对mysql5.7.42版本数据库备份shell脚本参考
  • 运行备份的机器请确认mysqldump版本>5.7,否则备份参数--set-gtid-purged=OFF无效,考虑到一般数据库节点和备份节点不为同一节点,以下链接为mysql5.7.43的rpm安装包,解压后"yum localinstall -y mysql-community* 即可"

通过网盘分享的文件:mysql-5.7.43-1.el7.x86_64.rpm-bundle.tar
链接: https://pan.baidu.com/s/1C1dK_zeS0-p7ePih1ff4tg?pwd=cer9 提取码: cer9

  • 该脚本目前是对于整库、库下各表都做了备份,若不需要对各表进行备份,去除关于备表的for循环即可。

一.脚本内容

#!/bin/bash
# 定义连接mysql的用户、密码、地址、端口
mysql_user="root"
mysql_pass="SLBmysql2025"
mysql_host="192.168.2.199"
mysql_port="20307"
# 定义排除数据库变量
exdbname='information_schema|performance_schema|sys|mysql'
date="$(date +"%Y-%m-%d")"
# 定义备份路径变量
bak_path="/data/mysql/back"
# 定义日志保留天数
retain_days=7
# 定义备份参数
dump_opts='--set-gtid-purged=OFF --single-transaction --no-autocommit'
# 检查备份路径是否存在,不存在则创建
if [ ! -d "$bak_path" ]; then
    mkdir -p "$bak_path"
fi
# 获取数据库列表,排除指定数据库
#db_list=$(mysql -u$mysql_user -p$mysql_pass -h$mysql_host -P$mysql_port -e 'SHOW DATABASES;' 2>/dev/null | sed '1d' | grep -Ev "^($exdbname)$")
db_list=$(mysql -u$mysql_user -p$mysql_pass -h$mysql_host -P$mysql_port -Bse 'SHOW DATABASES;' 2>/dev/null | grep -Ev "^($exdbname)$")
# 检查是否获取到数据库列表
if [ -z "$db_list" ]; then
    echo "未获取到有效的数据库列表,请检查 MySQL 连接和权限。"
    exit 1
fi
# 对每个数据库进行操作
for db in $db_list; do
    # 创建数据库对应的备份目录
    db_backup_dir="$bak_path/$date/$db"
    SIZE=$(mysql -u$mysql_user -p$mysql_pass -h$mysql_host -P$mysql_port --silent --skip-column-names -e "SELECT ROUND(SUM(data_length) / 1024 / 1024, 0) FROM information_schema.TABLES WHERE table_schema=\"$db\";")
    if [ ! -d "$db_backup_dir" ]; then
        mkdir -p "$db_backup_dir"
    fi
    # 备份整个数据库
    mysqldump -u$mysql_user -p$mysql_pass -h$mysql_host -P$mysql_port $dump_opts -B "$db" 2>/dev/null | gzip > "$db_backup_dir/${db}_$(date +%F).sql.gz"
    if [ $? -ne 0 ]; then
        echo "备份数据库 $db 失败。"
    else
        echo "数据库 $db 备份成功,存放路径 $db_backup_dir/${db}_$(date +%F).sql.gz,大小为 $SIZE M"
    fi
    
    # 获取数据库中的表列表
    tb_list=$(mysql -u$mysql_user -p$mysql_pass -h$mysql_host -P$mysql_port -N -e "SHOW TABLES FROM $db" 2>/dev/null)
    # 检查是否获取到表列表
    if [ -z "$tb_list" ]; then
        echo "未获取到数据库 $db 中的表列表。"
        continue
    fi
    # 对每个表进行操作
    for tb in $tb_list; do
        # 备份单个表
        mysqldump -u$mysql_user -p$mysql_pass -h$mysql_host -P$mysql_port $dump_opts "$db" "$tb" 2>/dev/null | gzip > "$db_backup_dir/${db}_${tb}_$(date +%F).sql.gz"
        if [ $? -ne 0 ]; then
            echo "备份表 $db.$tb 失败。"
        else
            echo "表 $db.$tb 备份成功,存放路径 $db_backup_dir/${db}_${tb}_$(date +%F).sql.gz"
        fi
    done
done

find $bak_path -mtime +$retain_days -exec rm -f {} \;

二.执行效果

[root@master01 mysql]# bash sh/backup.sh 
mysql: [Warning] Using a password on the command line interface can be insecure.
数据库 slb 备份成功,存放路径 /data/mysql/back/2025-02-16/slb/slb_2025-02-16.sql.gz,大小为 0 M
表 slb.students 备份成功,存放路径 /data/mysql/back/2025-02-16/slb/slb_students_2025-02-16.sql.gz
mysql: [Warning] Using a password on the command line interface can be insecure.
数据库 test 备份成功,存放路径 /data/mysql/back/2025-02-16/test/test_2025-02-16.sql.gz,大小为 0 M
表 test.employees 备份成功,存放路径 /data/mysql/back/2025-02-16/test/test_employees_2025-02-16.sql.gz

三.创建定时任务

[root@master01 sh]# tail -1 /etc/crontab 
0 2 * * * root /usr/bin/bash /data/mysql/sh/mysql_backup.sh

相关文章:

  • 算法刷题--哈希表--字母异位词和两个数组的交集
  • linux运行kettle 遇到问题汇总
  • 【区块链】零知识证明基础概念详解
  • WebMvcConfigurer 介绍
  • 【硬核对比】C语言 vs MATLAB:从内存管理到矩阵运算的降维打击
  • Docker+Ollama+WebUI+AnythingLLM,构建企业本地AI大模型
  • 车规MCU处理器选择Cortex-M7还是Cortex-R52?
  • GDB QUICK REFERENCE (GDB 快速参考手册)
  • deepseek多列数据对比,联想到excel的高级筛选功能
  • 提升顾客转化率:融合2+1链动模式AI智能名片与S2B2C商城小程序的创新策略
  • OnlyOffice编辑器下载失败排查与解决方案
  • M4Pro基于homebrew安装Redis踩坑记录
  • 微信小程序之mobx-miniprogram状态管理
  • [leetcode] 动态规划 - 最大子数组和
  • Spring Boot 实战:轻松实现文件上传与下载功能
  • 深入理解 Vue3 中 ref 与 reactive 的区别及应用
  • matlab 柴油机冷却系统仿真计算
  • Cursor笔记
  • vue3.x 的 toRef详细解读
  • win10 系统 自定义Ollama安装路径 及模型下载位置
  • 三大猪企一季度同比均实现扭亏为盈,营收同比均实现增长
  • 铁路上海站今日预计发送旅客65.8万人次,同比增长超16%
  • 万科:一季度营收近380亿元,销售回款率超100%
  • 游客曝九寨沟打网约车被出租车围堵,官方:前者违规,后者做法不对
  • 丁俊晖连续7年止步世锦赛16强,中国军团到了接棒的时候
  • 法治日报调查直播间“杀熟”乱象:熟客越买越贵,举证难维权不易