「Linux」- 配置文件备份

问题描述

在 Linux 下,进行配置文件文件备份。实现的功能:
1)对配置文件进行备份。备份工具可以使用rsync命令的复制功能。备份不能使用cp命令,主要是因为配置文件重名或者发生调整时,cp命令无法对原文件进行操作。
2)且能够自动对配置文件进行备份。自动备份可以使用Cron定时任务实现。
3)由版本控制,能切换到指定时间点。版本控制可以使用git。在Rsync同步结束后,执行git提交变更。
3)灾后,能够实现快速恢复服务。使用Rsync进行反向复制即可。

配置文件丢失或者无法恢复,真的非常要命。

需要说明的几点

这里的“配置文件备份”区别于cp file.conf{,.backup}形式的备份。只要是为了解决灾后恢复、配置回滚等问题。

备份是按照配置文件在文件系统中的目录结构进行存储配置的。

解决方案(单机备份)

#1 创建脚本

备份脚本/usr/local/bin/rsync-conf-backup.sh内容如下:

#!/bin/bash

################################################################################
# 服务器配置文件备份
################################################################################
WORKTREE='/srv/backups/sysconf'

########################################
# 执行检查
########################################
echo -n "# check..."
# 创建配置文件保存目录
if [ ! -d "$WORKTREE" ]
then
    echo "# $WORKTREE not exist"
    echo "# creating ${WORKTREE}..."
    mkdir -pv $WORKTREE
fi

cd $WORKTREE

if [ ! -f "$WORKTREE/.rsyncd.filter" ]
then
    echo "# .rsyncd.filter not exist!"
    echo "# creating .rsyncd.filter..."
    cat <<EOF > .rsyncd.filter
################################################################################
# 系统配置文件备份
################################################################################
# 由于要删除备份目录中不存在的文件,所以要对某些文件进行排除
P/ /***/.rsyncd.filter
P/ /***/.git

-/ **
EOF

fi

if [ ! -d "$WORKTREE/.git" ]
then
    echo "# .git/ not exist!"
    echo "# git init..."
    git init
fi

echo " done"

########################################
# 进行同步
########################################
echo -n "# rsync..."

# 执行同步
TMPFILE="$(mktemp)"
echo "####### rsync log start..." >> $TMPFILE
rsync -avz --delete-excluded  \
      --filter='merge /srv/backups/sysconf/.rsyncd.filter' / . >> $TMPFILE
echo "####### rsync log end..." >> $TMPFILE

echo " done"

########################################
# 进行版本控制
########################################
echo -n "# git..."

# 进行版本控制
git add .
git commit --quiet --file=$TMPFILE &>/dev/null

echo " done"

可以单独执行。

#2 配置定时任务

将其添加到Cron的定时任务:
在Debian发行版中:ln -s /usr/local/bin/rsync-conf-backup.sh /etc/cron.hourly/rsync-conf-backup

或者根据自己的实际情况配置/etc/crontab配置文件。

#3 指定需要备份的文件

日后的任务就相对简单一些,只需要配置.rsyncd.filter文件即可,在这其中指定需要配置备份的文件。

注意事项

该备份只备份到了单机上。如果要备份到不同的机器上,可以:

  • 使用Rsync同步到其他主机;
  • 将备份目录挂载到网络文件系统上;

这并不是最佳实践,以为这个方法并不适用于主机集群。要是有十几二十几台机器就不能这么搞了。

更进一步(多机备份)

单击备份的方案很显然不适用于多台主机。下面是我目前正在使用的多机备份方案:

操作流程如下:

  • 在Test Server上修改配置;
  • 配置修改、测试通过后,使用Rsync推送到Repo。并在Repo上进行版本控制;
  • 然后使用PSSH配合Rsync将Repo上的配置推送到其他主机上;