背景
公司使用windows上的centos虚拟机作为Gitlab存储服务器,需要每天自动定时备份(数据备份到windows上),防止虚拟机文件损坏造成代码数据丢失。
操作步骤
配置linux访问windows免密登录
- 安装OpenSSH服务 下载地址
- 解压至C:Program FilesOpenSSH,打开cmd(管理员),进入此安装目录),执行命令:
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
- 设置服务自动启动:
sc config sshd start= auto
- 启动服务:
net start sshd
- 在客户端(git服务器)上创建密钥对:
ssh-keygen -t rsa
直接按三次回车,不要设置密码 - 拷贝公钥文件到需要备份文件的服务器,将git服务器中
~/.ssh/id_rsa.pub
公钥文件拷贝到windows的C:user/{{ username }}/.ssh
文件夹下并重命名为authorized_keys,注意如果没有.ssh文件夹,最好使用上一步的命令创建密钥对让其自动生成,否则会识别不到此公钥 - 在git服务器上验证下是否免密:
ssh user@192.168.124.12
创建备份脚本
vim /opt/gitlabBackAndScp.sh
#!/bin/sh
scp_linux_path='/var/opt/gitlab/backups/'
# 如果需要备份多台,这里可以多配置一行scp_windows_uri2,并把最后一行也复制修改下
scp_windows_uri='user@192.168.124.12:D:GIT_BACKUP'
scp_log_path='/opt/gitlabBackAndScp.log'
time=$(date +%Y-%m-%d %H:%M:%S)
gitlab-rake gitlab:backup:create
filename=`ls $scp_linux_path -t |head -n1|awk '{print $0}'`
echo [$time] $scp_linux_path$filename >> $scp_log_path
scp $scp_linux_path$filename $scp_windows_uri
创建计划
配置每天凌晨一点备份,执行之后会默认在/var/opt/gitlab/backups文件夹下产生备份文件,并推送到上面配置的免密登录的服务器上
crontab -e
输入0 1 * * * /opt/gitlabBackAndScp.sh
.gitlab恢复
- 停止相关服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
-
修改备份文件权限
chmod 777 /var/opt/gitlab/backups/1629016668_2021_08_15_12.1.3_gitlab_backup.tar
-
执行恢复
gitlab-rake gitlab:backup:restore BACKUP=1629016668_2021_08_15_12.1.3
-
gitlab启动
gitlab-ctl start