在各大网盘都打样甚至删库跑路的情况下,百度云盘还是坚持下来确实不容易,其在国内同行业中的地位可见一斑。当然限速很严重,且如今新注册账户容量只有1T(银行卡验证后可免费升级2T)。不过这些问题都可以解决。对,所有可以用RMB解决的事情都不是事儿 。此外,一般网站(比如博客)数据一般都不大,压缩后就更小了。还有就是服务器后台自动加密打包,数据安全性亦可保障。介于以上原因,可选择百度云盘作为备份工具。
  此方法备份数据 = Zip加密打包 + 文档结构及属性保持 + 自动化 - 需每月验证1次(待测试)

一、程序安装

1. zip、unzip安装

    1、apt-get install zip  或  yum install zip
    2、apt-get install unzip 或  yum install unzip

2. bpcs_uploader 安装

    1、cd /root/
    2、wget https://github.com/oott123/bpcs_uploader/archive/master.zip
    3、unzip master.zip
    4、cd /root/bpcs_uploader-master
    5、chmod +x bpcs_uploader.php
    6、php -d disable_functions -d safe_mode=Off -f bpcs_uploader.php quickinit

3. 百度认证

  完成2步骤后,会在SSH里面出现这样一段文字:

...
Input gq5uvp9n as the user code if asked.
After granting access to the application, come back here and press Enter to continue.

  复制上面文字中的:gq5uvp9n ,修改为以下链接(就是这部分...code=gq5uvp9n&...)。然后浏览器中打开链接:

http://openapi.baidu.com/device?code=gq5uvp9n&display=page&redirect_uri=&force_login=

点击确认后回到SSH,回车,随后出现:

Access Granted. Your Storage Status: 2054.73G/2056.00G (99.94%)
Enjoy!
即表示安装已经完成。输入:
php -d disable_functions -d safe_mode=Off -f bpcs_uploader.php quota

查询下容量。

二、 上传数据

1、shell脚本—数据库压缩及上传

#!/bin/bash

# 打印当前时间
echo `date +"%Y-%m-%d %H:%M:%S"`

# 数据库用户名和密码 要备份的数据库
MYSQL_USER="root"
MYSQL_PASS="12345678"
ZIP_PASS="12345678"

# 数据库临时备份目录
BACK_DIR="/root/bdbackup/mysql"

# 保存的名字
MYSQL_BACK_NAME=mysql_$(date +"%Y%m%d").zip

# 程序目录
bpcs_uploader="/root/bpcs_uploader-master/"

# 清空本地
 rm -rf ${BACK_DIR}*

# 判断本地备份目录,不存在则创建
if [ ! -d $BACK_DIR ] ;
  then
   mkdir -p "$BACK_DIR"
fi

# 进入备份目录
cd $BACK_DIR

# 导出数据库,一个数据库一个压缩文件
for db in `/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
    (/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} | gzip -9 - > ${db}.sql.gz)
done
 
# 压缩数据库文件为一个文件,并加密
zip -q -r -P $ZIP_PASS $MYSQL_BACK_NAME $BACK_DIR

# 上传到云盘
php -d disable_functions -d safe_mode=Off -f ${bpcs_uploader}bpcs_uploader.php upload $MYSQL_BACK_NAME $MYSQL_BACK_NAME
rm -rf ${BACK_DIR}*

echo "++++++++++++++++++ over ++++++++++++++++++++++++"
echo
exit 0

注:需要修改以下参数
    1、数据库用户名: MYSQL_USER="root"
    2、数据库密码:MYSQL_PASS="12345678"
    3、压缩文件的压缩解压密码:ZIP_PASS="12345678"

2、脚本运行

在退出VI编辑器之前先验证脚本的文件格式,退出编辑模式后,输入:

::set ff?

回车后,若返回: unix,则表示没问题,反之,输入:

:set ff=unix

:wq后回到SSH命令界面,输入:

1、chmod +x /root/backup-sql.sh (假设脚本的位置在这里)
2、./root/backup-sql.sh

三、数据测试

  回到网盘,进入:我的应用数据->bpcs_uploader。下载备份的数据,解压后得到类似“eonegh.com.sql.gz”这样的文件,登录到数据库后台,备份一遍数据库,再清空eonegh.com。然后导入eonegh.com.sql.gz。回到网站进一步测试数据的完整性。

四、补充说明

1、自动运行

  将脚本添加到自动处理程序cron。

crontab -e
* 3 */3 * * /root/backup-sql.sh 2>&1 | tee -a /root/backup.log

  推荐用VI编辑器,自动执行程序:每3天执行一次备份上传操作,且在第三天的本地凌晨3点执行。日志目录在:/root/backup.log。

2、每月验证

  百度云盘的API上传操作需要每个月验证,待测试。

3、后期改进

  根据测试效果,做后续更新。

4、shell脚本—文件压缩及上传

#!/bin/bash

# 打印当前时间
echo `date +"%Y-%m-%d %H:%M:%S"`

# zip压缩密码
ZIP_PASS="12345678"

# 网站目录
WEB_DIR="/www/wwwroot/eonegh.com"
WEB_DIR2="/www/wwwroot/nav.eonegh.com"

# 排除的目录,比如排除图片和附件目录
EXCLUDE_DIR="/www/wwwroot/eonegh.com/admin"

# 文件临时备份目录
BACK_DIR="/root/bdbackup/data"

# 保存的名字
WEB_BACK_NAME="eonegh.com_$(date +"%Y%m%d").tar.gz"
WEB_BACK_NAME2="nav.eonegh.com_$(date +"%Y%m%d").tar.gz"
BACK_NAME="web_$(date +"%Y%m%d").zip"

# 程序目录
bpcs_uploader="/root/bpcs/"
 
# 清空本地
 rm -rf ${BACK_DIR}*

# 判断本地备份目录,不存在则创建
if [ ! -d $BACK_DIR ] ;
  then
   mkdir -p "$BACK_DIR"
fi

# 进入备份目录
cd $BACK_DIR
 
# 排除目录
for var in ${EXCLUDE_DIR[@]};do
temp="${temp} --exclude ${var} ";
done

# 单独压缩文件
tar -zcPf $WEB_BACK_NAME $WEB_DIR $temp
tar -zcPf $WEB_BACK_NAME2 $WEB_DIR2

# 压缩所有文件为一个文件,并加密
zip -q -r -P $ZIP_PASS $BACK_NAME $WEB_BACK_NAME $WEB_BACK_NAME2

# 上传到云盘
php -d disable_functions -d safe_mode=Off -f ${bpcs_uploader}bpcs_uploader.php upload $BACK_NAME $BACK_NAME

echo "++++++++++++++++++ over ++++++++++++++++++++++++"
echo
exit 0

五、参考文档

1、GitHub - 百度pcs上传脚本
2、Linux定时备份数据到百度云盘 - archoncap - 博客园
3、利用百度云盘进行网站备份 – 小松博客


本文标签:备份云盘恢复