之前发过一个自动备份VPS的脚本(见这里),最近又在这个脚本之上做了一些改动,让其把备份出来的WordPress数据,自动同步到另一台VPS上去,实现定时自动全备份的功能。
整个脚本实现的思路
- 在源VPS上(也就是你放置WordPress博客的VPS)运行此脚本,或者将脚本加入到cron定时任务中,让它定时自动被执行。
- 脚本将你的WordPress的MySql数据导出成.sql脚本,并压缩打包。
- 脚本将你的WordPress存放路径的目录和所有文件作为全备份,打包成压缩包。
- 脚本通过rsync,将Mysql数据包和你的WordPress数据全备份包,同步到目标备份VPS。
使用此脚本的先决条件
你需要两台VPS,一台是你放置WordPress博客的VPS,另一台是专门用来存放备份数据的备份VPS
其实跨VPS同步数据,是比较容易实现的,通常我们可以用scp命令,或者rsync命令。在脚本中,我使用的rsync命令,通过SSH的方式来将数据同步到备份VPS上。
在使用诸如scp,rsync命令时,会遇到一些问题,就是需要输入SSH帐户的password来进行验证,不过这一切是由脚本来完成的,如果需要人工输入password,又如何能达到自动同步呢,这需要我们在两台VPS间建立一种信任关系,其实ssh/scp支持密钥认证方式,执行时可以不用输入密码。
下面是建立密钥认证的方法
- 在源VPS上用户执行ssh-keygen命令,生成密钥文件。
ssh-keygen -t rsa
Generating public/private rsa key pair. Enter file in which to save the key (.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in .ssh/id_rsa. Your public key has been saved in /.ssh/id_rsa.pub.
注意:在程序提示输入passphrase时直接输入回车,表示无证书密码。 上述命令将生成私钥证书id_rsa和公钥证书id_rsa.pub,存放在用户家目录的.ssh子目录中。
- 将公钥证书id_rsa.pub复制到备份VPS的用户目录的.ssh子目录中,同时将文件名更换为authorized_keys。
修改后的脚本如下:
#!/bin/sh
NAME="PackageName"
PRE=`date +%F-%H-%M-%S`
WP_PATH="/home/wordpress"
BACKUP_PATH="/root/backup"
DB_USERNAME="mysql_username"
DB_PASSWORD="mysql_password"
DB_NAME="wordpress_db"
#backup blog
tar zcvf $NAME-$PRE.tar.gz $WP_PATH
mv $NAME-$PRE.tar.gz $BACKUP_PATH
#backup blog db
mysqldump -u${DB_USERNAME} -p${DB_PASSWORD} $DB_NAME | gzip > $NAME-$PRE.sql.gz
mv $NAME-$PRE.sql.gz $BACKUP_PATH
rsync -avz -e 'ssh -p 22' $BACKUP_PATH user@TargetBackupVPS:/home/backup
脚本比较简单,注意替换脚本中的一些路径,mysql用户名,密码,以及你的wordpress路径,和目标备份VPS的SSH帐号和备份路径