当前位置: 首页 > article >正文

手把手教你实现Gitlab远程备份(超详细,图文并茂)

       为防止服务器的磁盘损坏数据无法取出,因此我们得做好代码的备份工作,因此除了每天在Gitlab那台服务器上自动备份之外,还需要将每天的备份文件copy到另外一台文件备份服务器上,已达到双保险的要求。

1.服务器密钥配对,取消scp传输密码限制

       远程手动备份数据费时费力且不及时。最好的方法就是通过脚本实现远程自动互备。但远程无论是通过SSH登陆,还是通过scp拷贝文件都需要输入密码。为了克服这个问题,首先需要实现不需要密码的SSH登陆,这样就可以使用 rsync,scp,rexec等命令来做的远程备份了。

前提:本地服务器:A(gitlab服务器), 远程服务器:B

2.生成密钥对

     假设A,B两服务器,现在需要在A机上用root登陆B机,而不需要输入密码。那我们可按照下面的步骤来做:

  2.1 在本地服务器A上生成rsa证书

    在本地服务器A上生成rsa证书,运行命令:

    ssh-keygen -t rsa

 (1) 生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。

 (2) 因为之前已经有/root/.ssh/id_rsa 文件存在,因此提示你是否覆盖,输入y表示覆盖

(3) 接着会提示输入一个密码,直接回车,让它空着。当然,也可以输入一个密码。

(4) 接着输入确认密码,输入完之后,回车密钥对就生成完了。

在/root/.ssh下生成id_rsa 和 id_rsa.pub 两个文件,

其中公共密钥保存在 /root/.ssh/id_rsa.pub,私有密钥保存在/root/.ssh/id_rsa。

2.2 在本地服务器A上cp生成rsa公钥证书

然后在/root/.ssh下复制备份一份id_rsa.pub 命名为 id_rsa.pub.A,以便拷贝到远程服务器B。

执行cp命令复制

cp id_rsa.pub id_rsa.pub.A

2.3 cp生成rsa公钥证书到远程服务器B

使用scp命令进行远程复制,将A机生成的id_rsa.pub.A拷贝到远程服务器B的/root/.ssh目录下

root@ubuntu4146:~/.ssh# scp /root/.ssh/id_rsa.pub.A root@远程服务器ip:/root/.ssh/

root@远程服务器ip's password:

id_rsa.pub.A     

这里使用scp命令需要输入密码,当我们把下面的第三步执行完毕之后,以后本地服务器A使用scp命令复制文件到远程服务器B的话,就不需要再次输入密码。

3.密钥配对

3.1 创建authorized_keys文件

现在我们在 B 的/root/.ssh下创建authorized_keys文件,使用如下命令

touch authorized_keys

3.2 设置authorized_keys 文件

通过 cat 命令 把id_rsa.pub.A 追写到 authorized_keys 文件中,命令依次如下:

cat id_rsa.pub.A >> authorized_keys

3.3 修改authorized_keys文件的权限

执行如下命令,修改authorized_keys文件的权限

chmod 400 authorized_keys

authorized_keys文件的权限很重要,如果设置为777,那么登录的时候,还是需要提供密码的。

3.4 测试

测试服务器A使用scp命令复制文件到服务器B是否还需要密码

在服务A上,再次使用刚才的命令,发现已经可以不需要输入密码

4.创建Shell定时远程备份脚本

4.1 在本地服务器A上创建定时远程备份脚本

本地服务器A上创建定期备份脚本auto_backup_to_remote.sh,脚本内容如下

#!/bin/bash

# gitlab 机房备份路径

LocalBackDir=/data/gitlabData/backups

# 远程备份服务器 gitlab备份文件存放路径

RemoteBackDir=/root/gitlabDataBackup

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

RemoteUser=root

# 远程备份服务器 IP地址

RemoteIP=(你的远程服务器地址)请自己修改

#当前系统日期

DATE=`date +"%Y-%m-%d"`

#Log存放路径

LogFile=$LocalBackDir/log/$DATE.log

# 查找 本地备份目录下 时间为60分钟之内的,并且后缀为.tar的gitlab备份文件

