GitLab如何进行备份恢复与迁移?

GitLab如何进行备份恢复与迁移?

1、Gitlab 创建备份

1.1 创建备份文件

首先我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份。

gitlab-rake gitlab:backup:create

使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1502357536_2017_08_10_9.4.3_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1502357536_2017_08_10_9.4.3是备份创建的日期

  • /etc/gitlab/gitlab.rb 配置文件须备份
  • /var/opt/gitlab/nginx/conf nginx配置文件
  • /etc/postfix/main.cfpostfix 邮件配置备份
    生成完后,/var/opt/gitlab/backups目录创建一个名称类似为1502357536_2017_08_10_9.4.3_gitlab_backup.tar的压缩包

1.1.1 更改Gitlab备份目录

当然你也可以通过/etc/gitlab/gitlab.rb配置文件来修改默认存放备份文件的目录

gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

/var/opt/gitlab/backups修改为你想存放备份的目录即可,例如下面代码将备份路径修改为/mnt/backups

gitlab_rails['backup_path'] = '/mnt/backups'

修改完成之后使用下面命令重载配置文件即可.

gitlab-ctl reconfigure

1.2 Gitlab自动备份

1.2.1 定时自动备份

在crontab文件里面,每一行代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,每个字段之间用空格分割,没用的段用*代替,格式如下:

m h dom mon dow user command

其中:

  • m: 表示分钟,可以是从0到59之间的任何整数。
  • h:表示小时,可以是从0到23之间的任何整数。
  • dom:表示日期,可以是从1到31之间的任何整数。
  • mon:表示月份,可以是从1到12之间的任何整数。
  • dow:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
  • user: 表示执行的用户。
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件(如shell文件)。
    实现每天凌晨2点进行一次自动备份:通过crontab使用备份命令实现,需重启cron服务
    方法1、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
#输入命令crontab -e
sudo crontab -e  
#输入相应的任务
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1  

方法2、直接编辑/etc/crontab 文件,即vi /etc/crontab,然后添加相应的任务

#编辑 /etc/crontab
vi /etc/crontab 

然后再编辑框内输入相应的任务

# edited by ouyang 2017-8-11 添加定时任务,每天凌晨两点,执行gitlab备份
0  2    * * *   root    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

或者直接定时执行一个脚本 auto_backup.sh ,脚本内容为

/opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

然后再 /etc/crontab中,添加相关任务定时执行 auto_backup.sh 脚本文件

sudo chmod +x auto_backup.sh
sudo vim auto_backup.sh

/etc/crontab 中添加执行脚本的定时任务,代码如下:

#也可以按照如下所示的方法,定时执行 auto_backup.sh脚本,脚本内容就填写: /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1 

0 2    * * *   root    /data/gitlabData/backups/auto_backup.sh -D 1   

编写完 /etc/crontab 文件之后,需要重新启动cron服务

#重新加载cron配置文件
sudo /usr/sbin/service cron reload
#重启cron服务
sudo /usr/sbin/service cron restart 

实际运行如下

root@ubuntu4146:~# sudo /usr/sbin/service cron reload
root@ubuntu4146:~# sudo /usr/sbin/service cron restart 
cron stop/waiting
cron start/running, process 17738

关于Cron表达式可以参考链接:

  • http://www.cnblogs.com/junrong624/p/4239517.html
  • http://blog.csdn.net/xiyuan1999/article/details/8160998
  • http://www.cnblogs.com/kaituorensheng/p/4494321.html

关于gitlab备份可以参考链接:

  • http://blog.csdn.net/utopiaprince/article/details/50039989

  • http://www.cnblogs.com/shansongxian/p/6599144.html

  • http://www.ttlsa.com/linux/gitlab-backup-restore/

  • https://github.com/sund/auto-gitlab-backup

  • https://gitlab.com/help/raketasks/backup_restore.md

  • http://blog.csdn.net/felix_yujing/article/details/52918803

关于如何将gitlab备份文件备份到远程备份服务器,参考链接:

  • Git学习–>如何通过Shell脚本自动定时将Gitlab备份文件复制到远程服务器?
    http://blog.csdn.net/ouyang_peng/article/details/77334215

1.2.2 设置备份过期时间

设置只保存最近7天的备份,编辑 /etc/gitlab/gitlab.rb 配置文件,找到gitlab_rails[‘backup_keep_time’],设置为你想要设置的值,然后保存。

gitlab_rails['backup_keep_time'] = 604800  

2、 Gitlab迁移

2.1 copy老服务器上面的备份文件到新服务器

2.1.1 确保新Gitlab服务器和老Gitlab服务器版本相同

第一步,新服务器上的Gitlab的版本必须与创建备份时的Gitlab版本号相同. 比如新服务器安装的是最新的9.4.3版本的Gitlab, 那么迁移之前, 最好将老服务器的Gitlab 升级为9.4.3再进行备份.

2.1.2 copy老服务器上面的备份文件到新服务器

第二步,如果你没修改过默认备份目录的话,需要将老服务器上的备份文件目录(/var/opt/gitlab/backups目录)下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups目录。

使用scp命令从远程服务器copy文件或者目录到本地

scp 用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2

