Gitlab备份和恢复操作记录

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介:

前面已经介绍了Gitlab环境部署记录,这里简单说下Gitlab的备份和恢复操作记录:

1)Gitlab的备份目录路径设置

1
2
3
4
5
6
7
8
9
10
11
12
[root@code-server ~] # vim /etc/gitlab/gitlab.rb
gitlab_rails[ 'manage_backup_path' ] =  true
gitlab_rails[ 'backup_path' ] =  "/data/gitlab/backups"     //gitlab 备份目录
gitlab_rails[ 'backup_archive_permissions' ] = 0644        // 生成的备份文件权限
gitlab_rails[ 'backup_keep_time' ] = 7776000               // 备份保留天数为3个月(即90天,这里是7776000秒)
 
[root@code-server ~] # mkdir -p /data/gitlab/backups
[root@code-server ~] # chown -R git.git /data/gitlab/backups
[root@code-server ~] # chmod -R 777 /data/gitlab/backups
  
如上设置了gitlab备份目录路径为 /data/gitlab/backups ,最后使用下面命令重载gitlab配置文件,是上述修改生效!
root@code-server ~] # gitlab-ctl reconfigure

2)GItlab备份操作(使用备份命令"gitlab-rake gitlab:backup:create")

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
手动备份gitlab
[root@code-server backups] # gitlab-rake gitlab:backup:create
Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... [DONE]
done
Dumping repositories ...
  * treesign /treesign  ... [DONE]
  * gateway /gateway  ... [DONE]
  * treesign /treesign-doc  ... [SKIPPED]
  * qwsign /qwsign  ... [DONE]
  * qwsign /qwsign-doc  ... [DONE]
  test /test  ... [DONE]
done
Dumping uploads ...
done
Dumping builds ...
done
Dumping artifacts ...
done
Dumping pages ...
done
Dumping lfs objects ...
done
Dumping container registry images ...
[DISABLED]
Creating backup archive: 1510471890_2017_11_12_9.4.5_gitlab_backup. tar  ...  done
Uploading backup archive to remote storage  ... skipped
Deleting tmp directories ...  done
done
done
done
done
done
done
done
Deleting old backups ...  done . (0 removed)
 
然后查看下备份文件(文件权限是设定好的644)
[root@code-server backups] # ll
total 244
-rw-r--r-- 1 git git 245760 Nov 12 15:33 1510472027_2017_11_12_9.4.5_gitlab_backup. tar
 
编写备份脚本,结合 crontab 实施自动定时备份,比如每天0点、6点、12点、18点各备份一次
[root@code-server backups] # pwd
/data/gitlab/backups
[root@code-server backups] # vim gitlab_backup.sh
#!/bin/bash
/usr/bin/gitlab-rake  gitlab:backup:create CRON=1
 
注意:环境变量CRON=1的作用是如果没有任何错误发生时, 抑制备份脚本的所有进度输出
 
[root@code-server backups] # crontab -l
0 0,6,12,18 * * *  /bin/bash  -x  /data/gitlab/backups/gitlab_backup .sh >  /dev/null  2>&1

3)Gitlab恢复操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
GItlab只能还原到与备份文件相同的gitlab版本。
假设在上面gitlab备份之前创建了 test 项目,然后不小心误删了 test 项目,现在就进行gitlab恢复操作:
  
1)停止相关数据连接服务
[root@code-server backups] # gitlab-ctl stop unicorn
ok: down: unicorn: 0s, normally up
[root@code-server backups] # gitlab-ctl stop sidekiq
ok: down: sidekiq: 1s, normally up
[root@code-server backups] # gitlab-ctl status
run: gitaly: (pid 98087) 1883s; run: log: (pid 194202) 163003s
run: gitlab-monitor: (pid 98101) 1883s; run: log: (pid 194363) 163002s
run: gitlab-workhorse: (pid 98104) 1882s; run: log: (pid 194362) 163002s
run: logrotate: (pid 98117) 1882s; run: log: (pid 5793) 160832s
run: nginx: (pid 98123) 1881s; run: log: (pid 194359) 163002s
run: node-exporter: (pid 98167) 1881s; run: log: (pid 194360) 163002s
run: postgres-exporter: (pid 98173) 1881s; run: log: (pid 194204) 163003s
run: postgresql: (pid 98179) 1880s; run: log: (pid 194365) 163002s
run: prometheus: (pid 98187) 1880s; run: log: (pid 194364) 163002s
run: redis: (pid 98230) 1879s; run: log: (pid 194358) 163002s
run: redis-exporter: (pid 98234) 1879s; run: log: (pid 194208) 163003s
down: sidekiq: 8s, normally up; run: log: (pid 194437) 163001s
down: unicorn: 21s, normally up; run: log: (pid 194443) 163001s
  