BACKUPFILE_SEND_TO_REMOTE=$(find /data/gitlabData/backups -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

4.2 修改备份脚本权限

chmod 777 auto_backup_to_remote.sh

4.3 手动执行脚本

现在为了验证脚本是否可以正常运行,我们需要手动执行脚本。

先在终端执行find命令,看是否能够正常查找出我们要scp到远程服务器的Gitlab备份文件

root@ubuntu4146:/data/gitlabData/backups# find /data/gitlabData/backups -type f -mmin -1000  -name '*.tar*'

/data/gitlabData/backups/1502906429_2017_08_17_9.4.3_gitlab_backup.tar

将定时远程备份脚本auto_backup_to_remote.sh修改完毕之后,我们试着手动执行该脚本,看是否能够正常运行。

root@ubuntu4146:/data/gitlabData/backups# ./auto_backup_to_remote.sh

切换到远程服务器B,在指定位置查看文件是否复制成功

5.定时执行脚本

5.1 编辑/etc/crontab 文件

即vi /etc/crontab,然后添加相应的任务。

在上面的定时任务后面,再添加一个执行复制刚备份好的Gitlab备份文件到服务器B的脚本任务。如下所示:

# 添加定时任务,每天凌晨三点,执行gitlab备份到远程服务器

0 3    * * *   root   /data/gitlabData/backups/auto_backup_to_remote.sh

 

 

5.2 重启cron服务

/sbin/service crond reload //重新载入配置

/sbin/service crond restart //重启服务  

5.3 测试自动化脚本

为了能够测试,该脚本是否能够在指定时间的时候,真的能够自动执行,我们将时间修改为15:55分。修改如下:

# 添加定时任务,每天凌晨三点,执行gitlab备份到远程服务器

55  15    * * *   root   /data/gitlabData/backups/auto_backup_to_remote.sh

重启cron服务,切换到远程服务器B,查看结果

  1. 定时删除远程服务器上的备份文件

6.1 创建定期删除过期的备份文件的脚本

创建定期删除过期的备份文件的脚本auto_remove_old_backup.sh

[root@xtgl207940 gitlabDataBackup]# touch auto_remove_old_backup.sh

6.2 编写脚本auto_remove_old_backup.sh

vi auto_remove_old_backup.sh

脚本内容如下 :

#!/bin/bash

# 远程备份服务器 gitlab备份文件存放路径

GitlabBackDir=/root/gitlabDataBackup

# 查找远程备份路径下,超过30天 且文件后缀为.tar 的 Gitlab备份文件 然后删除

find $GitlabBackDir -type f -mtime +30 -name '*.tar*' -exec rm {} \;

6.3定时执行删除脚本

将脚本加入/etc/crontab 文件

#添加定时任务,每天凌晨4点,执行删除过期的Gitlab备份文件

 0 4 * * * root /root/gitlabDataBackup/auto_remove_old_backup.sh

6.4重启crond服务

 

http://www.lryc.cn/news/2420627.html

相关文章:

  • 基于Java+Jsp+Ssm+Mysql实现的Java Web家庭理财消费支出收支管理系统设计与实现
  • 为什么家中照明用LED灯越来越不耐用?
  • 多功能聊天软件的设计与开发——音频视频聊天模块
  • java汽车维修管理系统(开题+源码)
  • 92条 SVN命令
  • 史上最全免费收录网站搜索引擎登录口(经典)
  • 12个国外稳定无限量免费网盘
  • plsql 存储过程 批量提交_浅谈PetShop之使用存储过程与PLSQL批量处理(附案例)
  • html5 右侧客服代码,简洁右侧栏客服代码
  • F5 负载均衡器
  • ZFAKA-自动发卡收款平台全套搭建教程(含支付接口设置)
  • Visual C++6.0下载和基础使用方法
  • WebApi接口测试工具:WebApiTestClient
  • 新浪短url地址
  • 物联网技术的发展历程及其未来趋势
  • Java基于线上考试系统(开题+源码)
  • 串口和TCP互相转发工具
  • 基于web的音乐网站的设计与实现(论文+源码)_kaic
  • C++——sort函数
  • 如何自学电脑编程?详细教程来了
  • 个人网站的搭建部署及自定义域名
  • Javascript基础(四):获得焦点和失去焦点事件
  • 《ASP.NET 开发从入门到精通》----导读
  • 一起撸个朋友圈吧 (Step6) 评论对齐(未完全版本)【上】
  • ROS的STM32电机驱动
  • 背包问题之回溯法
  • dell灵越笔记本后盖怎么拆_dell笔记本拆机详解【图文教程】
  • jQuery hover事件鼠标滑过图片半透明标题文字滑动显示隐藏
  • [ArcPy] 遥感影像去黑边-第六届全国大学生GIS技能大赛试题
  • 分享17个微信创新应用案例 应用场景的不同应用