Mariadb、Mysql 自动全量增量备份脚本

脚本逻辑:

  1. 基于mariabackup工具,使用crontab配置 0 */1 * * * /root/backup/backup.sh 实现每小时运行
  2. 脚本运行时,会检测当天是否已经有过备份,若否则进行一次全量备份并将备份路径写入config.ini文件中
  3. 脚本再次运行时,会从config.ini读取上一次的备份路径,并在上一次备份的基础上进行增量备份,同样在config.ini中记录路径
  4. 脚本在/root/backup目录下以 yyyyMMdd格式创建每天的任务,目录中会按顺序生成 full_hhmmss及incr_hhmmss格式的子目录,分别存放当天的第一次全量备份和后面的每一次增量备份
  5. 脚本生成的备份文件存放在本机上,应通过其它任务或工具定时将备份结果推送至其它机器,我公司使用群晖的Active Backup for Business套件定时将备份文件传输至备份主机上。

注:这个脚本是给一个小系统用的,脚本中没有单独判断是否执行成功。对RPO要求更高的,理论上可以进一步减少执行间隔。


备份时若想略过指定表,可在mariabackup 上使用 --databases-exclude=“example.table1 example.table2”,更多细节见:Mariabackup

#!/bin/bash

#####################################################################
#    备份频率:每天全量备份,每小时增量备份                             #
#####################################################################

# 备份文件存放目录
base_dir="/root/backup"
# 用户名
backup_u="mariabackup"
# 用户密码
backup_p="mariabackup"

base_date="$(date +'%Y%m%d')"

if [ ! -d "$base_dir/$base_date" ]; then
  echo "全量备份..."
  # 当天第1次:全量备份
  today_base="$base_dir/$base_date/full_$(date +'%H%M%S')"
  mkdir -p "$today_base"
  mariabackup -u"$backup_u" -p"$backup_p" --backup --target-dir="$today_base"
  echo "$today_base" >> "$base_dir/$base_date/config.ini"
else
  # 当天第N次:增量备份
  last_dir=$(tail -n 1 "$base_dir/$base_date/config.ini")
  incr_dir="$base_dir/$base_date/incr_$(date +'%H%M%S')"
  mariabackup -umariabackup -pmariabackup --backup --target-dir="$incr_dir" --incremental-basedir="$last_dir"
  echo "$incr_dir" >> "$base_dir/$base_date/config.ini"
  echo "increm backup successful . based on $last_dir"
fi

# 删除7天以上的备份
find "$base_dir" -type d -mtime +3 | xargs rm -r

恢复第一步,还原每一次的增量备份(预处理):

-- 预恢复 full
mariabackup --prepare --target-dir=/root/backup/20231210/full_000000
-- 预恢复第一次增量(在全量备份的基础上)
mariabackup --prepare --target-dir=/root/backup/20231210/full_000000 --incremental-dir=/root/backup/20231210/incr_010000
-- 预恢复后续备份(在上一次增量的基础上)
mariabackup --prepare --target-dir=/root/backup/20231210/incr_010000 --incremental-dir=/root/backup/20231210/incr_020000
-- 有多少个增量就要按顺序执行多少次

恢复第二步,正式恢复

--   停止服务
systemctl stop mysqld
-- 清空数据
mv -r /var/lib/mysql/ /var/lib/mysql_backup
mkdir /var/lib/mysql/
-- 正式恢复
mariabackup --copy-back --target-dir=/root/backup/20231210/full_000000
-- 恢复仅限
chown -R mysql:mysql /var/lib/mysql/
-- 重启服务
systemctl restart mysqld
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值