Shell脚本实现自动备份VPS数据到Dropbox

由于买的是廉价的VPS,所以备份是十分重要的,不然辛辛苦苦写的东西,一下子就没有了,是十分痛心的。一说到备份,Dropbox是一个好的选择,这篇文章则讲了在VPS安装Dropbox Cli客户端来实现VPS的自动备份。但是Dropbox会占用一部分的内存,对于“惜内存如金”的小内存VPS,显然是不合适的。而且从文章来看配置也非常的麻烦。幸好有人写出了利用Dropbox API和CURL的脚本DropboxUploader,轻轻松松的解决了问题,基本不占什么内存。以下脚本就是参考了Dropbox Uploader的脚本,该脚本来自这儿,我稍微改动了一下,将数据库也一并打包入备份的包,使得本地也只有一个包,便于操作。

#!/bin/bash
DROPBOX_USER="your_dropbox_user_name"
DROPBOX_PASS="your_dropbox-password" 
DROPBOX_DIR="/backups" 
BACKUP_SRC="/srv/www/samnew.net /etc/nginx "
BACKUP_DST="/root/backup" 
MYSQL_SERVER="127.0.0.1"
MYSQL_USER="your_mysql_user_name" 
MYSQL_PASS="your_mysql_password" 
#
# Stop editing here.
NOW=$(date +"%Y.%m.%d")
DESTFILE="$BACKUP_DST/$NOW.tgz"
 
#
# Upload a file to Dropbox.
# $1 = Source file
# $2 = Destination file.
function dropboxUpload
  {
#
# Code based on DropBox Uploader 0.6 from http://www.andreafabrizi.it/?dropbox_uploader
	LOGIN_URL="https://www.dropbox.com/login"
	HOME_URL="https://www.dropbox.com/home"
	UPLOAD_URL="https://dl-web.dropbox.com/upload"
	COOKIE_FILE="/tmp/du_cookie_$RANDOM"
	RESPONSE_FILE="/tmp/du_resp_$RANDOM"
 
	UPLOAD_FILE=$1
	DEST_FOLDER=$2
 
	# Login
    echo -ne " > Logging in..."
	curl -s -i -c $COOKIE_FILE -o $RESPONSE_FILE --data "login_email=$DROPBOX_USER&login_password=$DROPBOX_PASS&t=$TOKEN" "$LOGIN_URL"
    grep "location: /home" $RESPONSE_FILE > /dev/null
 
		if [ $? -ne 0 ]; then
			echo -e " Failed!"
				rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
				exit 1
		else
				echo -e " OK"
		fi
	# Load home page
	echo -ne " > Loading Home..."
	curl -s -i -b "$COOKIE_FILE" -o "$RESPONSE_FILE" "$HOME_URL" 
		if [ $? -ne 0 ]; then
			echo -e " Failed!"
				rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
				exit 1
		else
            echo -e " OK"
		fi
 
        # Get token
        TOKEN=$(cat "$RESPONSE_FILE" | tr -d '\n' | sed 's/.*<form action="https:\/\/dl-web.dropbox.com\/upload"[^>]*>\s*<input type="hidden" name="t" value="\([a-z 0-9]*\)".*/\1/')
 
       # Upload file
		echo -ne " > Uploading '$UPLOAD_FILE' to 'DROPBOX$DEST_FOLDER/'..."
		curl -s -i -b $COOKIE_FILE -o $RESPONSE_FILE -F "plain=yes" -F "dest=$DEST_FOLDER" -F "t=$TOKEN" -F "file=@$UPLOAD_FILE"  "$UPLOAD_URL"
	    grep "HTTP/1.1 302 FOUND" "$RESPONSE_FILE" > /dev/null
 
	    if [ $? -ne 0 ]; then
	        echo -e " Failed!"
	                rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
	        exit 1
	    else
	        echo -e " OK"
	                rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
	    fi
	}
 
