rsync安装、配置全攻略 不指定

jed , 2012-12-29 12:03 , 服务器技术 , 评论(0) , 阅读(11066) , Via 本站原创
一.介绍 (不想看直接可以跳过)

Rsync 是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件。 Rsync 本来是用以取代 rcp 的一个工具,它当前由  rsync.samba.org 维护。 Rsync 使用所谓的“ Rsync 演算法 ”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。运行 Rsync server 的机器也叫 backup server ,一个 Rsync server 可同时备份多个 client 的数据;也可以多个 Rsync server 备份一个 client 的数据。

  Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。 Rsync server 会打开一个 873 的服务通道 (port) ,等待对方 Rsync 连接。连接时, Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。

  Rsync 支持大多数的类 Unix 系统,无论是 Linux 、 Solaris 还是 BSD 上都经过了良好的测试。此外,它在 windows 平台下也有相应的版本,比较知名的有 cwRsync 和 Sync2NAS 。

  Rsync 的基本特点如下:

  1. 可以镜像保存整个目录树和文件系统;

  2. 可以很容易做到保持原来文件的权限、时间、软硬链接等;

  3. 无须特殊权限即可安装;

  4. 优化的流程,文件传输效率高;

  5. 可以使用 rcp 、 ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;

6. 支持匿名传输。

核心算法介绍:

假定在名为α和β的两台计算机之间同步相似的文件 A 与 B ,其中α对文件 A 拥有访问权,β对文件 B 拥有访问权。并且假定主机α与β之间的网络带宽很小。那么 rsync 算法将通过下面的五个步骤来完成:

  1. β将文件 B 分割成一组不重叠的固定大小为 S 字节的数据块。最后一块可能会比 S  小。

  2. β对每一个分割好的数据块执行两种校验:一种是 32 位的滚动弱校验,另一种是 128 位的 MD4 强校验。

  3. β将这些校验结果发给α。

  4. α通过搜索文件 A 的所有大小为 S 的数据块 ( 偏移量可以任选,不一定非要是 S 的倍数 ) ,来寻找与文件 B 的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。

  5. α发给β一串指令来生成文件 A 在β上的备份。这里的每一条指令要么是对文件 B 经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件 B 的任何一个数据块匹配上的。

命令:

rsync 的命令格式可以为以下六种:

  rsync [OPTION]... SRC DEST

  rsync [OPTION]... SRC [USER@]HOST:DEST

  rsync [OPTION]... [USER@]HOST:SRC DEST

  rsync [OPTION]... [USER@]HOST::SRC DEST

  rsync [OPTION]... SRC [USER@]HOST::DEST

  rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

  对应于以上六种命令格式, rsync 有六种不同的工作模式:

  1) 拷贝本地文件。当 SRC 和 DES 路径信息都不包含有单个冒号 ":" 分隔符时就启动这种工作模式。

  2) 使用一个远程 shell 程序 ( 如 rsh 、 ssh) 来实现将本地机器的内容拷贝到远程机器。当 DST 路径地址包含单个冒号 ":" 分隔符时启动该模式。

  3) 使用一个远程 shell 程序 ( 如 rsh 、 ssh) 来实现将远程机器的内容拷贝到本地机器。当 SRC 地址路径包含单个冒号 ":" 分隔符时启动该模式。

  4) 从远程 rsync 服务器中拷贝文件到本地机。当 SRC 路径信息包含 "::" 分隔符时启动该模式。

  5) 从本地机器拷贝文件到远程 rsync 服务器中。当 DST 路径信息包含 "::" 分隔符时启动该模式。

  6) 列远程机的文件列表。这类似于 rsync 传输,不过只要在命令中省略掉本地机信息即可。


二.安装

在centos系统下默认已经安装了rsync,只需进行配置,并开启rsync守候进程即可。


#rpm -qa | grep rsync


检查是否已安装。

在CentOS服务器,我们可以执行以下命令安装

yum install rsync

对于debian、ubuntu服务器,则是以下命令

sudo apt-get  install  rsync


三、配置

1、修改rsync的配置文件

#cat /etc/xinetd.d/rsync


可以看到rysnc服务是关闭的(disable = yes),这里把它开启,把disable的值改为no


