博客
关于我
mysql mysqldump数据备份和增量备份(转)
阅读量:797 次
发布时间:2023-04-04

本文共 2694 字,大约阅读时间需要 8 分钟。

MySQL 数据备份与恢复:全量与增量备份方案

在实际操作中,MySQL 数据库的备份与恢复是至关重要的操作。通过合理设计备份策略,可以有效避免数据丢失风险。本文将详细介绍如何利用 Shell 脚本实现 MySQL 的全量备份与增量备份,并结合 crontab 进行自动化调度。


1. 全量备份策略

1.1 全量备份脚本

全量备份的主要目的是对数据库进行一次完整的数据备份,通常在数据库较为空的时间段进行。以下是一个典型的全量备份脚本示例:

#!/bin/bash# 脚本名称脚本名: DBFullyBak.sh# 脚本用途用 mysqldump 实现全量备份,将所有数据库的数据备份到指定目录,并记录操作日志。# 脚本路径备份目录: /home/mysql/backup日志文件: /home/mysql/backup/bak.log# 获取当前日期日期: $(date +%Y%m%d)# 开始时间与结束时间开始时间: $(date +"%Y年%m月%d日 %H:%M:%S")结束时间: $(date +"%Y年%m月%d日 %H:%M:%S")# 进入备份目录cd $备份目录# 生成备份文件备份文件名: $日期.sql压缩文件名: $日期.sql.tgz# 执行 mysqldump 命令mysqldump -uroot -p123456 --quick --all-databases --flush-logs --delete-master-logs --single-transaction > $备份文件名# 压缩备份文件tar czvf $压缩文件名 $备份文件名# 删除临时文件rm -f $备份文件名# 记录日志echo "开始:$开始时间 结束:$结束时间 $压缩文件名 成功!" >> $日志文件# 清理临时目录cd $备份目录/dailyrm -f *

1.2 脚本执行说明

  • mysqldump:用于生成完整的数据库备份。

    • -uroot:以数据库 root 用户执行备份。
    • -p123456:指定数据库密码。
    • --quick:减少输出信息,提高备份效率。
    • --all-databases:备份所有数据库。
    • --flush-logs:在备份完成后刷新日志文件。
    • --delete-master-logs:删除旧的主日志文件。
    • --single-transaction:确保备份在单个事务中完成,避免数据不一致。
  • 压缩与清理:将生成的 SQL 文件压缩为 .tgz 格式,并删除原文件以节省空间。

  • 日志记录:通过 bak.log 文件记录备份操作的时间和结果,便于追踪和验证。


  • 2. 增量备份脚本

    2.1 增量备份脚本

    增量备份的核心思想是基于前一次备份的基础上,仅复制自上次备份以后的数据变化。以下是一个增量备份脚本的示例:

    #!/bin/bash# 脚本名称脚本名: DBDailyBak.sh# 脚本用途实现每日对 MySQL 数据库的增量备份。# 脚本路径备份目录: /home/mysql/backup/daily数据目录: /home/mysql/data日志文件: /home/mysql/backup/bak.log# 获取当前日期日期: $(date +%Y%m%d)# 获取当前 binlog 文件数量binlog 文件名: mysql-bin.index当前 binlog 数量: $(wc -l $binlog 文件名 | awk '{print $1}')# 执行增量备份for 文件 in $(cat $binlog 文件名):{    base=$(basename $文件)    NextNum=$当前 binlog 数量 + 1    if [ $NextNum -eq $当前 binlog 数量 ]    {        echo "$base skip!" >> $日志文件    }    else    {        目标路径=$备份目录/$base        if [ -e $目标路径 ]        {            echo "$base exist!" >> $日志文件        }        else        {            cp $数据目录/$base $目标路径            echo "$base copying!" >> $日志文件        }    }}# 记录日志echo "开始:$(date +"%Y年%m月%d日 %H:%M:%S") $NextNum Bakup success!" >> $日志文件

    2.2 脚本执行说明

  • 获取 binlog 文件数量:通过 mysqladmin flush-logs 命令生成新的 binlog 文件。

  • 遍历 binlog 文件:通过 cat 读取当前 binlog 文件列表,逐一处理。

  • 判断文件状态

    • 如果当前 binlog 文件不存在,说明这是一个全量备份的第一次执行,直接复制所有 binlog 文件。
    • 如果 binlog 文件已存在,比较文件名和计数器,确定是否需要增量备份。
  • 日志记录:记录每个 binlog 文件的状态变化(如 skip!exist!copying!)。


  • 3. 设置自动化任务(crontab)

    为了实现自动化备份,我们可以使用 crontab 定期调度备份脚本的执行。

    3.1 crontab 配置

    # 每周日凌晨3:00执行全量备份0 3 * * 0 /root/DBFullyBak.sh > /dev/null 2>&1# 每周一至周六凌晨3:00执行增量备份0 3 * * 1-6 /root/DBDailyBak.sh > /dev/null 2>&1

    3.2 配置说明

  • 全量备份:每周日凌晨3:00运行 DBFullyBak.sh 脚本,生成全量备份文件。

  • 增量备份:工作日(周一至周六)凌晨3:00运行 DBDailyBak.sh 脚本,进行增量备份。


  • 4. 附录:脚本检测与调试

    为了确保脚本的语法正确,可以使用以下命令检测脚本:

    sh -n /root/DBFullyBak.shsh -n /root/DBDailyBak.sh

    通过此命令可以在屏幕上模拟脚本执行过程,检查是否存在语法错误或其他问题。


    通过以上方案,可以实现 MySQL 数据库的全量备份与增量备份,结合 crontab 自动化调度,确保数据安全与高效恢复。

    转载地址:http://wjrfk.baihongyu.com/

    你可能感兴趣的文章
    MySQL 索引连环问题,你能答对几个?
    查看>>
    Mysql 索引问题集锦
    查看>>
    Mysql 纵表转换为横表
    查看>>
    mysql 编译安装 window篇
    查看>>
    mysql 网络目录_联机目录数据库
    查看>>
    MySQL 聚簇索引&&二级索引&&辅助索引
    查看>>
    Mysql 脏页 脏读 脏数据
    查看>>
    mysql 自增id和UUID做主键性能分析,及最优方案
    查看>>
    Mysql 自定义函数
    查看>>
    mysql 行转列 列转行
    查看>>
    Mysql 表分区
    查看>>
    mysql 表的操作
    查看>>
    mysql 视图,视图更新删除
    查看>>
    MySQL 触发器
    查看>>
    mysql 让所有IP访问数据库
    查看>>
    mysql 记录的增删改查
    查看>>
    MySQL 设置数据库的隔离级别
    查看>>
    MySQL 证明为什么用limit时,offset很大会影响性能
    查看>>
    Mysql 语句操作索引SQL语句
    查看>>
    MySQL 误操作后数据恢复(update,delete忘加where条件)
    查看>>