备份是个好习惯。然而如何上传备份一直让人烦恼。一般来说都是把备份放到网盘客户端的同步目录后让网盘客户端同步到网盘服务器,这样的话就浪费不少本地空间了。所以一般我都是用第三方脚本上传(参考《全自动定时备份VPS数据到Dropbox》),上传完就把本地备份删除。
如果网盘都能像NFS那样挂载,那多好啊?答案是可以的Webdav + Fuse + davfs。
国内外支持webdav的网盘有坚果云、Yandex Disk、Box.net、4shared、Dropbox(通过dropdav、收费)、Google Drive(通过 DAV-Pocket),这里以Yandex Disk为例。
一、Linux下挂载挂载 Yandex Disk。
1、安装 fues 和 davfs
yum install fuse davfs2 #CentOS/RHEL
apt-get install fuse davfs2 #Debian/Ubuntu
2、挂载Yandex Disk
mkdir -m 755 /mnt/yandex
mount -t davfs https://webdav.yandex.com /mnt/yandex
过程中会提示输入用户名密码
3、检测挂载是否成功
[root@s8 ~]# df -h /mnt/yandex
Filesystem Size Used Avail Use% Mounted on
https://webdav.yandex.com 10G 9.4G 627M 94% /mnt/yandex
我的已经用了94%的空间。
二、数据备份
直接拿出以前给出过的备份脚本,小改一下就行了
#!/bin/bash
# Settings
YANDEX_DISK="/mnt/yandex" #网盘挂载路径
BACKUP_SRC="/home/wwwroot/website" #需要备份的文件夹,可以多个,请用空格分隔
BACKUP_DST="/backups" #备份到网盘里的什么路径下
MYSQL_SERVER="127.0.0.1" #连接本地MySQL
MYSQL_USER="root" #本地MySQL的用户
MYSQL_PASS="123456" #本地MySQL的密码
# 往下不要随意编辑
BACKUP_DST=$(echo "$YANDEX_DISK/$BACKUP_DST" | sed 's#//#/#')
NOW=$(date +"%Y.%m.%d")
DESTFILE="$BACKUP_DST/$NOW.tgz"
LAST=$(date -d "2 months ago" +"%Y.%m.%d") #这里的时间可以根据需要进行修改,如"3 months ago"
df -h | grep "$YANDEX_DISK"
if [ $? -ne 0 ]; then
echo "ERROR. Now exiting..."
exit 1
fi
# Create Directory
ls "$BACKUP_DST"
if [ $? -ne 0 ]; then
mkdir -p "$BACKUP_DST"
fi
# Backup files
ps -e | grep -c mysql
if [ $? -eq 0 ]; then
echo "Dumping databases..."
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p $MYSQL_PASS --all-databases > "$BACKUP_DST/$NOW-Databases.sql" #这里的命令路径可以根据需要进行修改
else
echo "ERROR. Now exiting..."
exit 1
fi
ls > /dev/null
if [ $? -eq 0 ]; then
echo "Packing files..."
tar -czf "$DESTFILE" "$BACKUP_SRC" "$BACKUP_DST/$NOW-Databases.sql"
else
echo "ERROR. Now exiting..."
exit 1
fi
if [ $? -eq 0 ]; then
echo "Cleaning the backups..."
rm -f "$BACKUP_DST/$NOW-Databases.sql"
rm -f "$BACKUP_DST/$LAST.tgz"
else
echo "ERROR. Now exiting..."
exit 1
fi
如图所示已经备份成功了
三、总结
各家网盘都想通过接口来控制用户,现在都不想搞 Webdav 了,也只好退而求其次,使用官方客户端了。