使用Github.Com作为网站数据备份仓库

2,850次阅读

共计 3948 个字符,预计需要花费 10 分钟才能阅读完成。

前言

无论是任何网站、任何站长,对于网站数据的重要性肯定都有一定的了解,而作为站长的我们,对于数据的备份是必须提高到最高级别的重视程度。

如果关注过康康的朋友,应该知道康康之前使用过七牛、阿里等进行数据存储,目前使用的腾讯 COS 进行数据存储,而且康康的数据都是每天一次备份,自己编写了一个 Python 脚本,通过 Cron 进行自动执行。

这样的操作,是完全保证了数据丢失情况下,能够确保回复到最新的数据信息,避免因各种原因导致的网站数据丢失后无法恢复的尴尬。

而就目前来说,因为腾讯的 COS 已经确认要收费(虽然老用户暂时不受影响),作为穷屌丝的康康来说,收费的东西是能避免就避免的,所以康康又想更换一个备份基地了!

正巧在 Rat’s Blog 看到了一篇使用 Github 作为数据备份的文章,测试了一下,的确很不错,就是国内连接速度稍微慢了点,但关键是安全,所以康康将自己的数据备份转移到了 Github 上。

不过在使用 Github 作为备份之前,请先确认自己的备份数据不超过 1G 大小,且单个文件不大于 100M,原因嘛,Github 上有说明,若存储仓库达到 1GB,会收到Github 的礼貌邮件,要求减少仓库大小,而单个文件大于 50M 会在提交时警告,大于 100M 则直接拒绝提交。

Github 配置

要在 Github 中配置数据自动备份,要先进行一些基本的操作,首先咱们要理解 Github 的提交方式分为两种,一种是 https 方式提交,一种是 ssh 方式提交,两种方式都能够将自己的代码提交到 Github 仓库中。

https 提交时,每次都要输入账号和密码(也许康康 OUT 了,可能有不用每次输入的方式),所以弃用此种方式,选用了 ssh 提交方式,因为 ssh 提交方式能够使用 ssh 证书进行验证,无需输入账号密码,这对于编写脚本自动提交是有很大好处的!

Git 安装

要使用 Github,必须要确保服务器上安装有git 软件,因为 Github 就是使用 git 进行项目管理,安装的方式多种多样,康康是 FreeBSD 系统,直接使用 pkg 进行安装。

pkg install git

安装完成后,请初始化 git 邮箱及用户名。

git config --global user.name "usebsd" git config --global user.email "admin@usebsd.com"

请确保 usebsd 与您的 Github 账号相同,确保 admin@usebsd.com 与您的 Github 邮箱相同。

SSH 证书生成

我们需要生成一份 ssh 证书,用以在提交的时候使用证书验证,无需输入账号密码,在生成证书前,请确保所使用的服务器账号为备份账号,且拥有相应的访问权限,并确保账号拥有使用 git 的权限,这里康康使用 root 账号进行证书生成。

ssh-keygen -t rsa

遇到输入直接回车,完成后在 /root 下会生成一个 .ssh 目录,目录中有两个文件 id_rsaid_rsa.pub,咱们查看 id_rsa.pub 的文件内容。

cat /root/.ssh/id_rsa.pub

并复制文件中的内容进行留存。

Github 证书配置

打开 Github 并登录账号,在设置中进行 ssh 证书配置,网址是:https://github.com/settings/keys,点击 New SSH key 按钮,在 Title 中随便起一个名字,在 Key 中将刚才复制的 id_rsa.pub 文件内容粘贴进行并点击 Add SSH key 保存。

Github 仓库建立

打开https://github.com/new,填写仓库名称,并在下方选择Private,这就是创建隐私仓库,毕竟自己的网站数据肯定不能让别人看到的!

创建完成后,在本地服务器创建仓库目录,比如这里康康准备将备份数据保存在 /data/backup 目录中,则执行命令:

mkdir -p /data/backup cd /data/backup git init git remote add origin git@github.com:usebsd/backup.git

其中 git@github.com:usebsd/backup.gitGithub给出的 ssh 提交地址,usebsd是用户名,backup.git则是仓库。

