共计 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_rsa
和id_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.git
是Github
给出的 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
文件中,作为日志进行记录。