Rat's

Linux VPS定时备份服务器/网站数据到Github私人仓库
说明:现在Github被微软收购后,私人仓库已经开始免费了,只能说微软很良心。然后就可以拿来折腾下了,让其充分发挥...
扫描右侧二维码阅读全文
10
2019/01

Linux VPS定时备份服务器/网站数据到Github私人仓库

说明:现在Github被微软收购后,私人仓库已经开始免费了,只能说微软很良心。然后就可以拿来折腾下了,让其充分发挥下作用,这里我们可以用来备份下网站或者服务器一些数据,方法就大概说下。

教程

首先你肯定需要一个Github账号,没有的可以去注册一个,地址:https://github.com。有了账号就继续看。

1、配置Git SSH密钥

由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以必须要让github仓库认证你SSH key,在操作之前,需要先在服务器上生成SSH key。

我们先去根目录下使用命令:

cd ~
ssh-keygen -t rsa

这里会要你命名密匙名称(这里建议使用默认名称),然后连续按几次Enter,这时候会在/root/.ssh文件夹生成2ssh密钥,然后我们查看公钥id_rsa.pub

cat ~/.ssh/id_rsa.pub

查看后,再复制下公钥,然后打开Github官网,进入https://github.com/settings/ssh/newTitle随便填,然后Key填入刚刚复制的密匙,最后点击Add SSH Key添加即可。
请输入图片描述

2、建立私人仓库
我们需要先访问https://github.com/new,新建一个仓库用来存放备份文件,名称自己随意,记得下面一定要勾选Private,也就是私人仓库。不然你辛辛苦苦备份的小姐姐就要被别人偷走了。
请输入图片描述

3、配置本地仓库
由于博主是用来备份网站,所以需要备份文件夹为/home/www.moerats.com,也就是把该文件夹定为本地仓库,使用命令:

#进入需要备份的文件夹
cd /home/www.moerats.com
#初始化你的github仓库
git init
#关联到远程github仓库
git remote add origin git@github.com:iiiiiii1/MOERATS.git

关联仓库的时候,后面可以用HTTPS链接也可以用SSH,这里强烈建议选择SSH,安全性很高。
请输入图片描述

4、初次备份

#进入备份的文件夹
cd /home/www.moerats.com
#把目录下所有文件更改状况提交到暂存区,包括增,删,改。
git add -A
#提交更改的说明,说明随意了,这里为backsite
git commit -m "backsite"
#开始推送到Github
git push -u origin master

推送的时候可能会提示The authenticity of host 'github.com' can't be established.信息,直进yes即可。

然后可以看到仓库的备份文件了。
请输入图片描述

5、设置定时备份
在根目录先新建一个bash脚本:

nano ~/gitback.sh

代码如下:

#!/bin/bash
#进入到网站根目录,记得修改为自己的站点
cd /home/xxx.com
#将数据库导入到该目录,这里以mysql为例,passwd为数据库密码,typecho为数据库名称,typecho.sql为备份的数据库文件
mysqldump -uroot -ppasswd typecho > typecho.sql
git add -A
git commit -m "backsite"
git push -u origin master

然后编辑好了后,使用ctrl+xy保存退出。再测试下脚本,使用命令:

bash ~/gitback.sh

脚本没问题的话,再设置为每天05:15执行一次:

#并将运行日志输出到根目录的siteback.log文件
echo "15 05 * * * bash ~/gitback.sh > ~/siteback.log 2>&1 &" > bt.cron
crontab bt.cron
rm -rf bt.cron

最后使用crontab -l命令查看添加成功没。成功的话,就基本上算完成了。

推送失败

如果你将本地文件夹推送到Github失败的话,常见原因有2种,具体如下。

1、邮件问题

报错提示:Your push would publish a private email address.

这里可能是你将你的邮件地址私密了,解决方法如下:

#方法一,如果你想一直保持私密,可以选择方法二
访问https://github.com/settings/emails,将Keep my email address private的勾去掉。

#方法二
1、访问https://github.com/settings/emails,将Block command line pushes that expose my email的勾去掉。
2、设置你的github邮箱,修改成自己的再运行命令:
git config --global user.email "admin@moerats.com"

2、密匙问题

报错提示:Permission denied (publickey).

