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
脚本功能说明
-
全量备份:第一次运行脚本时,会执行全量备份,备份整个数据库。
-
增量备份:在全量备份的基础上,后续运行脚本时会执行增量备份,仅备份自上次备份以来更改或新增的数据。
-
自动任务:可以通过
cron
定时任务设置脚本每小时或更短时间自动执行。
使用方法
-
安装
innobackupex
:-
如果未安装
innobackupex
,可以通过以下命令安装(以Ubuntu为例):sudo apt-get update sudo apt-get install percona-xtrabackup-24
-
-
配置脚本:
-
修改脚本中的
BAKDIR
(备份目录)、CONF
(MySQL配置文件路径)、passwd
(MySQL密码)等参数以适配您的环境。
-
-
设置定时任务:
-
使用
cron
设置定时任务,每小时自动执行脚本:crontab -e
-
添加以下内容(假设脚本保存为
mysql_backup.sh
):0 * * * * /bin/bash /path/to/mysql_backup.sh
-
保存并退出。
-
注意事项
-
备份目录权限:确保备份目录有适当的权限,以便
innobackupex
可以写入文件。 -
MySQL配置:确保MySQL配置文件路径和用户权限正确。
-
备份恢复:增量备份需要结合全量备份才能完整恢复数据,请确保备份文件完整且安全存储。