# Backup files.
echo "Dumping databases..."
DATABASE_BAK="$BACKUP_DST/$NOW-Databases.sql"
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p $MYSQL_PASS --all-databases > "$DATABASE_BAK"
 
echo "Packing files..."
tar czf "$DESTFILE" "$DATABASE_BAK" $BACKUP_SRC
dropboxUpload "$DESTFILE" "$DROPBOX_DIR"
 
echo "Cleaning the backups..."
rm -f "$DATABASE_BAK"
find $BACKUP_DST -mtime +7 -delete

将脚本用SCP传送到VPS,并且设定为cron任务,让其自动备份.用crontab -e来编辑,crontab -l来显示所建立的计划任务.如添加为每周日早上5点钟备份则为0 5 * * 0 /bin/bash /root/DropboxBackup.sh,该脚本已经运行2个月,基本正常。

可以改进之处:可以通过RSYNC来实现增量备份。

参考资料:
[1]: 在VPS中安装Dropbox实现网站的实时备份[转]
[2]: 利用Shell脚本实现自动备份VPS数据到Dropbox

VPS架设之Nginx-PHP-fpm

原来的Bluehost.com空间到期了,虽然空间挺好,用的挺顺,但是对于光光做个自己的Blog,记录记录自己的心沥路程并且一天也没几个PV的小站来说,续费有点小贵,已经超过了我对性价比的要求。再则,2011年的计划之一就是有一个自己的VPS,于是成功购买VPS并迁移到新主机。

出于我的价值观,我选择了最基础的VPS,分别购买了:
Alienvps.com的Xen VPS:1CPU,192MB,9G:$29.00 USD/yr
CheapVPS的OpenVZ VPS:1CPU,192MB:$15.00 USD/yr
BuyVM的OpenVZ VPS:1CPU,128MB/256MB,15GB:$15.00 USD/yr

从理论上来说Xen VPS不易Oversell(超售),而且可以做Swap 性能应该相对于OpenVZ的VPS应该会好点,并且支持VPN中的PPTP,而后者只支持OpenVPN(有的通过技术也支持PPTP,如上文的BuyVM VPS),PPTP对于Windoze用户来说设置上比较方便。但是经过我这么用下来之后,由于OpenVZ VPS可用内存虽然都标称只有192MB或者更小,但是他有BrustRAM,所以实际可用内存通常会更大一点达到256MB或者512MB,而Xen VPS虽然可以设置文件Swap,但是利用率不高,通常先榨干了物理内存,然后才用到Swap,即使设置过后也差不多,无论做多少性能优化,内存太小什么活也干不成,所以至少在小内存的比较上,我觉得Xen VPS是发挥不出他的优势的。三者VPS,最后我选择了BuyVM VPS,三者之中磁盘的读写速度是最快的,这估计也是BuyVM有这么多的粉丝,一上线就被抢光常年Out of Stock的原因吧。
Continue reading

千兆网络家庭组网方案

网络发展真的很快,从前几年的56Kbps的猫,到现在普及的4M ADSL,以及部分小区的FTTB(光纤到楼),FTTH(光纤到户)。速度已经到达了Mbps级,下载高清,720P的电影也越来越多,基于宽带的在线业务也越来越多,以往的百兆布线方案已经不能满足一些家庭的要求,随着千兆网络方案的成熟,设备的日益平民化,千兆网络也不是那么遥不可及,千兆网络成为一些影音发烧友,和对网络传输速率要求比较高的人的首选。正好家里最近准备装修,上网查了些资料,下面就对千兆网络的综合布线方案做个总结。

千兆以太网的网络速度为1Gbps,其理论传输速率为1Gbps/8=125M/s,主要采用的介质是光纤,双绞线,铜缆,其中光纤又可以分为多模光纤和单模光纤,前者最大传输距离是550米,后则则是5KM,而5类、超5类、6类的双绞线最大传输距离是100米,而铜缆由于只有25米,现在工业上已经不在使用了。这样下来主要是光纤和双绞线两种方案,由于光纤的布线成本仍然很高,加之家庭网络也不需要这么快的速率,许多家用设备也跟不上,根据短板理论,所以采用双绞线来布线是家庭组网最合适的。而光纤则通常应用在主干网上。

