标签 VPS 下的文章

今年4月份,Google drive的接口更新了,导致grive不可用。由于grive的作者已经N久没更新了,于是VPS的日常备份要做修改了。

一开始的方案是换个客户端。找来找去,就只有这个drive项目了:
https://github.com/odeke-em/drive
由于是用go写的,需要装go相关包。感觉很麻烦,于是放弃安装。

最后改为用Dropbox来做同步。优点是可选客户端比Google drive多,且安装方便。缺点就是免费空间小,默认只有2GB,目前还算够用。

Dropbox的Shell脚本客户端,只需要dropbox_uploader.sh文件就够了:
https://github.com/andreafabrizi/Dropbox-Uploader

参考了以下两个教程:
1)自动备份网站并同步到 Dropbox
http://www.lovelucy.info/backup-website-and-sync-to-dropbox.html
2)Linux VPS备份网站数据到Dropbox
https://maoxian.de/2013/01/linux-vps%E5%A4%87%E4%BB%BD%E7%BD%91%E7%AB%99%E6%95%B0%E6%8D%AE%E5%88%B0dropbox/755.html

简单总结一下步骤:
1)下载 dropbox_uploader.sh
2)登录 dropbox.com 并创建一个应用
3)初始化客户端,运行以下命令,并按提示输入App key和App secret,以及相关设置:

./dropbox_uploader.sh info

4)编写备份脚本。其实跟备份到Google drive的脚本差不多。
5)设置自动运行备份脚本,命令是:

crontab -e

备份脚本参考:

#!/bin/bash

# begin settings
# MySQL settings
MYSQL_USER=user #MySQL用于备份数据的用户
MYSQL_PASS=password #用户密码
MYSQL_BIN=/usr/bin
# backup directory and files
CUR_DIR=/opt/backup
TMP_DIR=$CUR_DIR/tmp
BAK_DIR=/opt/dropbox_bak/$(date +%Y%m%d)
BAK_DB_NAME=bak_$(date +"%Y%m%d")_mysql.tar.gz
BAK_FILE_NAME=bak_$(date +%Y%m%d)_file.tar.gz
# delete local backup files 20 days ago
BAK_EXPIRED=/opt/dropbox_bak/$(date -d -20day +"%Y%m%d")
# dropbox client
DROPBOX=$CUR_DIR/dropbox_uploader.sh
DROPBOX_DEL=/$(date -d -30day +%Y%m%d)
# website directory
WEB_DATA="/opt/www/"
# end settings

# Create the directory when not existed
if [ ! -d $BAK_DIR ]; then
    mkdir -p $BAK_DIR
fi
if [ ! -d $TMP_DIR ]; then
    mkdir -p $TMP_DIR
else
    rm -Rf $TMP_DIR/*
fi
cd $TMP_DIR

# begin backup database
DATABASES=`$MYSQL_BIN/mysql -h "127.0.0.1" -u$MYSQL_USER -p$MYSQL_PASS -Bse 'show databases'`

for DB in $DATABASES; do
    # ignore system tables
    if [ "$DB" == "information_schema" -o "$DB" == "performance_schema" -o "$DB" == "mysql" ]; then
        continue
    fi

    # export data to backup file
    $MYSQL_BIN/mysqldump -h "127.0.0.1" -u$MYSQL_USER -p$MYSQL_PASS $DB > $DB.sql
done

# compress and merge all the database backup files
tar zcf $BAK_DB_NAME *.sql
mv -f $BAK_DB_NAME $BAK_DIR/$BAK_DB_NAME
# end backup database

# backup website files
tar zcpf $BAK_FILE_NAME $WEB_DATA
mv -f $BAK_FILE_NAME $BAK_DIR/$BAK_FILE_NAME

# sync files
$DROPBOX upload -s $BAK_DIR /
$DROPBOX delete $DROPBOX_DEL

# delete local old files
rm -Rf $TMP_DIR/*
if [ -d $BAK_EXPIRED ]; then
    rm -Rf $BAK_EXPIRED
fi

dropbox_uploader.sh的操作跟一般的文件操作类似,可以上传指定的文件或文件夹。

好了,剩下的工作就是想办法免费扩容。

在128MB内存的VPS上折腾了一下MySQL,把过程总结一下记录下来。

1)配置文件
备份原配置文件,把官方配置样例中最低配置的配置文件复制过来,就可以了。命令如下:

mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
cp /usr/share/doc/mysql-server-5.5/examples/my-small.cnf /etc/mysql/my.cnf

2)禁用InnoDB
禁用InnoDB,为了节省内存。

详细参考:
小内存VPS上MySQL5.5内存优化——禁用Innodb引擎
http://hxs.fd.fj.cn/?action=show&id=48

简单来说,就是修改my.cnf,在[mysqld]下增加以下配置:

default-storage-engine = MyISAM
loose-skip-innodb
innodb=OFF

文中还提到MySQL 5.5,还需要添加以下配置,否则程序会很容易退出的:

loose-innodb-trx = 0
loose-innodb-locks = 0
loose-innodb-lock-waits = 0
loose-innodb-cmp = 0
loose-innodb-cmp-per-index = 0
loose-innodb-cmp-per-index-reset = 0
loose-innodb-cmp-reset = 0
loose-innodb-cmpmem = 0
loose-innodb-cmpmem-reset = 0
loose-innodb-buffer-page = 0
loose-innodb-buffer-page-lru = 0
loose-innodb-buffer-pool-stats = 0

3)设置默认字符集UTF-8
登录MySQL后,用以下命令查看字符集设置:

show variables like ‘character%’;

默认字符集一般是latin1,最简单是修改my.cnf文件
[client]增加:

default-character-set = utf8

[mysqld]增加:

character-set-server = utf8

[mysql]增加:

default-character-set = utf8

4)重启MySQL服务

PS. MySQL的错误日志在 /var/lib/mysql/*.err

使用“搬瓦工”的超级便宜VPS已经快3个月了,除了有时晚饭时间比较卡以外,其它方面都工作良好。于是心里开始发痒,想再利用它做更多的事情。

首先,肯定是升级Micro中最高性能的服务,128MB内存版。用过64MB版后,才深深感受到内存的重要性,而“搬瓦工”的空间就是内存比较少。升级过程很简单,用PayPal花费足够的美刀就OK了。付款后立刻看到效果!第一次感受到128MB原来也可以很爽(记得第一台电脑的内存也有256MB啊)。

然后是重装Shadowsocks服务。就为了以后升级方便,因为一开始是用源码编译安装的。关于Shadowsocks服务,真心推荐shadowsocks-libev,用C写的就是效率高、省内存,小内存主机必备。详细安装教程见:http://shadowsocks.org/en/download/servers.html

简单来说就是加入安装源,再用apt-get install安装。

wget -O- http://shadowsocks.org/debian/1D27208A.gpg | sudo apt-key add -
echo "deb http://shadowsocks.org/debian wheezy main" >> /etc/apt/sources.list
apt-get update
apt-get install shadowsocks

再然后是想学下Laravel这个PHP框架(感觉没CodeIgniter那么容易上手),慢慢来吧。

PS.昨天一个网友说也买了个“搬瓦工”的VPS,但是3个月后开始变得好慢。虽然有点担心,但是起码还有三个月可以玩玩,重点是就算不能用,损失也不会很严重(毕竟我的那个才5.99美刀/年)