记一次gitlab-ce数据恢复过程

Posted zsxneil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次gitlab-ce数据恢复过程相关的知识,希望对你有一定的参考价值。

使用的gitlab是用docker启动的,数据目录的owner/group信息被意外全部更改成了root:root导致服务不可用。最终通过复原文件所有者的方式恢复了服务。

步骤如下:

  1. 打包备份gitlab所有的数据目录(我们的是/data/gitlab/data;/data/gitlab/config;/data/gitlab/logs),并清空目录下的所有文件;

  2.   删除gitlab-ce容器,重新从docker镜像启动一个新的gitlab-ce容器,让它生成新的文件,以备后续修正使用。为了让gitlab生成所有需要的文件,启动后,在新服务中新建了user/group/progect等;

  3.   获取gitlab数据目录下所有的文件及其owner/group信息,存到owner.txt中,脚本如下:

 1 #!/bin/bash
 2 function filedic(){
 3     for line in `ls -l $1`
 4     do
 5         filename=`echo $line| awk -F " " {print $9}`
 6         if test -n "${filename}"
 7         then
 8             groupname=`echo $line | awk -F " " {print $4}`
 9                     ownername=`echo $line | awk -F " " {print $3}`
10                     if [ -d $1"/"$filename ]
11                     then
12                             echo $1"/"$filename $groupname $ownername
13                             filedic $1"/"$filename
14                      else
15                              echo $1"/"$filename $groupname $ownername
16                      fi
17     
18         fi
19     done 
20 
21 
22 }
23 
24 IFS=$

25 INIT_PATH="/data/gitlab";
26 filedic $INIT_PATH

  4.   停掉新服务,将新产生的gitlab的数据文件打包备份,并清空gitlab的数据文件(即/data/gitlab/data;/data/gitlab/config;/data/gitlab/logs下的所有文件,现在这些目录下的文件都是新容器产生的,我们要把它们删除,然后恢复成旧的数据文件)

  5.   将第1步中备份的旧数据文件恢复到原目录中,其中logs文件可以删除

  6.   比对owner.txt中的文件所有者信息,修改上一步恢复的数据文件;脚本如下:

 1 #!/bin/bash
 2 
 3 cat /data/gitlab/script/owner.txt| 
 4 while read line
 5     do    
 6         echo $line
 7         path=`echo $line| awk -F " " {print $1}`
 8         groupname=`echo $line| awk -F " " {print $2}`
 9         ownername=`echo $line| awk -F " " {print $3}`
10         if [ -d "$path" -o -f "$path" ] 
11         then
12             echo  $path $groupname $ownername
13             chown $ownername:$groupname $path
14         fi
15     done

    其中还有一些postgresql的数据文件目录,需要统一全部修改,一般包括global/data及base目录。具体可以通过docker的启动日志查看,我是通过一遍一遍的启动才修改完全部文件的。。。。。。。。。。。

  7. 经过多次启动,查看报错日志,修改数据文件所有者信息,最终服务启动成功。查看仓库---都在;测试提交---正常!!!

  8. 提醒:不要自己作死。。。不要动gitlab的数据文件。。。多做备份

以上是关于记一次gitlab-ce数据恢复过程的主要内容,如果未能解决你的问题,请参考以下文章

记一次OOM排查过程

记一次重构经历(未完)

记一次分析别人源码的过程

记一次博客页面美化过程,分享代码.

记一次db2 备份恢复过程中遇到的用户权限问题

记一次百G数据的聚类算法实施过程