这里的双机指的是VPS而不是虚拟机空间,要实现Wordpress双机备份你得有两台VPS主机。为什么要双机备份呢?因为再稳定的VPS也不能保证长时间运行而不进行主机维护、网络维护。
以前用Linode的时候偶尔也会出现线路抽风,后来由于主机价格的原因换到了Buyvm,真真切切体会到贵有贵的道理便宜有便宜的原因,用Linode的时候由于服务器稳定很少进行维护以至于长期不登录而忘记root密码,而Buyvm呢,每个月总有那么一两次,要么是母鸡维护,要么是防火墙升级、路由切换什么的,不过每次都有通知暂停服务器时间最长2小时左右。
最近正好手头有两台VPS,每个上面有两个小站,流量都不大,使用率也不是很高,完全可以运行在一台上面。于是想到了用下面的方法实现Wordpress双机备份,当然这种方式仅限于应用到按天更新的小小博客。流量大的、交互多的、会员多的如果不在乎一两天数据的可以用这种方式冷备。
原理挺简单的,就是让两台主机的内容一模一样,当然包含数据库的内容,用dnspod的域名监控,当网站访问出现问题的时候DNS会临时指向备用IP,尝试了几次切换时间最长不会超过200秒。
1.搭建服务器环境lnmp。这个不用多说,能想到实现Wordpress双机的,搭环境的活应该不在话下。保持两台主机数据一致即可。
2.主备节点的设置免密码登录。主节点就是平时访问网站的主机,备节点数据保持和主机点一致。为了传输数据和运行对端脚本,先在双机实现免密码登录
首先在主节点上操作用ssh-keygen创建公钥
#ssh-keygen -t rsa
提示“Enter passphrase (empty for no passphrase): ”的时候按回程跳过,设置免密码登录不可以使用passphrase
之后会看到下面类似告诉你密钥和公钥的保存位置
Your identification has been saved in /home/fendou/.ssh/id_rsa.
Your public key has been saved in /home/fendou/.ssh/id_rsa.pub.
然后将主节点的公钥文件传个备节点(假设主节点ip为192.168.1.11,备节点ip为192.168.1.12),实现主节点访问备节点无密码登录
#scp id_rsa.pub [email protected]:~/.ssh/authorized_keys
在主节点上运行,在提示YES/NO的时候输入YES,首次登陆会保存认证过的主机信息到.ssh/known_hosts中,下次ssh访问的时候就不需要密码也不会弹出提示了
#ssh 192.168.1.12
备节点的设置……(应该不用多说了吧!)
3.设置主节点备份脚本,就叫做backup-wpfendou.sh吧
登录主节点192.168.1.11
#cd /home #mkdir backup #cd backup #vim backup-wpfendou.sh
编辑主节点的备份脚本用于Crontab执行备份
#!/bin/bash #!/bin/bash # description: WordPress backup shell script # site: www.fendou.info st=$(date +%s) USER="root" #mysql root PASSWORD="chadianbamimaxielule" #root's password DATABASE="wpfendou" #backup database name MAIL="*a*g*e*8*1*2*@gmail.com" #your mail address BACKUP_DIR=/home/backup/wpfendou/ #备份文件存储路径 LOGFILE=/home/backup/data_backup.log #日志文件路径 #DATE=`date +%Y%m%d-%H%M` #用日期格式作为文件名 DUMPFILE=$DATABASE.sql ARCHIVE=$DATABASE.sql.tar.gz OPTIONS="-u$USER -p$PASSWORD $DATABASE" #判断备份文件存储目录是否存在,否则创建该目录 if [ ! -d $BACKUP_DIR ] then mkdir -p "$BACKUP_DIR" fi #开始备份之前,将备份信息头写入日记文件 echo " ">> $LOGFILE echo "--------------------" >> $LOGFILE echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE echo "--------------------" >> $LOGFILE #切换至备份目录 cd $BACKUP_DIR mysqldump $OPTIONS > $DUMPFILE #判断数据库备份是否成功 if [[ $? == 0 ]] then tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1 echo "[$ARCHIVE] Backup Successful!" >> $LOGFILE rm -f $DUMPFILE #删除原始备份文件,只需保留备份压缩包 # 把压缩包文件备份到其他机器上。 scp -P 2345 $BACKUP_DIR$ARCHIVE [email protected]:/home/recovery/wpfendou/ >> $LOGFILE 2>&1 else echo "Database Backup Fail!" >> $LOGFILE #备份失败后向管理者发送邮件提醒 mail -s "Database:$DATABASE Daily Backup Fail!" $MAIL < . fi echo "Backup DB Process Done" mail -s "Database:$DATABASE Daily Backup Successful" $MAIL < . #echo "Backup FILES www.fendou.info" scp -P 2345 -r /home/wwwroot/www.fendou.info/ [email protected]:/home/wwwroot/ echo "Backup FILES Process Done" #Cleaning find $BACKUP_DIR -type f -name "*.tar.gz" -exec rm -f {} \; #Remote Recovery ssh -p 2345 [email protected] "cd /home/recovery ; ./recovery-wpfendou.sh" echo "Remote Recovery Finished"
一切尽在脚本中,需要特别注意的是scp -大P 指定主机的ssh端口,一般默认22端口是不需要此参数的,另外还是ssh -小p 也是ssh端口,Linux真矫情。脚本开始定义一些路径和用户名密码,貌似有点儿不安全:)然后开始导出数据库并tar打包压缩,然后传到备节点,接着直接传网站文件,抱歉没有写成打包压缩传送,我觉得这样一屏一屏的刷文件有黑ker的感觉。注意最后一行是远程执行备节点的恢复脚本,请继续看下一小节。
3.设置备节点恢复脚本,就叫做recovery-wpfendou吧
#!/bin/bash # description: WordPress recovery shell script # site: www.fendou.info USER="root" #mysql root PASSWORD="chadianbamimaxielule" #root's password DATABASE="wpfendou" MAIL="*2*[email protected]" #mail RECOVERY_DIR=/home/recovery/wpfendou/ #备份文件存储路径 LOGFILE=/home/recovery/data_recovery.log #日志文件路径 OPTIONS="-u$USER -p$PASSWORD $DATABASE" cd $RECOVERY_DIR file=$(ls *.gz 2> /dev/null|wc -l) if [[ "$file" != "0" ]] then ARCHIVE=$DATABASE.sql.tar.gz #echo "Recovery Database ARCHIVE File Name:"$ARCHIVE tar -vxf $RECOVERY_DIR$ARCHIVE DUMPFILE=$DATABASE.sql #echo "Recovery Database DUMPFILE Name:"$DUMPFILE mysql $OPTIONS < $DUMPFILE echo "$(date) -- [$DUMPFILE] Recovery Successful!" >> $LOGFILE rm -f $ARCHIVE $DUMPFILE mail -s "Database:$DATABASE Daily Recovery Successful" $MAIL < . else echo "$(date) -- DUMPFILE not Found!" >> $LOGFILE mail -s "Database:$DATABASE Daily Recovery Fail" $MAIL < . fi echo "Recovery Process Done"
其实这个脚本就是用来恢复数据库的,细心的可能发现两个脚本中定义的mail为啥一个是gmail的邮箱而另一个是163的邮箱,这尼玛是因为备节点的IP被gmail列黑名单了,不得已启用163的转发,害人折腾半天postfix。
4.设置Crontab每天晚上在主节点上执行备份
0 1 * * * /home/backup/backup-wpfendou.sh
5.最后一步就简单了,把域名转到dnspod管理,监控网站并设置备节点IP,有图有真相!
“WordPress双机备份”上的4条回复
文章写的很详细。
[…] 未越狱的IOS设备通过Goagent访问youtube还是不如VPN稳定,最近注册了一个budgetvm本来是用作WordPress双机备份的。主VPS用的buyvm不支持安装pptp VPN,而budgetvm是openvz架构支持pptp协议的VPN。转一篇openvz架构vps搭建pptp协议的vpn。很简单,5分钟搞定。 […]
贵博客有个性 个人非常喜欢
http://www.slll.info
赞一个 支持一下博主 不错的文章 学习了