首次提交

在创建自动脚本提交之前,请先手动提交一次,因为首次提交是需要有个确认动作的,在自动脚本里懒得弄提交确认。

cd /data/backup touch README.md git add . git commit -m "first commit" git push -u origin master

这时可能会有一个 The authenticity of host 'github.com' can't be established. 的提示,直接 yes 确认即可,提交完成后,回到 Github 中,刷新页面看看,仓库里已经有了一个 README.md 文件了,证明咱们提交成功了。

若提交出现错误,请参考以下解决方案:

报错提示: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@usebsd.com”

报错提示:Permission denied (publickey).
方法一
进入根目录的.ssh 文件夹,将你的 github 密匙文件,重新更名为 id_rsa。
方法二
将 github 密匙添加到 ssh agent,比如密匙名称为 github,使用命令:
ssh-agent bash
ssh-add ~/.ssh/github

自动脚本

当首次提交没有任何问题后,咱们就可以使用自动脚本进行每日备份,自动脚本适用于 FreeBSD 系统,Linux系统未进行测试

#!/bin/sh

backup_dir="/data/backup" # 备份保存地址,也就是本地仓库路径
expired_days=5 # 过期备份天数,将自动删除指定天数之前的备份数据,避免数据过多过大
DBHost="127.0.0.1" # 数据库服务器地址
DBUser="root" # 数据库登录账号
DBPass="www.usebsd.com" # 数据库登录密码
DBName="usebsd" # 数据库名称
WebPath="/data/www" # 网站文件路径地址
DBFile=DB_`date +%Y%m%d`.tgz
DBOld=$backup_dir/DB_`date -v -${expired_days}d +%Y%m%d`.tgz
WebFile=Web_`date +%Y%m%d`.tgz
WebOld=$backup_dir/Web_`date -v -${expired_days}d +%Y%m%d`.tgz

echo "========== `date +%Y%m%d` Backup Start =========="

if [-n "`ls $DBOld 2>/dev/null`"]; then
        /bin/rm -f $DBOld
fi

if [-n "`ls $WebOld 2>/dev/null`"]; then
        /bin/rm -f $WebOld
fi

if [! -e "$DBFile"]; then
        /usr/local/bin/mysqldump -h$DBHost -u$DBUser -p$DBPass $DBName > $backup_dir/$DBName.sql
        cd $backup_dir
        tar czf $DBFile $DBName.sql
        /bin/rm -f $backup_dir/$DBName.sql
fi

if [! -e "$WebFile"]; then
        cd $backup_dir
        tar czPf $WebFile $WebPath
fi

cd $backup_dir
git add .
git commit -m "`date +%Y%m%d` Data Backup."
git push -u origin master

echo "========== `date +%Y%m%d` Backup End ==========

将脚本保存为 github.sh 文件,存放位置任意,比如康康存放在/root/github.sh,并给予可执行权限:

chmod +x /root/github.sh

接下来咱们执行一次脚本,测试是否可以正常备份:

sh /root/github.sh

若无意外,脚本会自动导出数据库文件并压缩为 tgz 格式,自动将网站文件打包为 tgz 格式,并使用当前日期进行重命名,保存到 /data/backup 目录下,之后通过 git 提交到 Github 仓库之中,咱们到自己的仓库中刷新一下页面,应该可以看到自己的备份数据了。

创建自动执行

脚本能够正常运行并备份提交,并不意味着已经完成,因为它并不会自动执行,咱们还需要通过系统自带的 cron 定时任务功能进行自动执行配置。

crontab -e

将光标通过上下左右按键移动到最后,并按下 i 键,在下面添加一行内容:

0 2 * * * /bin/sh /root/github.sh >> /root/backup.log

添加完成后,按下 Esc 键,并输入 :x 回车进行保存,为了保险起见,重启一次定时任务服务。

service cron restart

这样,在每天凌晨 2 点时,将会自动执行一次备份任务,并将执行过程输出到 /root/backup.log 文件中,作为日志进行记录。

正文完
 
Blood.Cold
版权声明:本站原创文章,由 Blood.Cold 2019-05-01发表,共计3948字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。