- A+
前言
无论是任何网站、任何站长,对于网站数据的重要性肯定都有一定的了解,而作为站长的我们,对于数据的备份是必须提高到最高级别的重视程度。
如果关注过康康的朋友,应该知道康康之前使用过七牛、阿里等进行数据存储,目前使用的腾讯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 "[email protected]"
请确保usebsd
与您的Github
账号相同,确保[email protected]
与您的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 [email protected]:usebsd/backup.git
其中[email protected]: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 "[email protected]"报错提示: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
文件中,作为日志进行记录。
- 我的微信
- 这是我的微信扫一扫
-
- 我的微信公众号
- 我的微信公众号扫一扫
-