将linux文件同步至windows下实现自动备份

六 23rd, 2009

对站长来说,丢失数据又没得恢复绝对是恶梦……因此,想到将linux下的数据库和www目录自动备份,因为有win主机闲置,那就存它那了。闲话少说,现在开工:
首先给win主机安装cwrsync server端(基于cygwin和rsync的同步软件),server端含cygwin的一些工具,主要是一些linux的基本命令工具
cwrsync官方页
win软件安装没啥好说,值得提的是配置文件,在安装目录下有rsyncd.conf编辑它,这里举例说明

uid = nobody
gid = nobody
use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log #LOG日志
pid file = rsyncd.pid #进程pid
secrets file = password#授权的用户密码文件格式如 username:password
# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#上面意思是cygin使用的路径规则
[backup]#域
path = /cygdrive/f/backup#域主目录
read only = false
list = false
auth users = langzi
transfer logging = false

接下来就可以在linux下使用rsync连到这台win主机了
rsync /data/backup/db/* langzi@60.*.*.*::backup/db/ –password-file=/tmp/pass
还有两段备份代码,也送给有缘人了^_^

'www.phpman.com.cn/htdocs',
	'www.e579.net' =>'www.e579.net/htdocs'
 
);
define('DS',DIRECTORY_SEPARATOR);
define('MAXSIZE',1024*1024*200);
foreach($subdirs as $k=>$v){
	backup($k,$wwwroot.$v);
}
 
/**
 * 备份目录
 *
 * @return void
 * @author phpman
 **/
function backup($name,$dir)
{
	global $backup_dir;
	file_exists($backup_dir) or mkdir($backup_dir);
	if(file_exists($dir) && file_exists($backup_dir)){
		$cmd = sprintf("du -csb %s|awk '/total$/{print $1}'",$dir);
		$total = exec($cmd);
		if($total >MAXSIZE){
			return false;
		}else{
			chdir($dir);
			$cmd = sprintf("ls -l %s|awk '\$NF~/^%s\.[0-9]+\.tar\.gz$/{print \$NF}'",$backup_dir,preg_quote($name),date('Ymd'));
			$oldfile = exec($cmd);
			$newfile = sprintf("%s.%s.tar.gz",$name,date('Ymd'));
			if($oldfile != $newfile){
				$cmd = sprintf("tar czf %s%s *",$backup_dir,$newfile);
				system($cmd,$error);
				chdir($backup_dir);
				if($error === 0)
				file_exists($oldfile)&&unlink($oldfile);
			}
		}
	}
}
?>
标签:
  1. Veidy.lei
    六 30th, 200923:49

    数据要好好的保存啊,不要搞丢了哟 :mrgreen:

;) :| :x :twisted: :roll: :oops: :o :mrgreen: :lol: :idea: :evil: :cry: :arrow: :P :D :?: :? :) :( :!: 8O 8)

Spam Protection by WP-SpamFree