文档首页> 通用教程> MySQL增量备份脚本:实现全量与增量备份自动化

MySQL增量备份脚本:实现全量与增量备份自动化

发布时间:2024-12-09 01:55        更新时间:2025-02-16 09:36

MySQL增量备份脚本

脚本说明

增量备份是指备份自上次备份之后增加或更改的文件或内容。MySQL本身没有直接提供增量备份功能,但可以通过innobackupex工具实现。以下脚本会自动执行全量备份和增量备份。第一次运行时会执行全量备份和第一次增量备份,之后每次运行都会执行增量备份。

脚本内容

#!/bin/sh

# 脚本作者:RuM
# 脚本日期:2015-07-10

# 备份目录
BAKDIR=/tmp/mysqlbak
BAKDIR_FULL=$BAKDIR/full
BAKDIR_ADD=$BAKDIR/add

# MySQL配置文件路径
CONF=/etc/my.cnf

# MySQL密码
passwd=123456

# innobackupex工具路径
INNOBACKUPEX=/usr/bin/innobackupex

# 检查innobackupex是否已安装
if [ -f "$INNOBACKUPEX" ]; then
    # 检查备份目录是否存在,如果不存在则创建
    if [ -d "$BAKDIR" ]; then
        echo "备份目录已存在,继续执行备份。"
    else
        echo "备份目录不存在,正在创建备份目录。"
        mkdir -p $BAKDIR_FULL
        mkdir -p $BAKDIR_ADD
    fi

    # 检查是否已经执行过全量备份
    files=$(ls $BAKDIR_FULL)
    if [ -z "$files" ]; then
        echo "未检测到全量备份,开始执行全量备份。"
        # 执行全量备份
        $INNOBACKUPEX --defaults-file=$CONF --user=root --password=$passwd $BAKDIR_FULL
        FULLNAME=$(ls -lt $BAKDIR_FULL | sed -n 2p | awk '{print $9}')
        echo "全量备份完成,开始执行第一次增量备份。"
        # 执行第一次增量备份
        $INNOBACKUPEX --defaults-file=$CONF --user=root --password=$passwd --incremental-basedir=$BAKDIR_FULL/$FULLNAME/ --incremental $BAKDIR_ADD
    else
        echo "检测到全量备份,开始执行增量备份。"
        # 获取最近一次增量备份的目录
        ADDNAME=$(ls -lt $BAKDIR_ADD | sed -n 2p | awk '{print $9}')
        # 执行增量备份
        $INNOBACKUPEX --defaults-file=$CONF --user=root --password=$passwd --incremental-basedir=$BAKDIR_ADD/$ADDNAME/ --incremental $BAKDIR_ADD
    fi
else
    echo "innobackupex未安装,请先安装innobackupex工具。"
fi

脚本功能说明

  1. 全量备份:第一次运行脚本时,会执行全量备份,备份整个数据库。
  2. 增量备份:在全量备份的基础上,后续运行脚本时会执行增量备份,仅备份自上次备份以来更改或新增的数据。
  3. 自动任务:可以通过cron定时任务设置脚本每小时或更短时间自动执行。

使用方法

  1. 安装innobackupex
    • 如果未安装innobackupex,可以通过以下命令安装(以Ubuntu为例):
      sudo apt-get update
      sudo apt-get install percona-xtrabackup-24
  2. 配置脚本
    • 修改脚本中的BAKDIR(备份目录)、CONF(MySQL配置文件路径)、passwd(MySQL密码)等参数以适配您的环境。
  3. 设置定时任务
    • 使用cron设置定时任务,每小时自动执行脚本:
      crontab -e
    • 添加以下内容(假设脚本保存为mysql_backup.sh):
      0 * * * * /bin/bash /path/to/mysql_backup.sh
    • 保存并退出。

注意事项

  • 备份目录权限:确保备份目录有适当的权限,以便innobackupex可以写入文件。
  • MySQL配置:确保MySQL配置文件路径和用户权限正确。
  • 备份恢复:增量备份需要结合全量备份才能完整恢复数据,请确保备份文件完整且安全存储。