一、环境准备

1.gitlab服务器所在的服务器A(192.168.1.16);

2.备份服务器B(192.168.1.37);

3.已设置gitlab定时在本机备份;

 

二、通过密钥配对方式scp免密传输

1.首先在A机器上生成ssh证书:

ssh-keygen -t rsa

 

执行以上命令时,会让你填写生成私钥公钥的位置,设置密码,注意在这里不要对其进行密码设置,不然执行scp传输命令仍然会让你输入证书的密码!!!

 

2.在A机器上通过cp命令拷贝一份公钥

cd /root/.ssh
cp id_rsa.pub id_rsa.pub.A

 

把A机器上刚刚生成的公钥拷贝一份。

 

3.将A机器的公钥文件传输给B机器

scp /root/.ssh/id_rsa.pub.A root@192.168.1.37:/root/.ssh/

 

4.密钥配对

在B机器上/root/.ssh下创建authorized_keys文件

touch /root/.ssh/authorized_keys

  

把之前从A机器拷贝过来的id_rsa.pub.A文件内容添加B机器的authorized_keys文件中。

cd /root/.ssh/
cat id_rsa.pub.A >> authorized_keys

  

修改B机器中的authorized_keys文件权限(如果不修改也可能会密钥配对失败)

chmod 400 authorized_keys

  

三、定时将备份文件通过scp命令传输到备份机器上

1.创建远程备份脚本

在gitlab服务器上,在 ./root 目录创建auto_backup_to_remote.sh脚本

vim /root/auto_backup_to_remote.sh

  

添加下面的内容,并:wq保存

 

#!/bin/bash

# gitlab 服务器备份路径
LocalBackDir=/var/opt/gitlab/backups

# 远程备份服务器 gitlab备份文件存放路径
RemoteBackDir=/root/gitlab_backup

# 远程备份服务器 登录账户
RemoteUser=root

# 远程备份服务器 IP地址
RemoteIP=(备份服务器B的地址,请你自行修改)

#当前系统日期
DATE=`date +"%Y-%m-%d"`

#Log存放路径
LogFile=$LocalBackDir/log/$DATE.log

# 查找 gitlab本地备份目录下 时间为60分钟之内的,并且后缀为.tar的gitlab备份文件
BACKUPFILE_SEND_TO_REMOTE=$(find $LocalBackDir -type f -mmin -60  -name '*.tar*')

#新建日志文件
touch $LogFile

#追加日志到日志文件
echo "Gitlab auto backup to remote server, start at  $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile
echo "---------------------------------------------------------------------------" >> $LogFile

# 输出日志,打印出每次scp的文件名
echo "---------------------The file to scp to remote server is: $BACKUPFILE_SEND_TO_REMOTE-------------------------------" >> $LogFile


#备份到远程服务器
scp $BACKUPFILE_SEND_TO_REMOTE $RemoteUser@$RemoteIP:$RemoteBackDir

#追加日志到日志文件
echo "---------------------------------------------------------------------------" >> $LogFile

    

修改该文件的权限,以便能让系统正常执行该shell脚本

chmod 777 auto_backup_to_remote.sh

  

创建该脚本日志存放目录

mkdir -p /var/opt/gitlab/backups/log

  

最后一步,通过crontab定时任务定时执行该脚本

crontab -e

  

在这里我设定的是一天两备份,中午和晚上各一次。根据自己需要调整。

10 12 * * * /root/auto_backup_to_remote.sh -D 1
10 19 * * * /root/auto_backup_to_remote.sh -D 1

  

重启crontab让它生效

systemctl restart crond

  

四、在备份服务器定时删除过期的备份文件

因为备份服务器不可能把所有备份的gitlab文件全保留,这时候可以采用定时删除gitlab备份文件的方式解决。

创建目录

mkdir -p /root/gitlab_backup

  

创建过期删除的脚本

vim /root/auto_remove_old_backup.sh

  

把脚本内容写入该文件中

#!/bin/bash

# 远程备份服务器 gitlab备份文件存放路径
GitlabBackDir=/root/gitlab_backup


# 查找远程备份路径下,超过14天且文件后缀为.tar 的 Gitlab备份文件 然后删除
find $GitlabBackDir -type f -mtime +14 -name '*.tar*' -exec rm {} \;

  

修改该脚本的权限。

chmod 777 auto_remove_old_backup.sh

  

添加定时计划

crontab -e

  

设置该脚本定时执行时间

0 0 * * *  /root/auto_remove_old_backup.sh

  

重启crontab

systemctl restart crond

  

以上就是完整的备份啦