<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[VPS定时自动备份终极指南]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Fri, 18 Jan 2013 14:27:43 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;21andy这兄弟，还说备份呢，没有想到这两天他vps没挂，好像blog估计是挂了吧，这篇文章来自百度的快照，如下，值得参考和实践。<br/><br/><br/>近半年，先后丢失5个网站数据，大多都是由于VPS硬盘损坏造成，RAID10为了速度是很不保险的<br/>最近的2次分别是DirectSpace和BuyVM<br/>所以，必需备份，作好VPS随时准备丢失数据的准备<br/>昨天花了一整天，把目前所有的站做了每日同步，以下分享给大家实际操作方法。<br/>转载请注明原文出处 http://www.21andy.com/blog/20120520/2026.html<br/>网上关于rsync的资料也不少，但多数我想会把你看晕的，以下我用实例来讲解，重点的地方我会详细说明，希望让大家都会用。<br/><br/>以下，假设网站所在的VPS为A，存储备份的VPS为B，系统均为 CentOS<br/>备份方法为 B 定时向 A 拉数据来备份<br/><br/>一、VPS A 上面的具体部署<br/><br/>1. 安装 rsync<br/><br/>yum -y install rsync<br/>把rsync加入开机启动<br/><br/>echo &#039;rsync --daemon&#039; &gt;&gt; /etc/rc.d/rc.local<br/>2. 设置rsync密码<br/><br/>echo &#039;你的用户名:你的密码&#039; &gt; /etc/rsyncd.scrt<br/>chmod 600 /etc/rsyncd.scrt<br/>这里的用户名和密码，在VPS B上将会用到<br/><br/>3. 配置rsync<br/>vim /etc/rsyncd.conf<br/>放入以下内容, #后面是我的注释<br/><br/>下载: rsyncd.conf<br/>uid = root<br/>gid = root<br/>use chroot = no<br/>read only = yes<br/>max connections = 10<br/><br/>port = 873<br/>pid file = /var/run/rsyncd.pid<br/>lock file = /var/run/rsync.lock<br/>#log file = /var/log/rsync.log # 偶不想记录log<br/>log format = %t %a %m %f %b<br/>syslog facility = local3<br/>timeout = 300<br/><br/>[www]<br/>path = /var/www/<br/>comment = 21andy.com<br/>ignore errors<br/>read only = yes<br/>list = no<br/>auth users = andy<br/>secrets file = /etc/rsyncd.scrt<br/>#exclude = 21andy.com/blog/cache/ #不需要备份的目录，我使用exclude from方法来排除<br/>exclude from = /etc/rsync_exclude.txt<br/>hosts allow = 备份服务器的IP<br/>hosts deny = *<br/>4. 排除不备份的目录<br/>vim /etc/rsync_exclude.txt<br/>输入不备份的目录，每行一个，不可以用绝对路径，而必须用上面配置文件中path的相对路径，如<br/><br/>21andy.com/blog/cache/<br/>21andy.com/manual/<br/>这个排除文件有更高级的+-写法，我们不需要，简单够用就好，用 exclude from 方法，好处在于随时要添加不需要备份的内容时，方便添加，且不需要重启rsync进程<br/><br/>5. 制作一个重启rsync的脚本<br/>vim /root/rsyncd_restart.sh<br/>放入以下内容<br/><br/>kill -9 `cat /var/run/rsyncd.pid`<br/>rm -f /var/run/rsyncd.pid<br/>rm -f /var/run/rsyncd.lock<br/>rsync --daemon<br/>chmod 600 /root/rsyncd_restart.sh<br/>chmod +x /root/rsyncd_restart.sh<br/>现在直接用 /root/rsyncd_restart.sh 来重新启动 rsync 进程<br/><br/>6. 备份 MySQL 的脚本<br/>此脚本可同时备份多个数据库，并进行gzip压缩，按日期目录保存，3天之前的备份将被自动删除<br/>vim /root/mysql_backup.sh<br/><br/>下载: mysql_backup.sh<br/>#!/bin/bash<br/><br/># 以下配置信息请自己修改<br/>mysql_user=&quot;USER&quot; #MySQL备份用户<br/>mysql_password=&quot;PASSWORD&quot; #MySQL备份用户的密码<br/>mysql_host=&quot;localhost&quot;<br/>mysql_port=&quot;3306&quot;<br/>mysql_charset=&quot;utf8&quot; #MySQL编码<br/>backup_db_arr=(&quot;db1&quot; &quot;db2&quot;) #要备份的数据库名称，多个用空格分开隔开 如(&quot;db1&quot; &quot;db2&quot; &quot;db3&quot;)<br/>backup_location=/var/www/mysql&nbsp;&nbsp;#备份数据存放位置，末尾请不要带&quot;/&quot;,此项可以保持默认，程序会自动创建文件夹<br/>expire_backup_delete=&quot;ON&quot; #是否开启过期备份删除 ON为开启 OFF为关闭<br/>expire_days=3 #过期时间天数 默认为三天，此项只有在expire_backup_delete开启时有效<br/><br/># 本行开始以下不需要修改<br/>backup_time=`date +%Y%m%d%H%M`&nbsp;&nbsp;#定义备份详细时间<br/>backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间<br/>backup_3ago=`date -d &#039;3 days ago&#039; +%Y-%m-%d` #3天之前的日期<br/>backup_dir=$backup_location/$backup_Ymd&nbsp;&nbsp;#备份文件夹全路径<br/>welcome_msg=&quot;Welcome to use MySQL backup tools!&quot; #欢迎语<br/><br/># 判断MYSQL是否启动,mysql没有启动则备份退出<br/>mysql_ps=`ps -ef &#124;grep mysql &#124;wc -l`<br/>mysql_listen=`netstat -an &#124;grep LISTEN &#124;grep $mysql_port&#124;wc -l`<br/>if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;ERROR:MySQL is not running! backup stop!&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit<br/>else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $welcome_msg<br/>fi<br/><br/># 连接到mysql数据库，无法连接则备份退出<br/>mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password &lt;&lt;end<br/>use mysql;<br/>select host,user from user where user=&#039;root&#039; and host=&#039;localhost&#039;;<br/>exit<br/>end<br/><br/>flag=`echo $?`<br/>if [ $flag != &quot;0&quot; ]; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;ERROR:Can&#039;t connect mysql server! backup stop!&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit<br/>else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;MySQL connect ok! Please wait......&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 判断有没有定义备份的数据库，如果定义则开始备份，否则退出备份<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ &quot;$backup_db_arr&quot; != &quot;&quot; ];then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#dbnames=$(cut -d &#039;,&#039; -f1-5 $backup_database)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#echo &quot;arr is ($&#123;backup_db_arr[@]&#125;)&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for dbname in $&#123;backup_db_arr[@]&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;database $dbname backup start...&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`mkdir -p $backup_dir`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset &#124; gzip &gt; $backup_dir/$dbname-$backup_time.sql.gz`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag=`echo $?`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $flag == &quot;0&quot; ];then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;database $dbname backup fail!&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;ERROR:No database to backup! backup stop&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 如果开启了删除过期备份，则进行删除操作<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ &quot;$expire_backup_delete&quot; == &quot;ON&quot; -a&nbsp;&nbsp;&quot;$backup_location&quot; != &quot;&quot; ];then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf &#123;&#125; &#92;;`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `find $backup_location/ -type d -mtime +$expire_days &#124; xargs rm -rf`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;Expired backup data delete complete!&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;All database backup success! Think you!&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit<br/>fi<br/>chmod 600 /root/mysql_backup.sh<br/>chmod +x /root/mysql_backup.sh<br/><br/>好了，加入 crontab 每天00:00定时自动备份<br/><br/>00 00 * * * /root/mysql_backup.sh<br/>至此，网站所在VPS A上的部署已经都完成了！接下来在备份VPS B上进行设置来拉备份。<br/><br/>转载请注明原文出处 http://www.21andy.com/blog/20120520/2026.html<br/><br/>二、VPS B 上面的具体部署<br/><br/>1. 安装 rsync<br/><br/>yum -y install rsync<br/>这里不需要加入开机启动了，因为是客户端，不是服务端<br/><br/>2. 设置rsync密码<br/><br/>echo &#039;你在A上设置的密码&#039; &gt; /etc/rsync.pass<br/>chmod 400 /etc/rsync.pass<br/>3. 测试一下同步<br/>先建个存储备份的地方<br/><br/>mkdir -p /var/rsync/<br/>测试一下同步<br/><br/>rsync -avzP --delete --password-file=/etc/rsync.pass 用户名@192.168.0.100::www /var/rsync/21andy.com/<br/>这条命令，我说明一下几个要点<br/><br/>-avzP是啥，自己搜索我站内介绍<br/>--delete 是为了比如A上删除了一个文件，同步的时候，B会自动删除那个文件<br/>--password-file 刚才VPS B中 /etc/rsync.pass 设置那个密码，要和VPS A的 /etc/rsyncd.scrt 中的密码一样，这样cron运行的时候，就不需要密码了<br/>这条命令中的&quot;用户名&quot;为VPS A的 /etc/rsyncd.scrt 中的用户名<br/>这条命令中的 192.168.0.100 为VPS A的IP地址<br/>::www，注意是2个 : 号，www为VPS A的配置文件 /etc/rsyncd.conf 中的[www]，意思是根据A上的/etc/rsyncd.conf来同步其中的[www]段内容，一个 : 号的时候，用于不根据配置文件，直接同步指定目录<br/><br/>4. 加入crontab每天00:30同步<br/><br/>30 00 * * * rsync -avzP --delete --password-file=/etc/rsync.pass 用户名@192.168.0.100::www /var/rsync/21andy.com/ &gt; /dev/null 2&gt;&amp;1<br/>OK！至此大功告成！不怕丢数据了，天天自动备份！<br/>如果还要再保险一点，再加个VPS C<br/>C来同步B，双重备份，哪个挂了都不怕！<br/><br/><br/><br/>同时可以看：http://www.chinaz.com/web/2012/0116/232103.shtml<br/>http://jingyan.baidu.com/article/67662997127cef54d51b84f5.html<br/>http://hi.baidu.com/suercool/item/53406585050d76ded0f8cdaf
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] VPS定时自动备份终极指南]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>