• 记一次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的数据文件。。。多做备份

  • 相关阅读:
    Java类 初始化块
    Java中 equals和==
    Raft算法
    OLTP与OLAP
    数据库事务机制ACID
    乐观锁和悲观锁
    SparkStreaming + Flume
    如何提高深度睡眠质量,科学解决睡眠问题
    centos 7 下安装mysql 远程连接出现10038错误如何解决
    CentOS 7.0 yum安装Apache、PHP和MySQL
  • 原文地址:https://www.cnblogs.com/zsxneil/p/10273931.html
Copyright © 2020-2023  润新知