首页

GitLab 定时数据备份纪要

GitLab 定时数据备份纪要 - 八云酱

数据备份

GitLab 其实自带数据备份命令,执行完成之后会在 /var/opt/gitlab/backups 目录下面创建一个压缩包。

gitlab-rake gitlab:backup:create

定时任务

通过 crontab 创建定时任务来备份数据,相关知识请参考这里

定时任务需要设置执行命令,增加如下脚本文件内容。

# /usr/bin/gitlab-backup.sh
#!/bin/bash
BACKUP_DIR="/var/opt/gitlab/backups"

# 每次备份前清空备份目录
rm -rf ${BACKUP_DIR}/*
gitlab-rake gitlab:backup:create

执行前需要先给脚本增加可执行权限。

chmod +x /usr/bin/gitlab-backup.sh

运行命令 crontab -e 增加定时任务列表,具体内容如下。

# 每小时执行一次
0 * * * * gitlab-backup.sh

远程传输

数据备份之后需要远程传输防止容灾。笔者采用七牛云对象存储私有仓库并使用七牛云官方提供的命令行工具 qshell 来上传数据,相关知识请参考这里

下载并解压选择合适版本并将其重命名。

copy qshell /usr/bin/qshell
chmod +x /usr/bin/qshell

七牛云上传资源之前需要进行用户认证,根据文档执行以下命令进行认证。

qshell account ${QINIU_AK} ${QINIU_SK} ${QINIU_ACCOUNT} 

最后更新备份脚本,添加远程传输命令。

# /usr/bin/gitlab-backup.sh
#!/bin/bash
BACKUP_DIR="/var/opt/gitlab/backups"

rm -rf ${BACKUP_DIR}/*
gitlab-rake gitlab:backup:create

BACKUP_FILENAME="$(ls ${BACKUP_DIR} -t | head -n 1)"
BACKUP_FILEPATH="${BACKUP_DIR}/${BACKUP_FILENAME}"

# 分片上传命令参考官方文档
qshell rput ${QINIU_BUCKET} ${BACKUP_FILENAME} ${BACKUP_FILEPATH}

数据恢复

同样使用自带命令进行数据恢复,恢复之前需要将压缩包放在 /var/opt/gitlab/backups 目录下面,执行命令之后根据提示进行下一步即可。

gitlab-rake gitlab:backup:restore RAILS_ENV=production BACKUP=${BACKUP_FILENAME}