大概的原因就是,你设置密匙的时候改成了其它名称,而ssh默认只读取id_rsa,所以会显示没权限。解决方法如下:

#方法一
进入根目录的.ssh文件夹,将你的github密匙文件,重新更名为id_rsa。

#方法二
将github密匙添加到ssh agent,比如密匙名称为github,使用命令:
ssh-agent bash
ssh-add ~/.ssh/github

总结

使用该方法备份网站是个不错的选择,不过别用来备份大文件东西,比如电影什么的,听说有限制,具体多少暂时还没测试。

Vultr注册就送$50,可开日本/新加坡等机房,【点击注册】。
最后修改:2019 年 01 月 11 日 05 : 08 PM

发表评论

55 条评论

  1. masha
    !/bin/bash进入到网站根目录,记得修改为自己的站点

    cd /home/xxx.com

    将数据库导入到该目录,这里以mysql为例,passwd为数据库密码,typecho为数据库名称,typecho.sql为备份的数据库文件

    mysqldump -uroot -ppasswd typecho > typecho.sql
    git add -A
    git commit -m "backsite"
    git push -u origin master

    博主,用的小内存安装的那片教程,请问这里怎么填写呢

    1. Rat's
      @masha

      小内存安装脚本?如果是的话,大概就不适合这个备份脚本了,需要修改下

      1. masha
        @Rat's

        emm,博主应该怎么改啊

  2. Infvie's Blog

    链接:https://www.infvie.com/企鹅:1473934158名称:Infvie's Blog描述:分享运维实用技术,包括:运维监控、数据分析、集群部署、安全攻防、SRE学习交流平台头像:https://www.infvie.com/wp-content/uploads/2019/03/favicon.ico分类:运维相关技术分享是否链接了本页面:是

  3. 佐佐木

    在用centos6,设置了这个
    crontab -e
    /2 bash ~/gitback.sh ##想每两分钟执行一次测试,但是没有执行
    crontab -l ##可以看到刚刚设置的任务
    来自一枚萌新

    1. Rat's
      @佐佐木

      这个我在debian上么问题,是root用户吗?

      1. 佐佐木
        @Rat's

        上个问题已解决,现在每天正常备份,但是想知道如何恢复备份呢,假如A服务器是备份在仓库,可以恢复到B服务器吗,可以的话具体怎么操作

        1. Rat's
          @佐佐木

          配置好git信息,然后直接git拉取就行了

  4. mid2kagami
    该评论仅登录用户及评论双方可见
    1. Rat's
      @mid2kagami

      这个我也不是很清楚

  5. pluvet

    听说Github空间可以到10GB?

    1. Rat's
      @pluvet

      没这么夸张吧,我听说的是最高1G

      1. 二呆
        @Rat's

        小白来问个问题了,我备份的东西有将近600M,将来再增加估计到不了1G,恢复拉取的话,不会也不想鼓捣这个,但如果到时直接下载的话,用Github桌面、迅雷、网页下载,我下载平常几兆的东西都很慢,用移动流量快,但这太大了,纠结我还备不备份……(主要是想担心服务器硬件坏了可以恢复……西数的镜像要钱……)

        1. Rat's
          @二呆

          卧槽,呆哥还小白,要不我免费提供ftp给你备份

  6. mafia

    建议在nginx配置文件中禁止访问typecho.sql文件,不禁止的话别人直接可以通过url下载到这个文件,整个typecho数据库信息就泄露了。

    1. Rat's
      @mafia

      这个在备份命令结尾加个删除命令也行。

  7. 隔壁邻居

    就是速度慢的可怜

    1. Rat's
      @隔壁邻居

      反正也是后台执行,无所谓

  8. Star

    巨硬可干了点好事

    1. Rat's
      @Star

      不是一直挺良心吗

  9. NTPlay4

    我一般用宝塔+腾讯云COS。每月都有免费额度用来备份,足够了。

    1. Rat's
      @NTPlay4

      备份的话,适合自己的就行了。

  10. Ouo

    第一次备份成功了,后来发现sql备份只有第一次成功了,然后运行bash ~/gitback.sh直接提示mysqldump: unknown option '-m' 这是什么原因呢?

    1. Rat's
      @Ouo

      这个问题我还没遇到过,你先谷歌看看。或者在脚本最后面加个rm -rf typecho.sql命令后再试下。

  11. 海平面

    Github仓库的免费开放给大家带来了福音

    1. Rat's
      @海平面

      是的,微软还是不错的。

    2. Rat's
      @海平面

      是的,微软还是不错的。

  12. 肉松君

    博主 请教你个事情
    如果服务器重启的话 这个定时任务还会生效么???
    谢谢

    1. Rat's
      @肉松君

      生效。

      1. Wyane
        @Rat's

        谢谢大佬,成功添加了2个计划

  13. 肉松君

    大佬教程很详细啊 真是不错
    谢谢了

  14. pfttm

    测试完成:
    一、2个问题
    1、 git push -u origin master报错两个:
    1.1、The authenticity of host 'github.com (192.30.255.113)' can't be established.
    出现此问题的原因是为Windows编译的OpenSSH客户端不检查中的known_hosts文件~/.ssh/known_hosts
    解决:创建~/.ssh/config文件并插入行:UserKnownHostsFile ~/.ssh/known_hosts
    1.2、(按教程来就没有这个问题) error: failed to push some refs to 'git@github.com:/.git'
    出现这个错误的原因是是 因为你有远程库中的文件没有下载下来(readme.md文件),那么我们下载下来就行了:
    解决:git pull origin master 再git push -u origin master
    2、报错提示:Your push would publish a private email address. 解决方法一无效,解决方法二的Block command line pushes that expose my email没有这个选项,我是直接 git config --global user.email 了
    优化下: crontab -e 命令修改任务为:

    每天5点15运行,并打印日志到文件/log/crontab.log

    15 05 * ~/gitback.sh > /log/crontab.log 2>&1 &

    为什么打日志呢?我直接运行命令不报错,就是放脚本里面报错了(email报错),然后就一直打着吧。。

    1. Rat's
      @pfttm

      第一个问题貌似第一次推送的时候有个提示,你输入yes就好了。邮箱问题我测试第一种,二种都没问题,不过不排除其他情况。至于你说的没那个选项,我就不清楚了。打印日志确实要加一个用来排错。不过感谢提供些方法,给后面出同样问题的参考下吧。

    2. pfttm
      @pfttm

      每天5点15运行,并打印日志到文件/log/crontab.log 少了#注释。。。见谅,自己没打注释,编辑加上忘了

  15. 月情博客

    也可以用rlcone来连接gdrive跟onedrive,直接备份~ 关键是免费的.

    1. Rat's
      @月情博客

      有关网站数据方面不推荐rclone,容易出问题。玩玩还是可以的。

      1. 月情博客
        @Rat's

        反正是打包成压缩包的,不怎么会出问题吧?

        1. Rat's
          @月情博客

          是的,出问题几率都很小,用用也没事。

  16. Wodrei

    刚想着Github私人仓库免费了弄点什么来玩,看了大佬的教程很详细,动手试一下

    1. Rat's
      @Wodrei

      其实很久前就想发这个,拖到现在,刚好免费了

  17. Rhilip

    Github的repo有1G的空间软限制,玩玩可以,向楼上那样50G的还是算了吧

    1. Rat's
      @Rhilip

      是的,不过一般的网站都够了。

  18. dsao

    你好,我公司的数据库有50G 可以备份吗

    1. Rat's
      @dsao

      不行,公司还用免费的干啥,直接花钱,反正有报销。

  19. 蒲公英

    涨姿势了,不过快照要收费了,这也是个办法~

    1. Rat's
      @蒲公英

      是的,省钱

  20. 冻 手试一下,嘻嘻

  21. Kino

    不错欸~晚上试试看~

  22. lexo

    博主真会玩,有空我也试试

  23. sooele

    可惜只有1G。不然当OSS备份网站用!!

    1. Rat's
      @sooele

      很多人网站体积都没这么大的。

  24. 刁远屏

    用 github 备份网站是不是有点过分了……

    1. Rat's
      @刁远屏

      你这id看起来有点不适啊!不过分,我以前老拿来备份,看私人免费了,就水个教程

  25. 哈哈骑士

    牛逼,晚上回去试试。。。给大佬敬茶!!!

    1. Rat's
      @哈哈骑士

      可以,有问题可以反馈。