• 欢迎光临flyzy小站!分享一些学习路上遇到的坑坑洼洼~

adad

结合rsync和crontab全自动备份自己的网站数据

做网站,最重要的就是数据,数据丢了,一切都没了,所以备份就显得至关重要,本文介绍下如何结合rsync和crontab全自动备份自己的网站数据,每日备份,高枕无忧。

 

基本知识介绍

简单介绍下rsync和crontab,rsync是让你在两台VPS之间同步数据的,也就是将你的VPS数据同步到你的备份VPS,而crontab则是Linux内置的用来定期执行程序的命令,你可以方便的设置定时任务。

更多的介绍和安装自己可以Google。

 

rsync备份网站数据

rsync的作用是帮助你实现将建站(或其他作用)VPS的数据同步到你的备份VPS上,所以此处你除了要原先的VPS外,还需要一台专门用来备份的VPS,此处我用的是年付的搬瓦工(2019年搬瓦工购买教程:优惠码使用,支持支付宝/微信/银联支付)。

rsync的参数很多,如果你感兴趣可以自己Google,这里指介绍最简单的一条命令,这个命令的意思是将你建站VPS上的data.zip这个文件同步到你的备份VPS(104.11.11.11)的/root/backup路径下:

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

而备份建站VPS数据,除了网站目录外,就是MySQL数据库数据,MySQL数据就通过最简单的mysqldump命令即可实现,这里放一个我用来备份网站数据的脚本命令,相关参数大家自己改一下:

DATE=$(date +%Y%m)
BLOG_DIR='/home/wwwroot/www.flyzy2005.com'
BLOG_NAME='www.flyzy2005.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

如果没有配置ssh公钥,那么每次rsync的时候都要输入备份VPS的root密码,所以可以先配置下ssh公钥。

首先在建站VPS上生成ssh公钥,一路回车就好:

ssh-keygen

之后会在/root/.ssh下生成一个id_rsa.pub文件,这个就是你的建站VPS的ssh公钥,拷贝到你备份VPS的/root/.ssh下,例如我的ssh公钥文件是flyzy2005.pub,拷贝完成后,在备份VPS的/root/.ssh目录下执行如下命令,保存对应的公钥文件:

cat flyzy2005.pub >> authorized_keys

配置完成后,以后同步就不需要输入密码了。

 

crontab设置定时任务

走通rsync同步后,将上述的命令写入到sh脚本文件中,之后只需要结合crontab设置定时任务即可完成定时备份数据的目的。

这里放两个我使用的crontab命令(使用crontab -e添加crontab任务):

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

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