博客
关于我
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 Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    Mysql Row_Format 参数讲解
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>
    MySQL Server 5.5安装记录
    查看>>
    mysql slave 停了_slave 停止。求解决方法
    查看>>
    MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
    查看>>
    mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
    查看>>
    mysql Timestamp时间隔了8小时
    查看>>
    Mysql tinyint(1)与tinyint(4)的区别
    查看>>
    mysql union orderby 无效
    查看>>
    mysql where中如何判断不为空
    查看>>
    mysql workbench6.3.5_MySQL Workbench
    查看>>
    MySQL Workbench安装教程以及菜单汉化
    查看>>
    MySQL Xtrabackup 安装、备份、恢复
    查看>>
    mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
    查看>>
    MySQL _ MySQL常用操作
    查看>>
    MySQL – 导出数据成csv
    查看>>