2)现在通过之前的备份文件进行恢复
[root@code-server backups] # pwd
/data/gitlab/backups
[root@code-server backups] # ll
total 244
-rw-r--r-- 1 git git 245760 Nov 12 15:33 1510472027_2017_11_12_9.4.5_gitlab_backup. tar
  
Gitlab的恢复操作会先将当前所有的数据清空,然后再根据备份数据进行恢复
[root@code-server backups] # gitlab-rake gitlab:backup:restore BACKUP=1510472027_2017_11_12_9.4.5
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 )?
........
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
WARNING:  no privileges were granted  for  "public"
GRANT
[DONE]
done
Restoring repositories ...
  * treesign /treesign  ... [DONE]
  * gateway /gateway  ... [DONE]
  * treesign /treesign-doc  ... [DONE]
  * qwsign /qwsign  ... [DONE]
  * qwsign /qwsign-doc  ... [DONE]
  test /test  ... [DONE]
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
  
  
Deleting tmp directories ...  done
done
done
done
done
done
done
done
[root@code-server backups] #
  
最后再次启动Gitlab
[root@code-server backups] # gitlab-ctl start
ok: run: gitaly: (pid 98087) 2138s
ok: run: gitlab-monitor: (pid 98101) 2138s
ok: run: gitlab-workhorse: (pid 98104) 2137s
ok: run: logrotate: (pid 98117) 2137s
ok: run: nginx: (pid 98123) 2136s
ok: run: node-exporter: (pid 98167) 2136s
ok: run: postgres-exporter: (pid 98173) 2136s
ok: run: postgresql: (pid 98179) 2135s
ok: run: prometheus: (pid 98187) 2135s
ok: run: redis: (pid 98230) 2134s
ok: run: redis-exporter: (pid 98234) 2134s
ok: run: sidekiq: (pid 104494) 0s
ok: run: unicorn: (pid 104497) 1s
[root@code-server backups] # gitlab-ctl status
run: gitaly: (pid 98087) 2142s; run: log: (pid 194202) 163262s
run: gitlab-monitor: (pid 98101) 2142s; run: log: (pid 194363) 163261s
run: gitlab-workhorse: (pid 98104) 2141s; run: log: (pid 194362) 163261s
run: logrotate: (pid 98117) 2141s; run: log: (pid 5793) 161091s
run: nginx: (pid 98123) 2140s; run: log: (pid 194359) 163261s
run: node-exporter: (pid 98167) 2140s; run: log: (pid 194360) 163261s
run: postgres-exporter: (pid 98173) 2140s; run: log: (pid 194204) 163262s
run: postgresql: (pid 98179) 2139s; run: log: (pid 194365) 163261s
run: prometheus: (pid 98187) 2139s; run: log: (pid 194364) 163261s
run: redis: (pid 98230) 2138s; run: log: (pid 194358) 163261s
run: redis-exporter: (pid 98234) 2138s; run: log: (pid 194208) 163262s
run: sidekiq: (pid 104494) 4s; run: log: (pid 194437) 163260s
run: unicorn: (pid 104497) 4s; run: log: (pid 194443) 163260s
 
恢复命令完成后,可以check检查一下恢复情况
[root@code-server backups] # gitlab-rake gitlab:check SANITIZE=true
Checking GitLab Shell ...
 
