前言
站点备份是一个经常需要做的事情,毕竟难免存在服务器异常情况或者黑客入侵,从而丢失数据。我的一个朋友,是一个字幕组的站长,他的服务器到期了,暂时不打算续费。可能是最近版权越来越紧,字幕组毕竟在侵权的边缘。作为他的技术支持,这个备份任务自然落在我身上。于是研究了下备份事宜。
策略
备份通常就是 压缩服务器文件。然后下载到本地即可。
这里存在一些弊端。例如本地下载过慢、本地也容易丢失、不利于传递给其他人等问题。
因此我看中了百度云盘。作为国内目前最广泛使用的个人存储平台,百度云几乎人手一份。
免费、分享方便,空间够大,所以是很好的存储方案。
百度云的缺点是下载速度较慢,但是由于程序自动化完成,所以不用考虑速度问题。
这里备份选择: 先站点备份到远程服务器1份,再备份到云盘1份。 双保险。
其中使用的工具是 bypy
过程
这里是基于实际项目的实践,会使用项目自身的一些工具,例如该项目使用了wdlinux,因此可以自己通过控制面板进行 备份操作。如果你没有该工具,这需要自己 使用类似的面板或者命令进行打包。
-
先基于wdlinux打包站点。
最终我们得到的是一个压缩包文件。位于某个备份路径下。
- 远程服务器镜像备份一次。
在站点服务器,进入备份路径下,
执行scp命令即可。
scp -P 22 -r 备份的压缩文件 远程服务器用户名@远程服务器ip地址:远程服务器备份文件夹路径
此时可以看到文件传递的进度条。此时不可以退出账号或者关闭终端,否则备份停止。
通常站点包含了代码和资源文件,压缩包都很大,如果一直等待备份完毕也不合理,因此可以选择后台执行命令,该操作需要使用nohup和&组合。
nohup scp -P 22 -r 备份的压缩文件 远程服务器用户名@远程服务器ip地址:远程服务器备份文件夹路径 &
注意这里要小心,执行上面命令后先按回车,再输入exit 退出账号 才可以关闭终端窗口。否则会导致nohup异常退出。
注意确保账号拥有文件读写权限。避免备份失败。
如果执行nohup后 还未退出账号,此时可以通过jobs查看 刚刚的命令。
如果已经退出,这只能通过进程来查看命令
ps -aux | grep scp
- 备份到百度云。
- 安装python环境。 这里我的系统是centos已经具备了环境,无需安装。
python --version
Python 2.7.5
pip --version
pip 18.0 from /usr/lib/python2.7/site-packages/pip (python 2.7)
没有环境的请自行百度处理。
- 安装bypy
pip install bypy
- 启动bypy
# 获取存储的空间信息。
bypy info
# 获取百度云文件列表
bypy list
# 将当前目录同步到百度云
bypy syncup
这里只需要以上3个命令即可,其他命令可以通过 bypy --help
查看。
首次执行需要授权。如下图(由于我授权时未截图,这里从网络上找的其他人的图)
其中标红的url 复制到浏览器打开,会出现授权码,再回到终端输入授权码即可。
这里可能出现授权失败的问题,我遇到了。 我的解决方案是
访问 https://passport.baidu.com/accountbind
如下图
鼠标移动上去后会出现删除菜单,删除授权后重新开始授权。
授权过程较慢,请耐心等待。直到出现success即可。
- 开始备份
上面授权成功后,此时可以开始进行备份了。
先创建一个专属备份文件夹。这里路径是 ~/bypy
mkdir bypy
如果你是多个文件,建议先放入到一个文件夹中,压缩之后再处理
压缩命令为
tar -cvzpf 压缩包的名字.tar.gz 需要备份的文件夹
将上面产生的压缩文件 拷贝到 bypy文件夹中。
cp 备份的压缩包 ~/bypy
备份命令如果没指定目录,会默认选择当前执行命令的文件夹。
因此需要先进入bypy文件夹下。
cd ~/bypy
再执行
nohup bypy syncup &
执行上面命令后,先回车。再执行exit 退出账号,再关闭终端。
经过等待一段时间后,自己打开百度云盘即可看到备份文件。
其中nohup.out 文件是nohup命令的输出日志。
初期可以创建一个文本进行测试,有利于很快看到效果。
最后
该备份操作,可以通过crontab计划任务,从而实现定时自动完成备份。这里由于只需要备份1次,因此没有展示。