[用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .

可能有用的几个参数 :

  • -v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .
  • -C 使能压缩选项 .
  • -P 选择端口 . 注意 -p 已经被 rcp 使用 .
  • -4 强行使用 IPV4 地址 .
  • -6 强行使用 IPV6 地址 .
    例如我使用如下命令,从远程服务器copy刚才的备份文件到了新服务器的/var/opt/gitlab/backups/ 目录下
scp root@1.1.1.1:/var/opt/gitlab/backups/1502357536_2017_08_10_9.4.3_gitlab_backup.tar /var/opt/gitlab/backups/

2.1.3 从备份文件中恢复gitlab

1、将备份文件权限修改为777
第一步,将备份文件权限修改为777,不然可能恢复的时候会出现权限不够,不能解压的问题

chmod 777 1502357536_2017_08_10_9.4.3_gitlab_backup.tar 

2、执行命令停止相关数据连接服务
第二步,执行命令停止相关数据连接服务

# 停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

3、执行命令从备份文件中恢复Gitlab
第三步,执行命令从备份文件中恢复Gitlab

gitlab-rake gitlab:backup:restore BACKUP=备份文件编号

例如我们的备份文件的编号是1502357536_2017_08_10_9.4.3,因此执行下面的命令即可恢复gitlab

gitlab-rake gitlab:backup:restore BACKUP=1502357536_2017_08_10_9.4.3

敲完命令后,出现第一个交互页面

root@ubuntu4146:/var/opt/gitlab/backups# gitlab-rake gitlab:backup:restore BACKUP=1502357536_2017_08_10_9.4.3
Unpacking backup ... done
Before restoring the database we recommend removing all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.

Do you want to continue (yes/no)? 
输入“yes”继续。
恢复过程中。。。。。

出现第二个交互页面

Put GitLab hooks in repositories dirs [DONE]
done
Restoring uploads ... 
done
Restoring builds ... 
done
Restoring artifacts ... 
done
Restoring pages ... 
done
Restoring lfs objects ... 
done
This will rebuild an authorized_keys file.
You will lose any data stored in authorized_keys file.
Do you want to continue (yes/no)? 
输入“yes”继续

4、执行命令从备份文件中恢复Gitlab
第四步,启动Gitlab

sudo gitlab-ctl start

3、打开迁移后的Gitlab,进行对比
对比,可以发现,除了两台服务器的ip地址不一样之外,其他的内容完全一模一样,迁移成功!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101769.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java语言中的面向对象特性总结

    【课前思考】1.什么是对象?什么是类?什么是包?什么是接口?什么是内部类?2.面向对象编程的特性有哪三个?它们各自又有哪些特性?3.你知道java语言在面向对象编程方面有何独特的特点吗?&

    2021年12月27日
    38
  • linux系统休眠唤醒_centos休眠后怎么唤醒

    linux系统休眠唤醒_centos休眠后怎么唤醒背景介绍:睡眠/唤醒是嵌入式Linux非常重要的组成部分,因为优秀的睡眠唤醒机制可以是嵌入式设备尽可能的进入休眠状态,来延长电池的续航时间(这在移动终端消费类电子设备中是非常重要和有意义的!!)。但标准的Linux睡眠唤醒机制有其自身的一些缺陷(所有模块必须同时睡下或者唤醒),在某些情况下,这会导致能耗的白白浪费。因此Android在标准Linux睡眠唤醒的机制上作了新的改动(wake_lock唤…

    2022年9月18日
    4
  • Arduino-驱动LCD1602A「建议收藏」

    Arduino-驱动LCD1602A「建议收藏」Demo_01、显示温湿度数据注意:根据我的代码注释进行接线,如果还有不懂的就查看lcd的使用手册,有详细的电路图哦!#include<LiquidCrystal.h>//LCD的头文件#include<dht11.h>//导入dht11的头文件#defineDhtPIN2//dht11控制的端口#defineRS6//LCD1602的RS端口 //RW、VSS、K接GND,VDD、A接V

    2022年9月22日
    2
  • 卷积神经网络如何进行图像识别的

    卷积神经网络如何进行图像识别的在机器视觉的概念中,图像识别是指软件具有分辨图片中的人物、位置、物体、动作以及笔迹的能力。计算机可以应用机器视觉技巧,结合人工智能以及摄像机来进行图像识别。 什么是图像识别?为什么要进行图像识别? 在机器视觉的概念中,图像识别是指软件具有分辨图片中的人物、位置、物体、动作以及笔迹的能力。计算机可以应用机器视觉技巧,结合人工智能以及摄像机来进行图像识别。 …

    2022年6月10日
    39
  • iframe关闭父页面(iframe嵌套https页面)

    iframe是html标签,具有一般标签的属性:widthiframe的高度heightiframe的宽度srciframe里面加载的页面urlname可以通过window.frames[name]获取到frameid和其他的html标签id一样在主页面中通过iframe标签可以引入其他子页面其中可以通过以下方法获取到iframe内部子页面的信息&amp;amp;amp;amp;lt;!–…

    2022年4月10日
    321
  • org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and

    org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and项目启动报错org.postgresql.util.PSQLException:Connectiontolocalhost:5432refused.CheckthatthehostnameandportarecorrectandthatthepostmasterisacceptingTCP/IPconnections.解决:swin+R打开命令框…

    2022年6月19日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号