GitLab Shell version >= 5.3.1 ? ... OK (5.3.1)
Repo base directory exists?
default...  yes
Repo storage directories are symlinks?
default... no
Repo paths owned by git:root, or git:git?
default...  yes
Repo paths access is drwxrws---?
default...  yes
hooks directories  in  repos are links: ...
5 /1  ... ok
6 /2  ... ok
5 /3  ... repository is empty
12 /4  ... ok
12 /5  ... ok
Running  /opt/gitlab/embedded/service/gitlab-shell/bin/check
Check GitLab API access: OK
Access to  /var/opt/gitlab/ . ssh /authorized_keys : OK
Send  ping  to redis server: OK
gitlab-shell self-check successful
 
Checking GitLab Shell ... Finished
 
Checking Sidekiq ...
 
Running? ...  yes
Number of Sidekiq processes ... 1
 
Checking Sidekiq ... Finished
 
Checking Reply by email ...
 
Reply by email is disabled  in  config /gitlab .yml
 
Checking Reply by email ... Finished
 
Checking LDAP ...
 
LDAP is disabled  in  config /gitlab .yml
 
Checking LDAP ... Finished
 
Checking GitLab ...
 
Git configured correctly? ...  yes
Database config exists? ...  yes
All migrations up? ...  yes
Database contains orphaned GroupMembers? ... no
GitLab config exists? ...  yes
GitLab config up to  date ? ...  yes
Log directory writable? ...  yes
Tmp directory writable? ...  yes
Uploads directory exists? ...  yes
Uploads directory has correct permissions? ...  yes
Uploads directory tmp has correct permissions? ...  yes
Init script exists? ... skipped (omnibus-gitlab has no init script)
Init script up-to- date ? ... skipped (omnibus-gitlab has no init script)
Projects have namespace: ...
5 /1  ...  yes
6 /2  ...  yes
5 /3  ...  yes
12 /4  ...  yes
12 /5  ...  yes
Redis version >= 2.8.0? ...  yes
Ruby version >= 2.3.3 ? ...  yes  (2.3.3)
Git version >= 2.7.3 ? ...  yes  (2.13.4)
Active  users : ... 11
 
Checking GitLab ... Finished
  
然后稍等一会(如果启动gitlab后,访问出现500,这是因为redis等程序还没完全启动,等一会儿访问就ok了),再次登录Gitlab,就会发现之前误删除的 test 项目已经恢复了!
  
另外:Gitlab迁移与恢复一样,但是要求两个GitLab版本号一致
***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************

本文转自散尽浮华博客园博客,原文链接:http://www.cnblogs.com/kevingrace/p/7821529.html,如需转载请自行联系原作者
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
存储 Shell 网络安全
docker 安装gitlab,配置邮件,备份全流程
docker 安装gitlab,配置邮件,备份全流程
632 0
docker 安装gitlab,配置邮件,备份全流程
|
6月前
|
运维 Java Devops
阿里云云效操作报错合集之在进行GitLab代码分支迁移时遇到报错,一般是什么原因
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
7月前
|
存储 网络安全 数据安全/隐私保护
docker 安装gitlab,配置邮件,备份全流程
docker 安装gitlab,配置邮件,备份全流程
253 0
|
7月前
|
Docker 容器
gitlab备份还原
gitlab备份还原
57 0
|
存储 Kubernetes Linux
GitLab 最新安装&备份&升级教程(全)
本文介绍了gitlab从安装、升级、备份、恢复一系列操作方法,便于日常更新维护。
679 0
GitLab 最新安装&备份&升级教程(全)
|
Shell 网络安全 开发工具
关于公司Gitlab使用介绍和操作简单介绍
关于公司Gitlab使用介绍和操作简单介绍
200 0
关于公司Gitlab使用介绍和操作简单介绍
|
弹性计算 Shell Linux
Docker 中 Gitlab 数据的备份和迁移
备份gitlab数据,并进行迁移恢复
2687 0
Docker 中 Gitlab 数据的备份和迁移
|
网络安全 开发工具 git
GitLab - 安装 TortoiseGit 简化 Git 操作
安装 TortoiseGit 简化 Git 操作
GitLab - 安装 TortoiseGit 简化 Git 操作