VPS 网站数据全自动每天备份方法分享:rsync + crontab

文章目录
隐藏
1
一、材料准备
2
二、数据同步设置
3
三、定时任务设置

做网站最重要的莫过于数据了,昨天网站因为机房交换机问题宕机了 9 个小时(详情),但是因为没有每天备份网站数据,能拿到数据的只有 4 天前的。吃一堑长一智,现在决定每天定时备份 便宜VPS网 网站数据,采用的技术栈就是 rsync + crontab,将网站数据备份到另一台 VPS 上。这里分享下这个网站数据全自动每天备份的方法。

一、材料准备

除了自己建站的服务器外,还需要一台 VPS 作为备份服务器,这一台 VPS 的线路不是特别重要,数据可以慢慢传输,能稳定传完就行了,最好找一个跟你建站 VPS 之间传输速度还可以的 VPS 作为备份服务器。

根据你网站数据的多少决定备份服务器的硬盘容量,网站需要备份的数据包括数据库数据(一般就几十兆)和网站数据,这个如果你图片比较多的话可能会上 G,便宜VPS网 的网站数据大小就差不多 1G,所以如果每天备份的话需要备份服务器的硬盘容量大于 30G(如果你每天备份,每月清理一次数据的话)。

便宜VPS网 放在 GigsGigsCloud 的香港 VDS 上,备份服务器我用的是 HostDare,昨天的传输速度是 13.81MB/s。如果你还没有合适的备份服务器,也可以考虑 HostDare,他家的硬盘比较大:HostDare:洛杉矶 CN2 GIA,洛杉矶 CN2 GT 方案全整理,终身七五折。

二、数据同步设置

两台 VPS 之间的数据传输借助的是 rsync,这里介绍一个传输命令:

rsync -avP data.zip root@104.11.11.11:/root/backup

这条命令的作用是将建站 VPS 上的 data.zip 传输到备份 VPS(IP 为 104.11.11.11)上的 /root/backup 目录下。

备份思路很清楚:

  1. 导出数据库;
  2. 压缩网站数据;
  3. 将数据库数据和网站数据打包好;
  4. 利用 rsync 将打包后的数据传输到备份 VPS 上。

这里分享一个写好的打包与传输脚本,保存为 backup.sh:

DATE=$(date +%Y%m)
BLOG_DIR='/home/wwwroot/www.pianyivps.com'
BLOG_NAME='www.pianyivps.com'
MYSQL_USER='user'
MYSQL_PASS='password'
DB='db'
BACKUP_DIR='/root/backup'
BACKUP_IP_DEST='104.11.11.11'
BACKUP_DIR_DEST='/root/backup'
if [ ! -d ${BACKUP_DIR} ]; then
  mkdir ${BACKUP_DIR}
fi
cd ${BACKUP_DIR}
 
mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${DB} > ${DB}_${DATE}.sql
 
echo "SQL size: $(wc -c ${DB}_${DATE}.sql | awk '{print $1}')"
 
zip -r ${BLOG_NAME}_${DATE}.zip ${BLOG_DIR} > /dev/null
 
echo "WWW size: $(wc -c ${BLOG_NAME}_${DATE}.zip | awk '{print $1}')"
 
zip ${BLOG_NAME}_${DATE}_ALL.zip ${BLOG_NAME}_${DATE}.zip ${DB}_${DATE}.sql > /dev/null
 
rsync -avP ${BLOG_NAME}_${DATE}_ALL.zip root@${BACKUP_IP_DEST}:${BACKUP_DIR_DEST}
 
rm -rf ${DB}_${DATE}.sql ${BLOG_NAME}_${DATE}.zip ${BLOG_NAME}_${DATE}_ALL.zip
 
echo ${BLOG_NAME}_${DATE}_DONE

为了防止每次传输数据都需要输入 root 密码,那么可以先配置好 SSH 公钥。

1.在建站 VPS 上生成 SSH 公钥

生成 SSH 公钥的命令如下,一路回车即可,生成的公钥为 /root/.ssh/id_rsa.pub

ssh-keygen

2.将建站 VPS 的 SSH 公钥保存到备份 VPS 上

将刚才的 id_rsa.pub 重命名,例如这里我重命名为 pianyivps.pub,再把文件拷贝到备份 VPS 的 /root/.ssh 下,将改公钥保存到备份 VPS 上:

cat pianyivps.pub >> authorized_keys

之后,再用 rsync 时就不需要输入 root 密码了。

三、定时任务设置

最后的定时任务就是借助 crontab 命令了,例如我希望每天 0:30 备份网站数据:

# 每天0点30分执行/root/backup.sh脚本,执行的日志保存在/root/backup.log中
30 0 * * * /root/backup.sh >> /root/backup.log 2>&1

OK,大功告成,数据每日自动备份,高枕无忧。