Gitlab备份以及恢复
公司更换了新的服务器, 需要把原先的 gitlab 迁移到新的服务器上。
# 1. 迁移准备工作和思路:
从 a 服务器迁移到 b 服务器, 由于 Gitlab 自身的兼容性问题,高版本的 Gitlab 无法恢复低版本备份的数据, 需要注意在 b 服务器部署和 a 服务器一样版本的 gitlab, 部署好环境后开始备份和数据迁移.
查看 gitlab 版本的命令:
gitlab-rake gitlab:env:info
# 2. 备份原 a 服务器上的的数据
gitlab-rake gitlab:backup:create RAILS_ENV=production
PS
: 备份后的文件一般是位于 / var/opt/gitlab/backups 下, 自动生成文件名文件名如 1481529483_gitlab_backup.tar
# 3. 将步骤 2 生成的 tar 文件拷贝到 b 服务器上相应的 backups 目录下
可以利用 scp 进行直接拷贝.
scp username@src_ip:/var/opt/gitlab/backups/1481529483_gitlab_backup.tar /var/opt/gitlab/backups
PS
: username 为原服务器的用户名,src_ip 原服务器 IP 地址
# 4. 在 b 服务器恢复数据
gitlab-rake gitlab:backup:restore RAILS_ENV=production BACKUP=/var/opt/gitlab/backups/1511876879_2017_11_28_10.1.0
PS
:BACKUP 的时间点必须与原服务器备份后的文件名一致
PPS
:一般备份出来的名字是这样的,命令使用格式是 git 前边的数据就行
OK,恢复成功!
# 5. 通过脚本定时备份
写一个简单的脚本,加入到定时任务,以保证每天备份一次代码到异地。
写脚本之前,先创建一下对应的工作目录:
$ mkdir /backup
$ touch /backup/logfile.txt
2
脚本内容如下:
#!/bin/bash
Bakupdir=/var/opt/gitlab/backups/
Logfile=/backup/logfile.txt
Date=`date +%Y-%m-%d`
gitlab-rake gitlab:backup:create RAILS_ENV=production
if [ $? -eq 0 ];then
echo "$Date Backup Successful" >> $Logfile
else
echo "$Date Backup Failed" >> $Logfile
fi
cd $Bakupdir
scp *.tar backup@192.168.106.222:/home/backup/gitbak
rm -rf *
2
3
4
5
6
7
8
9
10
11
12
13
然后将脚本加入定时任务,根据需求,定期执行即可!
# 6. 出错解决
数据迁移到后检查登录 gialab 有时候会跳出 500 报错 (Something went wrong on our end.) 以及无法正常新建用户
查看日志: tail -f /var/log/gitlab/redis/current
Can’t save in background: fork: Cannot allocate memory
2
解决方案
修改 / etc/sysctl.conf
加上 vm.overcommit_memory = 1
, Linux 内核会根据参数 vm.overcommit_memory 参数的设置决定是否放行。
修改完执行 sysctl -p
vm.overcommit_memory = 1,直接放行
vm.overcommit_memory = 0:则比较 此次请求分配的虚拟内存大小和系统当前空闲的物理内存加上 swap,决定是否放行。
vm.overcommit_memory = 2:则会比较进程所有已分配的虚拟内存加上此次请求分配的虚拟内
2
3
参考网址:http://wenva.github.io/git/2016/04/22/Gitlab%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%81%E7%A7%BB.html