2、 创建rsync服务器配置文件/etc/rsyncd.conf

# Minimal configuration file for rsync daemon
# See rsync(1) and rsyncd.conf(5) man pages for help

# This line is required by the /etc/init.d/rsyncd script
pid file = /var/run/rsyncd.pid  
port = 873
address = 192.168.1.171  
#uid = nobody
#gid = nobody    
uid = root  
gid = root  

use chroot = yes  
read only = no  


#limit access to private LANs
hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0  
hosts deny=*

max connections = 5
motd file = /etc/rsyncd/rsyncd.motd

#This will give you a separate log file
#log file = /var/log/rsync.log

#This will log every file transferred - up to 85,000+ per user, per sync
#transfer logging = yes

log format = %t %a %m %f %b
syslog facility = local3
timeout = 300

[linuxsirhome]  
path = /home    
list=yes
ignore errors
auth users = grtongbu
secrets file = /etc/rsyncd/rsync.passwd
comment = linuxsir home  
exclude =   beinan/  samba/  

参考释义

#全局选项
strict modes =yes                        #是否检查口令文件的权限
port = 873                               #默认端口873
log file = /var/log/rsyncd.log           #日志记录文件     原文中有的,我没有使用,日志文件

pid file = /usr/local/rsync/rsyncd.pid   #运行进程的ID写到哪里    原文中有的,我没有使用,日志文件

#模块选项
[test]                                   # 这里是认证的模块名,在client端需要指定
max connections = 5                      #客户端最大连接数,默认0(没限制)
         uid = root                      #指定该模块传输文件时守护进程应该具有的uid
         gid = root                      #指定该模块传输文件时守护进程应该具有的gid
          path = /home/admin/testrsync   # 需要做备份的目录
          ignore errors                  # 可以忽略一些无关的IO错误
          read only = no                 #no客户端可上传文件,yes只读
          write only = no                #no客户端可下载文件,yes不能下载
          hosts allow = *                #充许任何主机连接
          hosts deny = 10.5.3.77         #禁止指定的主机连接
          auth users = root              # 认证的用户名,如果没有这行,则表明是匿名
          secrets file = /home/admin/security/rsync.pass    # 指定认证口令文件位置



http://blog.sina.com.cn/s/blog_5eda2dda01015fcs.html
http://hi.baidu.com/cxh1984/item/03bf5816a32febf8dceecabc
http://www.centos.bz/2011/06/rsync-server-setup/
http://blog.johntechinfo.com/technology/87
与xcache类似的,ioncube是为数不多能够在windows+apache环境使用的php优化工具之一。其作用与大名鼎鼎的Zend Optimizer大抵相似,但是如之前WAMP安装后对php提速优化一文中介绍到的,Zend Optimizer只支持到php5.2.x,而新的Zend Guard Loader虽然支持php5.3.x,但是只能在windows+IIS中使用。



ioncube的优化效果相当好,如果是在windows+apache中使用的是php5.3版本的话,Robin极力推荐安装此插件。安装方法如下:

1. 下载ioncube_loaders_win_vc9_x86.zip (百度最新)


2. 将压缩包内的ioncube_loader_win_5.3.dll拷贝至wamp\bin\php\php5.3.8\zend_ext目录下
Tags: ,
XCache是一款提速php执行效率的工具,只要是通过对php编译空间开启一定的缓存来实现提速。

windows+apache环境下能实现此功能的工具不多,XCache是其中比较好的一款,推荐使用。

安装方法:

1. 下载XCache-1.3.2-php-5.3.6-Win32-VC9-x86.zip (百度最新版本)
Tags: ,

       在linux中怎样用命令完全拷贝一个目录下的所有文件(包括隐藏文件以及文件夹)到另外一个目录下,并且使得被复制的所有文件的属性等完全保持不变?
       注意,连原来的文件夹中所有的文件的属性、链接等都不能更改。
也就是说,要建立原来文件夹的一份一模一样的拷贝!
         给你一个链接地址吧,你找的应该是在这个页面里的这句话:
# cp -avx /home/* /mnt/newhome



