一直想对VPS进行一次备份,苦于没有找到比较好的办法,所以一直搁置。这次,经过一番周折,终于找到了VPS备份利器--Duplicity。
Duplicity是一个使用Python语言实现的文件增量备份工具,其利用rsync底层类库,实现仅把文件中变化了的数据存入增量备份包的工作方式(类似给文件生成Patch补丁的方式),调用pgp对数据包进行签名和加密,而且支持本地文件系统、远端ftp、ssh/scp、rsync、WebDAV、WebDAVs、HSi以及Amazon S3等非常丰富的备份存储介质。
安装很简单
apt-get install duplicity
这里放出我自己写的两个VPS备份脚本。
1.备份MySQL数据库(同时导出多个数据库到一个目录并进行压缩,最后删除7天前的备份,以节省空间)
backup_mysql.php
#! /usr/bin/php -q
<?php
ini_set('memory_limit', '-1');
$db_user = 'root';
$db_pass = 'your_password';
$backup_dbs = array('test','db1','db2');
$backup_dir = '/home/rebill/VPS/backup';
$mysqldump_shell = '/usr/local/mysql/bin/mysqldump';
function diffTime() {
global $startingTime;
return time() - $startingTime . " secs.";
}
$mysqlDumpTab = array($mysqldump_shell,
"--add-drop-table",
"--add-drop-database",
"--complete-insert",
"--create-options",
"--comments",
"--opt",
"--quote-names",
"--skip-extended-insert",
"-u $db_user",
"--password='$db_pass'"
);
echo "MySQL Backup. backing up database\n";
foreach($backup_dbs as $db){
$mysqlDump = implode(' ', $mysqlDumpTab);
$mysqlDump .= " --databases $db";
$sql_file = $backup_dir. "/" . $db . "_" . date('Y-m-d'). ".sql";
// Dump a whole database
$startingTime = time();
echo "[mysqldump] dumping database $db.sql\n";
$mysqlDumpCommand = $mysqlDump . " > " . $sql_file;
system($mysqlDumpCommand, $retValue);
if ($retValue != 0) { echo "$db mysqldump Error!\n"; exit(-1); }
echo "[mysqldump] export over in ", diffTime(), "\n";
// Compress it
$startingTime = time();
$gzipCmd = "gzip -9 " . $sql_file;
echo "[gzip] $gzipCmd\n";
system($gzipCmd, $retValue);
if ($retValue != 0) { echo "$sql_file Compress Error!\n"; exit(-1); }
echo "[gzip] compression done in ", diffTime(), "\n";
}
// Delete old files (7 days ago)
echo "Delete old files...\n";
$delCmd = "find $backup_dir -type f -mtime +7 | xargs rm -f";
system($delCmd, $retValue);
if ($retValue != 0) { echo "Delete Error!\n"; exit(-1); }
echo "Done!\n";
return 0;
2.duplicity备份VPS数据(如果你不喜欢Web数据和MySQL数据分开备份,你可以使用--include命令同时备份多个目录)
duplicity_backup.sh
#!/bin/bash
#
# Set GnuPG passphrase
#
export PASSPHRASE=rebill.info
#
# Backup Config
#
REMOTE_SERVER="192.168.0.2"
REMOTE_USER="root"
REMOTE_PASS="your_password"
REMOTE_WEB_DIR="/root/vps_backup/web"
REMOTE_DB_DIR="/root/vps_backup/db"
LOCAL_WEB_DIR="/home/wwwroot/"
LOCAL_DB_DIR="/home/db_backup/"
#
# Backup Web Data
#
duplicity $LOCAL_WEB_DIR scp://$REMOTE_USER:$REMOTE_PASS@$REMOTE_SERVER/$REMOTE_WEB_DIR
#
# Backup DB Data
#
duplicity $LOCAL_DB_DIR scp://$REMOTE_USER:$REMOTE_PASS@$REMOTE_SERVER/$REMOTE_DB_DIR
PS.具体参数请根据自己情况自行更改。
duplicity的更多用法请参考duplicity的手册:http://duplicity.nongnu.org/duplicity.1.html