Continue reading

WordPress空间转换和域名转移

2011年的第一件事就是空间和域名的转移,我原来的空间是在hostours,现在搬到了Bluehost.com,Bluehost的主机口碑不错,而且还不限制流量,并且送了一个域名samnew.com,做个人主机非常的不错。好了言归正传,下面是wordpress迁移的具体步骤。
1.文件备份和数据库备份

  • 文件备份很简单,直接用ftp将虚拟主机上的文件全部下载到本地硬盘。
    或者有SSH的话,先SSH到虚拟主机,在根目录执行 tar -czf ./public_html/backup.tar.gz ./public_html然后下载这个包。
  • 数据库的备份要稍微麻烦一点,如果是cPanel控制面板,一般带有phpmyadmin,可以通过该软件来下载数据库,具体操作请参考资料[2]或者用如下命令mysqldump -u dbuser -pdbpass -h dbhost dbname | gzip > backup.sql.gz
    把相应位置的dbuser, dbpass, dbhost和dbname替换为数据库用户名、密码、数据库服务器以及要备份的库名。最后得到的backup.sql.gz,下载到本地即可。(如果数据库比较大,可以使用WP-Optimize这个插件优化一下)

2.迁移到新的虚拟主机空间

  • 文件的迁移,直接FTP上传即可。
  • 数据库的迁移,可以在phpmyadmin这里导入也可以使用source命令导入。

如果域名不变的话,至此空间的转移就完成了。

Continue reading

[译文]How To Perform Treatment of a Sprained Ankle

原文地址:http://orthopedics.about.com/cs/sprainsstrains/ht/sprainedankle.htm
原作者: Jonathan Cluett, M.D.

怎样治疗脚踝扭伤

及早的治疗脚踝扭伤可以帮助加快恢复和减少症状,当你的脚踝受到扭伤的时,这里有一些简单的治疗步骤。
难度:适中
所需时间:30分钟
具体方法如下:

  1. 保护扭伤脚踝
    这很简单,但是令人惊讶的是,人们常常忘记了。脚踝扭伤后尽量不要走路,用甲板或者支架固定以防止扭伤的脚踝进一步恶化。
  2. 注意休息
    让你的脚放假几天,你不用做到什么都不动,但必须要确定脚踝要处于休息的状态,游泳和骑车这些适当的锻炼都是可以的。
  3. 冰敷
    冰敷可以一天做几次,每次15到20分钟,最低限度地来防止肿胀,但是冰敷时间不要超过20分钟,不然给你带来的坏处会多于好处。更多关于受伤时使用冰敷的资料
  4. 压迫
    不需要长时间的压迫,但是当你的脚没有抬高时特别适用,Ace wrap (译者注:一种弹性的包,类似于绷带)比较适合轻压迫。
  5. 抬高
    抬高也有助于减少肿胀的发生,在脚踝下面垫几个枕头在保持脚部舒适的情况下,尽可能抬高脚。(译者注:需要你的脚比你心脏的位置高一些)。
  6. 寻求专业的帮助
    虽然大多数脚踝受伤都很简单,在短时间内都会康复。但是有些伤害比较严重,需要更积极的治疗。

Tips:

  1. 冰敷不要超过20分钟。
    很多人认为时间越长越好,但这是不对的!正确的做法是每隔几个小时冰敷20分钟。更多关于受伤时使用冰敷的资料
  2. 富有创造性的使用冰敷扭伤的脚踝。
    玉米或豌豆的冷冻袋是一个很好的冰袋。–他们可以重复使用,而且里面的东西仍然可以食用。
  3. 压缩绷带应舒适,不应紧绷。
    如果过于紧绷,你的血液循环将受到阻碍,从而减慢愈合过程。