功能: 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
参数:
1. 创建目录
     mkdir

     NO1. 在当前路径创建一级目录

          [root@rehat root]# mkdir test

     NO2. 在当前路径创建多级目录

          [root@rehat root]# mkdir -p mytest/test1/test1_1

     NO3. 在创建目录的同时给新建的目录赋权限

          [root@rehat root]# mkdir -m 777 testmod

          这样任何人对此目录都有任何权限

优酷搜索框美化代码 不指定

jed , 2012-12-14 06:17 , 代码编程 , 评论(0) , 阅读(8777) , Via 本站原创

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="content-type" content="text/html; charset=GB2312">



<title>CSS样式搜索框美化系列(4)</title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<style>
/*basic*/
*{padding:0;margin:0;color:#000;font:12px/20px Arial,Sans-serif,"宋体";}
/*elements*/
.clear{clear:both;height:0px;overflow:hidden;}
ul,li,ol{list-style-type:none;list-style-position:outside;}
button,.btnNormal{height:22px;line-height:18px;padding:0 9px!important;padding:0 5px;}
a{color:#0042ff;text-decoration:underline;}
a,a *{cursor:pointer;}
a img{border:0;}
.searchTool{float:left;width:520px;}
.searchTool .searchExtend{float:left;line-height:24px;_padding-top:5px;}
.searchTool .radio{vertical-align:middle;margin-left:10px;margin-right:2px;*margin-right:0;}
.searchTool .txtSearch{float:left;width:232px;padding:2px 2px 0 2px;height:20px;line-height:20px;vertical-align:bottom;border:1px solid #3e99d4;}
.searchTool .selSearch{float:left;width:60px;background:#fff;height:22px;line-height:22px;border:1px solid #3e99d4;border-left:0;}
.searchTool .nowSearch{float:left;width:40px;height:20px;line-height:22px;overflow:hidden;padding-left:4px;}
.searchTool .btnSel{float:right;border-left:1px solid #3e99d4;width:14px;height:22px;}
.searchTool .btnSel a{background:url(http://static.youku.com/v1.0.0217/index/img/btn_sel.gif) no-repeat center center;display:block;width:14px;height:22px;}
.searchTool .btnSel a:hover{background:url(http://static.youku.com/v1.0.0217/index/img/btn_sel_over.gif) no-repeat center center;border:1px solid #fff;width:12px;height:20px;}
.searchTool .selOption{z-index:9999;position:absolute;margin-left:-1px;width:60px;background:#fff;border:1px solid #3e99d4;}
.searchTool .selOption a{display:block;height:21px;padding-left:5px;line-height:21px;color:#000;text-decoration:none;}
.searchTool .selOption a:hover{color:#fff;background:#95d5f1;}
.searchTool .btnSearch{float:left;margin-left:10px;width:58px;height:22px;line-height:22px;border:1px solid #3e99d4;overflow:hidden;}
.searchTool .btnSearch a{background:url(http://static.youku.com/v1.0.0217/index/img/bg_nav_option.gif) repeat-x center -6px;display:block;text-decoration:none;height:22px;line-height:22px;overflow:hidden;}
.searchTool .btnSearch a:hover{background:url(http://static.youku.com/v1.0.0217/index/img/bg_nav_option_over.gif) repeat-x center center;border:1px solid #fff;height:20px;line-height:20px;}
.searchTool .btnSearch .lbl{cursor:pointer;display:block;width:40px;padding-left:5px;letter-spacing:5px;text-align:center;height:18px;padding-top:1px;margin:0 auto;filter:progid:DXImageTransform.Microsoft.DropShadow(color=#daeefa,offX=1,offY=1,positives=true);}
.searchTool .btnSearch a:hover .lbl{padding-top:0px;}
</style>
<script>
function drop_mouseover(pos){
try{window.clearTimeout(timer);}catch(e){}
}
function drop_mouseout(pos){
var posSel=document.getElementById(pos+"Sel").style.display;
if(posSel=="block"){
  timer = setTimeout("drop_hide('"+pos+"')", 1000);
}
}
function drop_hide(pos){
document.getElementById(pos+"Sel").style.display="none";
}
function search_show(pos,searchType,href){
    document.getElementById(pos+"SearchType").value=searchType;
    document.getElementById(pos+"Sel").style.display="none";
    document.getElementById(pos+"Slected").innerHTML=href.innerHTML;
    document.getElementById(pos+'q').focus();
    var sE = document.getElementById("searchExtend");
    if(sE != undefined && searchType == "bar"){
     sE.style.display="block";
    }else if(sE != undefined){
     sE.style.display="none";
    }
try{window.clearTimeout(timer);}catch(e){}
return false;
}
</script>
</head><body>
<h3><a href="http://www.dzhope.com/" style="color: rgb(0, 0, 0);">www.dzhope.com</a></h3>
<div class="searchTool">
<form method="get" action="http://so.youku.com/search_playlist" name="headSearchForm" id="headSearchForm" onsubmit="return dosearch(this);">
     <input class="txtSearch" id="headq" name="q" value="DIV+CSS模板" type="text">
     <input name="searchdomain" value="http://so.youku.com" type="hidden">
     <input id="headSearchType" name="searchType" value="playlist" type="hidden">
     <div class="selSearch">
    <div class="nowSearch" id="headSlected" onclick="if(document.getElementById('headSel').style.display=='none'){document.getElementById('headSel').style.display='block';}else {document.getElementById('headSel').style.display='none';};return false;" onmouseout="drop_mouseout('head');">DIV模板</div>
    <div class="btnSel"><a href="#" onclick="if(document.getElementById('headSel').style.display=='none'){document.getElementById('headSel').style.display='block';}else {document.getElementById('headSel').style.display='none';};return false;" onmouseout="drop_mouseout('head');"></a></div>
    <div class="clear"></div>
    <ul class="selOption" id="headSel" style="display: none;">
     <li><a href="#" onclick="return search_show('head','video',this)" onmouseover="drop_mouseover('head');" onmouseout="drop_mouseout('head');">后台模板</a></li>
     <li><a href="#" onclick="return search_show('head','playlist',this)" onmouseover="drop_mouseover('head');" onmouseout="drop_mouseout('head');">图片图标</a></li>
     <li><a href="#" onclick="return search_show('head','user',this)" onmouseover="drop_mouseover('head');" onmouseout="drop_mouseout('head');">CSS代码</a></li>
     <li><a href="#" onclick="return search_show('head','bar',this)" onmouseover="drop_mouseover('head');" onmouseout="drop_mouseout('head');">CSS菜单</a></li>
     <li><a href="#" onclick="return search_show('head','pk',this)" onmouseover="drop_mouseover('head');" onmouseout="drop_mouseout('head');">CSS图表</a></li>
    </ul>
     </div>
     <div class="btnSearch">
    <a href="http://www.dzhope.com/" onclick="javascript:return dosearch(document.getElementById('headSearchForm'));"><span class="lbl">搜索</span></a>
     </div>
          <div class="searchExtend" id="searchExtend" name="searchExtend" style="display: none;">
           <input class="radio" name="sbt" value="post" onclick="csbt(this,this.form.sbts);" type="radio">搜贴子<input name="sbt" value="user" onclick="csbt(this,this.form.sbts);" class="radio" type="radio">按作者搜<input name="sbts" value="bar" type="hidden">
     </div>
          <div class="clear"></div>
     </form>
   </div>
   <div class="clear"></div>
  

</body></html>
主从配置,跟之前的差不多一样。

http://www.dzhope.com/post/909/

特地备注一下从服务器只同步部分表的配置。


server-id = 3
#log-bin=/user/local/mysql/binlog/binlog
log-bin=mysql-bin
#expire_logs_days=5
#binlog-do-db = foodnewbbs
replicate-rewrite-db            = 主服务器库名A->从服务器库名B
replicate_do_table              = B.table1
replicate_do_table              = B.table2
#replicate-wild-do-table = foodnewbbs.pre_common_tagitem
binlog-ignore-db=mysql
binlog-ignore-db=foodbbs
binlog-ignore-db=foodqq
binlog-ignore-db=fooduchome
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=test
binlog-ignore-db=ucenter3
binlog-ignore-db=ucenter2
binlog-ignore-db=wish
分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]