利用Dropbox备份服务器

cover-image
好叭.用了一段时间的VPS, 昨天想把一个文件改个名字, 手贱把mv写成了rm, 结果那个文件被删除了TvT. 这才算是意识到备份文件的重要性. 昨天用python写了一个备份的脚本, 大概长这样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/python
import os
import time

def backup(dirs, backTo):
tar_today = backTo + time.strftime('%Y%m%d')
if not os.path.exists(tar_today):
os.mkdir(tar_today)
print "Successfully create directory", tar_today
for s in dirs:
directory = tar_today + os.sep + s + '.tar.gz'
command = "tar -zcvf %s %s" % (directory, '/home/' + s)
if os.system(command) == 0:
print "Successfully create backup for", s
else:
print "Backup Failed! For", s

source = ['zeroling'] #balabala
target_dir = '/backup/'

backup(source, target_dir)

我的第一个python脚本好像命名有点乱啊0.0 不管了, 能用就好.
这样就能用crontab每晚半夜运行它来得到备份了

1
2
crontab -e
30 02 * * * /root/backup.py

然后我们需要安装一下dropbox, 官网https://www.dropbox.com/install, 我们选择我们需要的linux32位命令行式安装(!注意, 以下操作我都用的root账户)

1
$ cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86" | tar xzf -

接着,从新建的 .dropbox-dist 文件夹运行 Dropbox 守护程序。

1
~/.dropbox-dist/dropboxd

这个时候大概会出来一个提示, 大概意思是这台电脑还没有与dropbox账户连接, 我们用浏览器访问给出的那个网址按步骤连接即可, 注意这个时候不要按ctrl+c中止这个程序的运行, 等到出现This computer is now linked to Dropbox.字样的时候再按Ctrl+C中止这个程序.

然后去官网下载一个python脚本, https://www.dropbox.com/download?dl=packages/dropbox.py放到自己的PATH里面, 例如我的是/usr/local/bin ,这里是为了方便直接执行. 记得给这个py赋予x(运行)权限

1
chmod +x dropbox.py

然后我们在自己的home目录也就是~下面创建一个Dropbox文件夹, 然后启动这个dropbox监听器

1
2
3
cd ~
mkdir Dropbox
dropbox.py start

接下来只要把东西往这里塞, dropbox就会自动的, 实时的把文件同步到网盘里面去.
我创建了一个软连接到/backup目录, 这样一旦备份完成, 也会自动同步备份到网盘里面.

1
ln -s /backup/ ~/Dropbox/backup/

另外, 我们可以通过dropbox.py status命令来查看当前的同步情况,

1
2
Syncing (4 files remaining, 18 mins left)
Uploading 4 files (181.4 KB/sec, 18 mins left)

它会告诉你当前的dropbox运行情况.

其他的高级功能可以参阅dropbox.py help

对了, 还遗忘了一点, 数据库的备份, 我的VPS上安装了mysql和mongod, 下回再说如何创建这两货的备份.

需要注册Dropbox的同学点这里, 这是一个我的邀请链接, 通过这个注册可以额外获得500M免费空间.

睡觉咯.晚安~

为Mongo和Mysql各写了一个备份的Shell

cover-image

####查早读的同学越来越肆无忌惮了.
好吧.说到昨天给VPS搞全自动备份的事情, 还忘记了数据库备份的导出, 先来说说mysql数据库的备份脚本. 这一段是抄来的, 看起来linux shell也挺好玩的嘛…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

#uncomment this for debug
#set -x

host='localhost'
user='USERNAME'
pass='PASSWORD'
dbs=('db_name_1' 'db_name_2' 'db_name_3')
dir='/backup'
todaydir="$dir/`date +%Y%m%d`"

mkdir -p $todaydir

for db in ${dbs[@]}; do
mysqldump --add-drop-database -u"$user" -p"$pass" -h"$host" -B $db > "$todaydir/$db.dump.sql"
done

#remove directories modified 15 days ago
find "$dir" -mindepth 1 -maxdepth 1 -type d -mtime +15 -exec rm -rf {} \;

再把这个sh放进crontab里面就搞定了

然后再根据这个YY出了mongodb的备份脚本

1
2
3
4
5
6
7
user='USERNAME'
pass='PASSWORD'
dir='/backup'
todaydir="$dir/`date +%Y%m%d`/mongodb"

mkdir -p $todaydir
mongodump -u"$user" -p"$pass" -o"$todaydir"

对于没有启用auth的mongodb用户可以这样三句话搞定

1
2
3
todaydir="$dir/`date +%Y%m%d`/mongodb"
mkdir -p $todaydir
mongodump -o"$todaydir"

也放进crontab里面就搞定了.
dropboxd会把放在/root/Dropbox目录下面的文件夹自动上传到dropbox空间, 配置好dropbox的同学只要创建一个软链接就ok了.

1
ln -s /backup/ /root/Dropbox/backup/

让Apache2使用不同的用户创建文件

cover-image
在配置合租VPS的时候, 我们通常把每个用户的文件限制在/home/$USERNAME/目录下面, 这个目录下面的文件都拥有各自的用户和组, 如果这个时候我们的Apache2使用www-data用户来运行, 那么对于类似php的file_put_contents函数创建的文件, 它们的属主是www-data, 这样一来使用ftp来管理的时候是无法操作的.

大概是我语文表达不好.. 使用中文搜索引擎一直找不到答案, 在google搜索找到了一个提示: Apache的MPM-ITK模块.

由于我的Apache2是在Ubuntu环境下apt-get默认安装的, 在/etc/apache2/mods-enabled/目录下面看到的默认启用的是mpm_prefork模块.

我们把 mpm_prefork.confmpm_prefork.load的软链接删除, 对应换成mpm_itk

1
2
3
4
cd /etc/apache2/mods-enabled/
rm mpm_prefork.conf mpm_prefork.load
ln -s ../mods-available/mpm_itk.conf mpm_itk.conf
ln -s ../mods-available/mpm_prefork.load mpm_prefork.load

然后我们需要修改一下每个用户的设置, 在VirtualHost标签闭合之前加上

1
AssignUserId {user} {group}

最后重启一下apache服务器就可以生效了

1
service apache2 restart