<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>微视网&#124;博客</title>
	<atom:link href="http://www.viisee.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.viisee.net</link>
	<description>web设计,用户体验,产品开发,网站运营,网络营销</description>
	<lastBuildDate>Fri, 13 May 2011 10:28:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>SQL Server 2005中还原数据库后，提示用户或组已经存在的问题解决</title>
		<link>http://www.viisee.net/archives/1028</link>
		<comments>http://www.viisee.net/archives/1028#comments</comments>
		<pubDate>Wed, 13 Apr 2011 09:03:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[系统与网络]]></category>

		<guid isPermaLink="false">http://www.viisee.net/archives/1028</guid>
		<description><![CDATA[问题背景与现象： 1.Sql server 2005服务器，还原了一个来自Sql server2000备份的数据库备份文件 2.这个还原操作自动生成了相应的数据库用户（原来数据库已有的），假设为user1 3.在SSMS中建立对应的登录名时，提示用户或组已经存在，在数据库&#8212;&#8212;安全性&#8212;&#8212;用户 节点下也无法删除 4.直接使用这个user1登录SSMS，提示无法登录，没有默认数据库 5.修改这个用户的属性，设置默认数据库，保存时提示&#8220;要有登录名&#8221; %￥#%&#8230;&#8230;%@ &#160; 汗！ &#160; 问题根源： 经查资料，这个是Sql server里的&#8220;孤立用户&#8221;，就是说其登录名没有和数据库的用户名对应起来，这个操作在SSMS里是实现不了的，要么提示无法登录，要么提示已经存在，必须要用一个存储过程来处理 &#160; 处理方法：（来自http://www.chr114.coms/20110105/09311428.shtml） 新建一个查询，输入 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>问题背景与现象：</strong></p>
<p>1.Sql server 2005服务器，还原了一个来自Sql server2000备份的数据库备份文件</p>
<p>2.这个还原操作自动生成了相应的数据库用户（原来数据库已有的），假设为user1</p>
<p>3.在SSMS中建立对应的登录名时，提示用户或组已经存在，在数据库&mdash;&mdash;安全性&mdash;&mdash;用户 节点下也无法删除</p>
<p>4.直接使用这个user1登录SSMS，提示无法登录，没有默认数据库</p>
<p>5.修改这个用户的属性，设置默认数据库，保存时提示&ldquo;要有登录名&rdquo;</p>
<p>%￥#%&hellip;&hellip;%@ &nbsp; 汗！</p>
<p>&nbsp;</p>
<p><strong>问题根源：</strong></p>
<p>经查资料，这个是Sql server里的&ldquo;孤立用户&rdquo;，就是说其登录名没有和数据库的用户名对应起来，这个操作在SSMS里是实现不了的，要么提示无法登录，要么提示已经存在，必须要用一个存储过程来处理</p>
<p>&nbsp;</p>
<p><strong>处理方法：（来自</strong><a href="http://www.chr114.coms/20110105/09311428.shtml">http://www.chr114.coms/20110105/09311428.shtml</a><strong>）</strong></p>
<p>新建一个查询，输入</p>
<p><span style="color: #ff0000;">Use 数据库</span></p>
<p><span style="color: #ff0000;">go</span></p>
<p><span style="color: #ff0000;">sp_change_users_login &#8216;update_one&#8217;, &#8216;登录用户名&#8217;, &#8216;用户名&#8217;</span></p>
<p>解释一下参数:</p>
<p>目的让”登录用户名&#8217;” 与 &#8216;用户名&#8217; 联系起来</p>
<p>update_one, 表示只对一个用户进行操作</p>
<p>登录用户名&#8217;与&#8217;用户名&#8217;, 则分别是SQL Server的登录名与数据库中的用户名</p>
<p>sp_change_users_login的更详细的用法可以参考SQL Server的联机帮助, SQL Server 2005的在此, SQL 2000的链接不方便做成链接的形式, 各位可以自己到联机丛书的索引中找一下.</p>
<p>&nbsp;</p>
<p>例子：</p>
<p>&#8211;Use dbname</p>
<p>&#8211;go</p>
<p>&#8211;sp_change_users_login &#8216;update_one&#8217;, &#8216;sa, &#8216;sa&#8217;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.viisee.net/archives/1028/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>敏捷的技术部 敏捷的产品PPT（及slideshare.net介绍）</title>
		<link>http://www.viisee.net/archives/1032</link>
		<comments>http://www.viisee.net/archives/1032#comments</comments>
		<pubDate>Wed, 13 Apr 2011 01:26:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[工作思考]]></category>

		<guid isPermaLink="false">http://www.viisee.net/?p=1032</guid>
		<description><![CDATA[slideshare.net是一个在线上传ppt和分享的网站（升级高级版本还有更多功能，有钱银可以试试），里面有很多不错的PPT，操作也很简单，注册后点击upload就可以了，不过可能视你PPT的大小速度不同，然后就可以分享到facebook等，或复制html代码粘贴在你的博客上了。 记得《演讲之禅》的作者说，为避免发生意外，对需要演讲的PPT一定要保留3份：1份放在笔记本电脑，一份放在U盘，一份放在网络上。所以slideshare就实现了第三个途径。 下面是我上传的一个很久之前对技术部培训的PPT，扭转大家被动接受需求的心态，以及在遇到误解时的处理方法。 敏捷的技术部 敏捷的产品 View more presentations from my101du.]]></description>
			<content:encoded><![CDATA[<p><a title="slideshare" href="http://www.slideshare.net" target="_blank">slideshare.net</a>是一个在线上传ppt和分享的网站（升级高级版本还有更多功能，有钱银可以试试），里面有很多不错的PPT，操作也很简单，注册后点击upload就可以了，不过可能视你PPT的大小速度不同，然后就可以分享到facebook等，或复制html代码粘贴在你的博客上了。</p>
<p><a rel="attachment wp-att-1033" href="http://www.viisee.net/archives/1032/index"><img class="alignnone size-medium wp-image-1033" title="index" src="http://www.viisee.net/wp-content/uploads/2011/05/index-300x199.png" alt="" width="600" height="400" /></a></p>
<p><a rel="attachment wp-att-1034" href="http://www.viisee.net/archives/1032/share"><img class="alignnone size-medium wp-image-1034" title="share" src="http://www.viisee.net/wp-content/uploads/2011/05/share-300x272.png" alt="" width="500" height="450" /></a></p>
<p>记得《演讲之禅》的作者说，为避免发生意外，对需要演讲的PPT一定要保留3份：1份放在笔记本电脑，一份放在U盘，一份放在网络上。所以slideshare就实现了第三个途径。</p>
<p>下面是我上传的一个很久之前对技术部培训的PPT，扭转大家被动接受需求的心态，以及在遇到误解时的处理方法。</p>
<div id="__ss_7946442" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="敏捷的技术部 敏捷的产品" href="http://www.slideshare.net/my101du/ss-7946442">敏捷的技术部 敏捷的产品</a></strong><object id="__sse7946442" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-110512201922-phpapp01&amp;stripped_title=ss-7946442&amp;userName=my101du" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-110512201922-phpapp01&amp;stripped_title=ss-7946442&amp;userName=my101du" name="__sse7946442" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/my101du">my101du</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.viisee.net/archives/1032/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPNow无法使用mssql扩展的解决办法</title>
		<link>http://www.viisee.net/archives/1027</link>
		<comments>http://www.viisee.net/archives/1027#comments</comments>
		<pubDate>Tue, 12 Apr 2011 06:47:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[系统与网络]]></category>

		<guid isPermaLink="false">http://www.viisee.net/archives/1027</guid>
		<description><![CDATA[觉得XAMPP太复杂了，占用空间太大，于是用PHPNow替换之。 安装完毕后，一切都很正常，但是无法使用mssql，我的本机环境是win7+PHPNow+SQL server 2008，需要连接到一台远程的SQL Server 2000上。 首先php.ini里面开启mssql的扩展 重启apache 使用mssql_connect()函数测试，提示没有这个函数，google一番，原来是要把相关的dll文件放入系统文件夹的system32目录下。 假设你的phpnow和我一样装在D盘，那么就是如下两个文件 D:\PHPnow-1.5.6\php-5.2.14-Win32\ntwdblib.dll D:\PHPnow-1.5.6\php-5.2.14-Win32\ext\php_mssql.dll 最后重启apache即可。]]></description>
			<content:encoded><![CDATA[<p>觉得XAMPP太复杂了，占用空间太大，于是用PHPNow替换之。</p>
<p>安装完毕后，一切都很正常，但是无法使用mssql，我的本机环境是win7+PHPNow+SQL server 2008，需要连接到一台远程的SQL Server 2000上。</p>
<p>首先php.ini里面开启mssql的扩展</p>
<p><img src="http://www.viisee.net/wp-content/uploads/2011/04/2011-04-12_1440161.png" alt="" /></p>
<p>重启apache 使用mssql_connect()函数测试，提示没有这个函数，google一番，原来是要把相关的dll文件放入系统文件夹的system32目录下。</p>
<p>假设你的phpnow和我一样装在D盘，那么就是如下两个文件</p>
<p>D:\PHPnow-1.5.6\php-5.2.14-Win32\ntwdblib.dll</p>
<p>D:\PHPnow-1.5.6\php-5.2.14-Win32\ext\php_mssql.dll</p>
<p>最后重启apache即可。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.viisee.net/archives/1027/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在车上 念头一个接一个</title>
		<link>http://www.viisee.net/archives/1029</link>
		<comments>http://www.viisee.net/archives/1029#comments</comments>
		<pubDate>Wed, 26 Jan 2011 06:52:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[生活随笔]]></category>

		<guid isPermaLink="false">http://www.viisee.net/archives/1029</guid>
		<description><![CDATA[1.理论和现实是不一样的 教科书上的技巧万千，但写书的那人不可能试过所有的车，就算试过，“感觉”这东西文字不一定能表达清楚。写书的人也不可能写一本囊括各种情况的辞典，就算有，你也不可能在路上翻开查阅。 &#160; 2.大家都很快的时候，你慢，就很危险 路上标了最低限速，你跑慢了，不仅要比别人后到达目的地；在路上，有的人会悄悄超过你；有的人超过你的时候，还不忘闪灯鸣笛告诉你。 &#160; &#160; 3.教条不一定正确 导航是机器，是机器就会有问题。如果在现实中有和教条不一样的东西，一定要尊重现实——起码在中国是这样，否则会走入死路——这时候导航还在提醒你保持直行！ &#160; 4.信息来源太多不一定是好事 你的主观判断、教条、其他人同时告诉你一件事情的三个不同版本，首先相信并理解教条，如果理解了但教条有误，相信自己。 &#160; 5.换位思考很重要 你在走路时闯红灯、随意横穿马路得意的时候，和你坐在车里急刹车的时候，心情是不一样的。与人方便，自己方便。 &#160; 6.你再牛逼，也不是每个人都会听你的 喇叭按爆，灯闪烂，人骑个自行车歪歪扭扭就是横在你前面；行了，哥，你先走，惹不起我还躲不起么？ &#160; 7.及时告诉别人你在做什么 [...]]]></description>
			<content:encoded><![CDATA[<p><span style="border-collapse: collapse; color: #3f3f3f; font-family: Arial; line-height: 22px;"> </span></p>
<p>1.理论和现实是不一样的</p>
<p>教科书上的技巧万千，但写书的那人不可能试过所有的车，就算试过，“感觉”这东西文字不一定能表达清楚。写书的人也不可能写一本囊括各种情况的辞典，就算有，你也不可能在路上翻开查阅。</p>
<p>&nbsp;</p>
<p>2.大家都很快的时候，你慢，就很危险</p>
<p>路上标了最低限速，你跑慢了，不仅要比别人后到达目的地；在路上，有的人会悄悄超过你；有的人超过你的时候，还不忘闪灯鸣笛告诉你。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>3.教条不一定正确</p>
<p>导航是机器，是机器就会有问题。如果在现实中有和教条不一样的东西，一定要尊重现实——起码在中国是这样，否则会走入死路——这时候导航还在提醒你保持直行！</p>
<p>&nbsp;</p>
<p>4.信息来源太多不一定是好事</p>
<p>你的主观判断、教条、其他人同时告诉你一件事情的三个不同版本，首先相信并理解教条，如果理解了但教条有误，相信自己。</p>
<p>&nbsp;</p>
<p>5.换位思考很重要</p>
<p>你在走路时闯红灯、随意横穿马路得意的时候，和你坐在车里急刹车的时候，心情是不一样的。与人方便，自己方便。</p>
<p>&nbsp;</p>
<p>6.你再牛逼，也不是每个人都会听你的</p>
<p>喇叭按爆，灯闪烂，人骑个自行车歪歪扭扭就是横在你前面；行了，哥，你先走，惹不起我还躲不起么？</p>
<p>&nbsp;</p>
<p>7.及时告诉别人你在做什么</p>
<p>大部分人默认你是循规蹈矩的，如果你没有任何提示突然变道，偶尔你可以超过去，偶尔你会车毁人亡，但不管怎样都会被后面的人警告或心里咒骂。及时告诉别人你在做什么，整条道上的人都心情愉悦，一起迅速到达目的地。</p>
<p>&nbsp;</p>
<p>8.抢道不表示你能比别人先到</p>
<p>拥堵的时候，环境很乱，抢道很危险，而且很添堵。等你左冲右突得意地走出去时，突然发现旁边超过去的那辆车正好是之前被你抢道的。</p>
<p>&nbsp;</p>
<p>9.事先规划好路线和查好信息</p>
<p>出门前先计划好，不仅节省燃油（资源），而且节省时间（精力）。</p>
<p>&nbsp;</p>
<p>10.关键时刻要明白什么是最重要的</p>
<p>即将被卡车撞上和撞向防护栏，首选保命，什么交规、车损坏都是浮云。留得青山在不愁没柴烧。最关键的是冷静，手里的方向盘不能猛打（做人要坚持原则）</p>
<p>&nbsp;</p>
<p>11.人生在很多时候是不能马上回头的</p>
<p>错过出去的路口，只能硬着头皮往前走然后悄悄掉头改正错误。在繁忙的车流里随心所欲地掉头，别人只会看笑话，而且这是不符合“规则”的，非常危险。</p>
<p>&nbsp;</p>
<p>12.眼睛看得越远，跑得越稳，走错路的机会也越小</p>
<p>时刻要明白自己正在哪里，即将去哪里，指路牌上的信息是什么。眼睛往前看，提前预见前N辆车的情况，可以减少突然刹车的危险。</p>
<p>&nbsp;</p>
<p>13.早起的鸟儿有虫吃</p>
<p>早起15分钟，路况要好很多，节省很多时间。也就是说早起的鸟儿有虫吃；晚出发15分钟，即使你开着法拉利，半小时也不能从盐田到机场。</p>
<p>&nbsp;</p>
<p>14.当你有一个大体积的工具，就难以对周边的环境有个精确的认识，所以必须尽快熟悉你的工具</p>
<p>用两条腿走路的时候，明白自己在哪里，附近有什么；坐在车里，很多东西被挡住了，而且很多东西会变形，如果不在大脑里对这些东西进行还原，撞墙是迟早的事，也就无法发挥车的用处了。</p>
<p>&nbsp;</p>
<p>15.尺有所短，寸有所长</p>
<p>找车位的时间和发生擦碰的几率同时增大，带上小单车，停车范围一下就扩大了，想停哪停哪，下车骑上小单车一溜烟就可以走了。同时把各种工具综合运用，可以提高效率。</p>
<p>&nbsp;</p>
<p>16.合同细则阅读要仔细，有疑问要提出，因为没有哪个卖家是“全心全意为人民服务”的</p>
<p>不是买了保险就可以随心所欲的，也不是停在院子里的车被盗就能索赔的，陷阱处处有，中国特别多。</p>
<p>&nbsp;</p>
<p>17.工具要努力让它产生效益，但也要爱惜工具</p>
<p>任何物体都是有灵魂和尊严的，它帮你，你爱它，和谐！</p>
<p>&nbsp;</p>
<p>（未完待续）</p>
<p>&nbsp;</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.7em; margin-left: 0px; line-height: 1.6; padding: 0px;"><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.viisee.net/archives/1029/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>监控宝对apache的监控以及遇到问题解决</title>
		<link>http://www.viisee.net/archives/1000</link>
		<comments>http://www.viisee.net/archives/1000#comments</comments>
		<pubDate>Fri, 10 Sep 2010 06:34:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[系统与网络]]></category>

		<guid isPermaLink="false">http://www.viisee.net/?p=1000</guid>
		<description><![CDATA[今天服务器又不间断访问慢，从监控宝的linux系统监控来看没有问题，网络访问有一些特别：电信特别慢，网通很正常。 为了更好地排除问题，于是对apache也进行了监控，具体方法可以参见 1.apache开启server-status 原文地址 2.监控宝控制台添加新的服务监控项 http:/.jiankongbao.com/?p=422 我在监控宝的面板添加 http://域名/server-status 时，老是提示不是一个正确的url，开始以为这个“server-status ”是一个目录，然后ftp上去一个目录也不行。 接下来检查apache的配置文件， 发现conf/extra下面有个httpd-info.conf，把httpd.conf里的那段配置移到这个文件里面来，重启apache，访问http://域名/server-status时，提示404错误，我汗。 google了很久，发现有篇文章说到了这个问题，大概是两种解决方法，一种是apache再监听一个8080端口，二是在指定虚拟主机时，不要用*:80，而要写明ip地址。我觉得在进行如此大的操作之前再自己看看自己有没有遗漏的地方，重新检查一下httpd.conf文件，发现里面有一行include /conf/extra/httpd-info.conf没有去掉注释。。。原来如此。。。重启，搞定，监控宝提示已经正常开始监听了。 google的那篇原文如下，如果还不能解决，这个可能是最后的救命稻草了：http://systembash.com/content/apache-mod_status-404/ Apache mod_status and page not [...]]]></description>
			<content:encoded><![CDATA[<p>今天服务器又不间断访问慢，从监控宝的linux系统监控来看没有问题，网络访问有一些特别：电信特别慢，网通很正常。<br />
为了更好地排除问题，于是对apache也进行了监控，具体方法可以参见</p>
<p>1.apache开启server-status</p>
<p><a href="http://wiki.jiankongbao.com/doku.php/%E6%96%87%E6%A1%A3:%E5%AE%89%E5%85%A8%E6%8C%87%E5%BC%95#apache_监控" target="_blank">原文地址</a></p>
<p>2.监控宝控制台添加新的服务监控项 <a href="http:/.jiankongbao.com/?p=422" target="_blank">http:/.jiankongbao.com/?p=422</a></p>
<p>我在监控宝的面板添加 http://域名/server-status 时，老是提示不是一个正确的url，开始以为这个“server-status ”是一个目录，然后ftp上去一个目录也不行。</p>
<p>接下来检查apache的配置文件， 发现conf/extra下面有个httpd-info.conf，把httpd.conf里的那段配置移到这个文件里面来，重启apache，访问http://域名/server-status时，提示404错误，我汗。</p>
<p>google了很久，发现有篇文章说到了这个问题，大概是两种解决方法，一种是apache再监听一个8080端口，二是在指定虚拟主机时，不要用*:80，而要写明ip地址。我觉得在进行如此大的操作之前再自己看看自己有没有遗漏的地方，重新检查一下httpd.conf文件，发现里面有一行include /conf/extra/httpd-info.conf没有去掉注释。。。原来如此。。。重启，搞定，监控宝提示已经正常开始监听了。</p>
<p><span id="more-1000"></span></p>
<p>google的那篇原文如下，如果还不能解决，这个可能是最后的救命稻草了：<a href="http://systembash.com/content/apache-mod_status-404/" target="_blank">http://systembash.com/content/apache-mod_status-404/</a></p>
<blockquote>
<div id="_mcePaste">Apache mod_status and page not found 404</div>
<div id="_mcePaste">Problem: Checking the [tag]apache[/tag] server status with the command “apachectl status”, “service httpd fullstatus” or by viewing http://server/server-status I get the message: “The requested URL /server-status was not found on this server” or your alternative 404 page not found error.</div>
<div id="_mcePaste">Answer: Assuming you have the module loaded and set up per the documentation of mod_status, this is this most likely a VirtualHost problem.</div>
<div id="_mcePaste">If you use NameVirtualHost *:80 directive, or any *:port, to run multiple name based virtual hosts, this configuration does not allow server-status on any of the publicly accessible addresses. This is because the first Virtual Host in the directive is considered the “Default Virtual Host”, any unknown entries on the NameVirtualHost space – in this example anything accessing port 80 on any IP address, will default go to this virtual host and hence you will get a 404 page not found error. Furthermore you can not place the server-status configuration inside of a VirtualHost directive to be read from a full domain name.</div>
<div id="_mcePaste">Solution: There are two basic ways to solve this. The first is to make the server listen on an alternative port (such as port 8080). Adding “Listen 8080″ to the configuration will allow you to access the server status from http://yourip:8080/server-status.</div>
<div id="_mcePaste">The second will allow the command ‘apachectl status’ or ‘service httpd fullstatus’ to work properly but it will not allow external access. If you switch each * to the actual IP address to work from, then accessing from localhost (127.0.0.1) will work. So, you would need tochange:</div>
<div id="_mcePaste">NameVirtualHost *:80</div>
<div id="_mcePaste">to</div>
<div id="_mcePaste">NameVirtualHost 10.0.0.3:80</div>
<div id="_mcePaste">And then restart your server.</div>
<div id="_mcePaste">By that way, unless you need it, make sure to turn ExtendedStatus Off. This directive collects a lot of data from the site visitors and can slow down a busy server.</div>
<p>Apache mod_status and page not found 404Problem: Checking the [tag]apache[/tag] server status with the command “apachectl status”, “service httpd fullstatus” or by viewing http://server/server-status I get the message: “The requested URL /server-status was not found on this server” or your alternative 404 page not found error.<br />
Answer: Assuming you have the module loaded and set up per the documentation of mod_status, this is this most likely a VirtualHost problem.<br />
If you use NameVirtualHost *:80 directive, or any *:port, to run multiple name based virtual hosts, this configuration does not allow server-status on any of the publicly accessible addresses. This is because the first Virtual Host in the directive is considered the “Default Virtual Host”, any unknown entries on the NameVirtualHost space – in this example anything accessing port 80 on any IP address, will default go to this virtual host and hence you will get a 404 page not found error. Furthermore you can not place the server-status configuration inside of a VirtualHost directive to be read from a full domain name.<br />
Solution: There are two basic ways to solve this. The first is to make the server listen on an alternative port (such as port 8080). Adding “Listen 8080″ to the configuration will allow you to access the server status from http://yourip:8080/server-status.<br />
The second will allow the command ‘apachectl status’ or ‘service httpd fullstatus’ to work properly but it will not allow external access. If you switch each * to the actual IP address to work from, then accessing from localhost (127.0.0.1) will work. So, you would need tochange:NameVirtualHost *:80<br />
toNameVirtualHost 10.0.0.3:80<br />
And then restart your server.<br />
By that way, unless you need it, make sure to turn ExtendedStatus Off. This directive collects a lot of data from the site visitors and can slow down a busy server.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.viisee.net/archives/1000/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用监控宝来检测服务器运行状况(linux)</title>
		<link>http://www.viisee.net/archives/997</link>
		<comments>http://www.viisee.net/archives/997#comments</comments>
		<pubDate>Tue, 31 Aug 2010 08:05:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[系统与网络]]></category>

		<guid isPermaLink="false">http://www.viisee.net/?p=997</guid>
		<description><![CDATA[www.jiankongbao.com&#160; 服务器管理必备良器。 首先我们怀着半信半疑的态度注册一个免费的用户，吼吼！ 然后看教程，http://wiki.jiankongbao.com/doku.php 找到&#8220;服务器监控&#8221;的&#8220;在Linux服务器上开启安全的SNMP代理&#8221;这一节，仔细拜读。 特别是假如你的系统没有安装net-snmp的时候，要认真读这篇文章 http://wiki.jiankongbao.com/doku.php/文档:安全指引#linux_snmp 这里有几点是我在配置过程中遇到的问题，说明一下： (1)我在编译的时候，对&#8220;&#8211;with-openssl=/usr/&#8221;这个比较不解，于是没有跟上参数，用的&#8220;&#8211;with-openssl&#8221; (2)在vi /var/net-snmp/snmpd.conf的时候，提示无法建立，这个我手工在/var目录下建了个 net-snmp 目录搞定 (3)iptables开启端口后，记得重启下防火墙的服务 (4)第一次试v3不成功，修改配置文件后，需要killall -9 snmpd，然后重启snmpd服务&#8230;&#8230; 偷个懒，其实最完整的说明在官方网站的的wiki上都能找到，这里附上net-snmp安装及配置的原文： 安全指引 以下内容将帮助您更加安全的在监控宝上创建各类监控项目。 [...]]]></description>
			<content:encoded><![CDATA[<p>www.jiankongbao.com&nbsp; 服务器管理必备良器。<br />
 首先我们怀着半信半疑的态度注册一个免费的用户，吼吼！</p>
<p>然后看教程，<a href="http://wiki.jiankongbao.com/doku.php" target="_blank">http://wiki.jiankongbao.com/doku.php</a> 找到&ldquo;服务器监控&rdquo;的&ldquo;在Linux服务器上开启安全的SNMP代理&rdquo;这一节，仔细拜读。<br />
 特别是假如你的系统没有安装net-snmp的时候，要认真读这篇文章 <a href="601http://wiki.jiankongbao.com/doku.php/%C3%A6%C2%96%C2%87%C3%A6%C2%A1%C2%A3:%C3%A5%C2%AE%C2%89%C3%A5%C2%85%C2%A8%C3%A6%C2%8C%C2%87%C3%A5%C2%BC%C2%95#linux_snmp">http://wiki.jiankongbao.com/doku.php/文档:安全指引#linux_snmp</a></p>
<p>这里有几点是我在配置过程中遇到的问题，说明一下：<br />
 (1)我在编译的时候，对&ldquo;&#8211;with-openssl=/usr/&rdquo;这个比较不解，于是没有跟上参数，用的&ldquo;&#8211;with-openssl&rdquo;<br />
 (2)在vi /var/net-snmp/snmpd.conf的时候，提示无法建立，这个我手工在/var目录下建了个 net-snmp 目录搞定<br />
 (3)iptables开启端口后，记得重启下防火墙的服务<br />
 (4)第一次试v3不成功，修改配置文件后，需要killall -9 snmpd，然后重启snmpd服务&#8230;&#8230;<span id="more-997"></span></p>
<blockquote><p>偷个懒，其实最完整的说明在官方网站的的wiki上都能找到，这里附上net-snmp安装及配置的原文：<br />
 <strong>安全指引</strong></p>
<p>以下内容将帮助您更加安全的在监控宝上创建各类监控项目。</p>
<p>Linux SNMP</p>
<p>以下的示例采用SUSE10 Linux环境，但它同样适用于其它Linux发行版。</p>
<p>编译和安装</p>
<p>首先我们需要下载Net-SNMP的源代码，选择当前最新的版本5.4.2.1，地址如下：</p>
<p>http://sourceforge.net/projects/net-snmp/files/net-snmp/5.4.2.1/</p>
<p>接下来对下载的源代码包进行解压缩，如下：</p>
<p>suse10:~ # tar xzvf net-snmp-5.4.2.1.tar.gz<br />
 然后通过configure来生成编译规则，如下：</p>
<p>suse10:~ # cd net-snmp-5.4.2.1<br />
 suse10:~ # ./configure &#8211;prefix=/usr/local/snmp &#8211;with-openssl=/usr/ &#8211;with-mib-modules=ucd-snmp/diskio<br />
 注意，以上的</p>
<p>&#8211;with-mib-modules=ucd-snmp/diskio<br />
 选项，可以让服务器支持磁盘I/O监控。</p>
<p>接下来，开始编译和安装：</p>
<p>suse10:~ # make<br />
 suse10:~ # make install<br />
 到现在为止，我们已经有了可以运行的SNMP代理程序，它位于/usr/local/snmp/sbin/snmpd，在启动它之前，我们还要进行一些必要的设置。</p>
<p>设置安全的验证方式</p>
<p>将SNMP代理程序暴露给网络上的所有主机是很危险的，为了防止其它主机访问你的SNMP代理程序，我们需要在SNMP代理程序上加入身份验证机制。SNMP支持不同的验证机制，这取决于不同的SNMP协议版本，监控宝目前支持v2c和v3两个版本，其中v2c版本的验证机制比较简单，它基于明文密码和授权IP来进行身份验证，而v3版本则通过用户名和密码的加密传输来实现身份验证，我们建议使用v3，当然，只要按照以下的介绍进行配置，不论是v2c版本还是v3版本，都可以保证一定的安全性，你可以根据情况来选择。</p>
<p>注意一点，SNMP协议版本和SNMP代理程序版本是两回事，刚才说的v2c和v3是指SNMP协议的版本，而Net-SNMP是用来实现SNMP协议的程序套件，目前它的最新版本是刚才提到的5.4.2.1。</p>
<p>v2c</p>
<p>先来看如何配置v2c版本的SNMP代理，我们来创建snmpd的配置文件，默认情况下它是不存在的，我们来创建它，如下：</p>
<p>suse10:~ # vi /usr/local/snmp/share/snmp/snmpd.conf<br />
 然后我们需要创建一个只读帐号，也就是read-only community，在snmpd.conf中添加以下内容：</p>
<p>rocommunity jiankongbao 60.195.249.83<br />
 注意，这里的&ldquo;rocommunity&rdquo;表示这是一个只读的访问权限，监控宝只可以从你的服务器上获取信息，而不能对服务器进行任何设置。</p>
<p>紧接着的&ldquo;jiankongbao&rdquo;相当于密码，很多平台喜欢使用&ldquo;public&rdquo;这个默认字符串。这里的&ldquo;jiankongbao&rdquo;只是一个例子，你可以设置其它字符串作为密码。</p>
<p>最右边的&ldquo;60.195.249.83&rdquo;代表指定的监控点IP，这个IP地址是监控宝专用的监控点，这意味着只有监控宝有权限来访问你的SNMP代理程序。</p>
<p>所以，以上这段配置中，只有&ldquo;jiankongbao&rdquo;是需要你进行修改的，同时在监控宝上添加服务器的时候，需要提供这个字符串。</p>
<p>v3</p>
<p>当然，我们建议您使用v3版本来进行身份验证。对于一些早期版本的Linux分发版，其内置的SNMP代理程序可能并不支持v3，所以我们建议您按照前边介绍的方法，编译和安装最新的Net-Snmp。</p>
<p>v3支持另一种验证方式，需要创建一个v3的帐号，我们同样修改以下配置文件：</p>
<p>suse10:~ # vi /usr/local/snmp/share/snmp/snmpd.conf<br />
 然后添加一个只读帐号，如下：</p>
<p>rouser jiankongbao auth<br />
 可以看到，在v3中，&ldquo;rouser&rdquo;用于表示只读帐号类型，随后的&ldquo;jiankongbao&rdquo;是指定的用户名，后边的&ldquo;auth&rdquo;指明需要验证。</p>
<p>接下来，我们还要添加&ldquo;jiankongbao&rdquo;这个用户，这就是v3中的特殊机制，我们打开以下配置文件：</p>
<p>suse10:~ # vi /var/net-snmp/snmpd.conf<br />
 这个文件会在snmpd启动的时候被自动调用，我们需要在它里边添加创建用户的指令，如下：</p>
<p>createUser jiankongbao MD5 mypassword<br />
 这行配置的意思是创建一个名为&ldquo;jiankongbao&rdquo;的用户，密码为&ldquo;mypassword&rdquo;，并且用MD5进行加密传输。这里要提醒的是：</p>
<p>密码至少要有8个字节</p>
<p>这是SNMP协议的规定，如果小于8个字节，通信将无法进行。</p>
<p>值得注意的是，一旦snmpd启动后，出于安全考虑，以上这行配置会被snmpd自动删除，当然，snmpd会将这些配置以密文的形式记录在其它文件中，重新启动snmpd是不需要再次添加这些配置的，除非你希望创建新的用户。</p>
<p>以上配置中的用户名、密码和加密方式，在监控宝添加服务器的时候需要添加。</p>
<p>启动SNMP代理程序</p>
<p>经过配置后，现在可以启动snmpd，如下：</p>
<p>/usr/local/snmp/sbin/snmpd<br />
 如果要关闭，则可以直接kill这个进程，如下：</p>
<p>killall -9 snmpd<br />
 增强的安全机制</p>
<p>有了以上的验证机制，你就可以放心的使用SNMP代理了。但是，如果你的SNMP代理程序版本较低，可能会有一些别有用心的破坏者利用一些固有的漏洞进行破坏，比如发送较长的数据导致SNMP代理程序内存泄漏或者拒绝服务等，为此，你还可以使用防火墙（iptables）来进行增强的安全过滤。</p>
<p>在Linux中，我们用iptables来实现防火墙，一般情况下，除了流入指定端口的数据包以外，我们应该将其它流入的IP数据包抛弃。你可能已经配置了一定的防火墙规则，那么只要增加针对SNMP的规则即可。</p>
<p>SNMP代理程序默认监控在udp161端口，为你的iptables增加以下规则：</p>
<p>iptables -A INPUT -i eth0 -p udp -s 60.195.249.83 &#8211;dport 161 -j ACCEPT<br />
 以上设置中假设服务器外网网卡是eth0，你可以根据实际情况来修改。</p>
<p>这样一来，只有监控宝的专用监控器可以发送UDP数据包到你的服务器的161端口，与SNMP代理程序进行通信。</p>
<p>Windows SNMP</p>
<p>在Windows服务器上开启SNMP服务非常简单，您可以参考http:/.jiankongbao.com/?p=185。</p>
<p>MySQL 监控</p>
<p>创建MySQL权限</p>
<p>您需要在被监控的MySQL服务器上为监控宝创建一个专用的MySQL用户，这样做的好处是：</p>
<p>与您的其它MySQL用户进行有效隔离，独立管理。<br />
 对该用户进行受限管理，不需要给予任何MySQL权限。<br />
 指定监控宝的访问IP地址，阻止其它非法访问。<br />
 操作非常简单，在MySQL中操作如下：</p>
<p>CREATE USER &#8216;jiankongbao&#8217;@&#8217;60.195.252.106&#8242; IDENTIFIED BY&nbsp; &#8216;your_password&#8217;;<br />
 CREATE USER &#8216;jiankongbao&#8217;@&#8217;60.195.249.83&#8242;&nbsp; IDENTIFIED BY&nbsp; &#8216;your_password&#8217;;<br />
 在以上操作中，我们创建的MySQL用户名为&ldquo;jiankongbao&rdquo;，密码为&ldquo;your_password&rdquo;，建议您对其进行修改。除此之外，目前我们不需要对该MySQL账户授予任何权限。</p>
<p>同时，监控宝目前指定的授权IP地址为：60.195.252.106、60.195.249.83，请同时添加，随后如有变更，我们会及时通知用户。</p>
<p>防火墙安全配置</p>
<p>尽管以上的MySQL配置已经相当安全，您仍然可以通过防火墙来保护您的MySQL服务器，以Linux的iptables为例，您可以仅开放监控宝指定IP地址来访问MySQL服务器的端口。</p>
<p>iptables操作如下：</p>
<p>iptables -A INPUT -i eth0 -p tcp -s 60.195.252.106 &#8211;dport 3306 -j ACCEPT<br />
 iptables -A INPUT -i eth0 -p tcp -s 60.195.249.83&nbsp; &#8211;dport 3306 -j ACCEPT<br />
 注意：在MySQL或者防火墙中指定授权IP地址的时候，请只开放我们指定的IP地址，而不要直接开放整个C类网段，比如60.195.252.0/24，因为该网段中其它服务器不在我们的可控范围内。</p>
<p>Apache 监控</p>
<p>修改httpd.conf</p>
<p>在添加Apache监控之前，我们需要开启Apache的status模块，以Apache2.x版本为例，我们需要修改httpd.conf，增加以下配置段：</p>
<p>ExtendedStatus On<br />
 &lt;Location /server-status&gt;<br />
 SetHandler server-status<br />
 Order deny,allow<br />
 Deny from all<br />
 Allow from 60.195.252.106<br />
 Allow from 60.195.249.83<br />
 &lt;/Location&gt;<br />
 这样一来，假如你的Apache所在服务器的域名和IP地址为</p>
<p>www.domain.com -&gt; 10.0.0.1<br />
 那么，Apache的状态页面地址便为：</p>
<p>http://www.domain.com/server-status</p>
<p> 或者</p>
<p>http://10.0.0.1/server-status</p>
<p> 受限访问设置</p>
<p>我们当然不希望其它人浏览status页面，所以您可以做一些限制，首先，对于默认的status地址，您可以进行修改，比如将：</p>
<p>&lt;Location /server-status&gt;<br />
 修改为：</p>
<p>&lt;Location /my-domain-status&gt;<br />
 其次，您已经看到，我们提供了指定的授权IP地址：60.195.252.106、60.195.249.83，您可以仅授权这个地址访问您的status页面。</p>
<p>Lighttpd 监控</p>
<p>Lighttpd的状态监控依赖于mod_status模块，幸运的是，Lighttpd缺省已经内置了mod_status模块，我们要做的就是打开配置文件lighttpd.conf，开启这个模块，也就是删除模块前边的&ldquo;#&rdquo;注释符，比如：</p>
<p>server.modules&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; “mod_rewrite”,<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; “mod_redirect”,<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; “mod_alias”,<br />
 “mod_access”,<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; “mod_trigger_b4_dl”,<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; “mod_auth”,<br />
 “mod_status”,<br />
 “mod_fastcgi”,<br />
 “mod_accesslog” )<br />
 为了便于描述，以上配置部分省略了其它的模块。</p>
<p>然后，在lighttpd.conf中找到以下部分：</p>
<p>#### status module<br />
 status.status-url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = “/server-status”<br />
 默认情况下以上语句是被注释的，同样，删掉注释符，保存配置文件，重启lighttpd，大功告成。</p>
<p>假如lighttpd所在服务器的IP为10.0.0.1，同时指向它的域名为www.domain.com。那么，这样一来，状态页面便是：</p>
<p>http://10.0.0.1/server-status</p>
<p> 或者</p>
<p>http://www.domain.com/server-status</p>
<p> 最后，建议您修改默认的server-status，比如：</p>
<p>#### status module<br />
 status.status-url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = “/my-lighttpd-status”<br />
 Nginx 监控</p>
<p>需要注意的是，Nginx默认安装不包含状态模块stub_status，所以，在编译Nginx的时候，需要添加以下参数：</p>
<p>&#8211;with-http_stub_status_module<br />
 一旦包含stub_status模块后，我们就可以在配置文件nginx.conf中开启状态页面：</p>
<p>http {<br />
 server {<br />
 listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80;<br />
 server_name&nbsp; localhost;</p>
<p>location / {<br />
 root&nbsp;&nbsp; html;<br />
 index&nbsp; index.html index.htm;<br />
 }</p>
<p>location /nginx-status {<br />
 stub_status on;<br />
 access_log&nbsp; off;<br />
 }<br />
 }<br />
 }<br />
 以上配置文件中，我们实际增加的部分是：</p>
<p>location /nginx-status {<br />
 stub_status on;<br />
 access_log&nbsp; off;<br />
 }<br />
 同样，假如Nginx所在服务器的IP为10.0.0.1，同时指向它的域名为www.domain.com，这样一来，Nginx的状态页面便是：</p>
<p>http://10.0.0.1/nginx-status</p>
<p> 或者</p>
<p>http://www.domain.com/nginx-status</p>
<p> 同样，建议您将以上示例中的nginx-status修改为其它字符串。</p>
<p>另外，Nginx的stub_status也支持授权IP的配置，您可以参考Nginx的手册，监控宝提供的服务监控点IP地址为：</p>
<p>60.195.252.106<br />
 60.195.249.83</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.viisee.net/archives/997/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下超大文件删除结尾若干行的方法</title>
		<link>http://www.viisee.net/archives/992</link>
		<comments>http://www.viisee.net/archives/992#comments</comments>
		<pubDate>Wed, 25 Aug 2010 09:41:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.viisee.net/?p=992</guid>
		<description><![CDATA[标题很唬人，超大是多大呢？今天我碰到的是4G。 在恢复一个MySQL的备份文件(db_backup.sql)的时候，老提示字符串有错误，开始以为是字符集的问题，于是在还原命令里强行写&#8211;default-character-set=gbk，也没有效果。 看到错误提示里有关键字&#8220;abcd.pdf&#8221;，于是想打开这个备份文件来看看是错在哪个表。 问题来了，这个文件有4G，估计没有哪个编辑器能顺溜溜地打开。好吧，先把它分割 #split -b 100m db_backup.sql 于是产生了若干个100M大小的文件 如xaa xab&#8230;.xbg等等&#8230;. 接下来就是重复地运行字符串搜索了 #grep &#8216;abcd.pdf&#8217; xaa #grep &#8216;abcd.pdf&#8217; xab &#8230;&#8230; 他娘的，终于在最后一个文件xbg里找到这个关键字了，早知道反过来查。这里应该有更聪明的方法，我严重怀疑自己花了不该花的时间。 [...]]]></description>
			<content:encoded><![CDATA[<p>标题很唬人，超大是多大呢？今天我碰到的是4G。</p>
<p>在恢复一个MySQL的备份文件(db_backup.sql)的时候，老提示字符串有错误，开始以为是字符集的问题，于是在还原命令里强行写&#8211;default-character-set=gbk，也没有效果。</p>
<p>看到错误提示里有关键字&ldquo;abcd.pdf&rdquo;，于是想打开这个备份文件来看看是错在哪个表。<br />
问题来了，这个文件有4G，估计没有哪个编辑器能顺溜溜地打开。好吧，先把它分割</p>
<blockquote><p><span style="color: #3333ff;">#split -b 100m db_backup.sql</span></p>
</blockquote>
<p>于是产生了若干个100M大小的文件 如xaa xab&#8230;.xbg等等&#8230;.<span id="more-992"></span><br />
接下来就是重复地运行字符串搜索了</p>
<blockquote><p><span style="color: #3333ff;">#grep &#8216;abcd.pdf&#8217; xaa</span><br />
<span style="color: #3333ff;"> #grep &#8216;abcd.pdf&#8217; xab</span></p>
</blockquote>
<p>&#8230;&#8230;<br />
他娘的，终于在最后一个文件xbg里找到这个关键字了，早知道反过来查。这里应该有更聪明的方法，我严重怀疑自己花了不该花的时间。</p>
<p>于是用编辑器哼哧哼哧打开了这个100M的xbg文件，搜啊搜，了解了更多信息后，终于知道这段错误是属于哪个表了，凶手就是你&mdash;&mdash;&ldquo;table1&rdquo;表！</p>
<p>通过查看代码，发现果然有问题，这个表是数据库里面不应该存在的，可能是以前测试的时候不小心遗留下来的，它的字符集与其他正常的表不一样，所以在还原的时候报错。</p>
<p>算我运气好，这个表的还原sql语句刚好在这个超大文件的最末端，只需要删掉即可。</p>
<p>我首先用编辑器删除最后一段文本，然后再合并这些之前分割的文件为一个新的&ldquo;db_backup_merge.sql&rdquo;</p>
<blockquote><p><span style="color: #3333ff;">#cat x*&gt;db_backup_merge.sql</span></p>
</blockquote>
<p>拿它运行还原命令 </p>
<blockquote><p><span style="color: #3333ff;">mysql -uroot -pxxxx data1&lt;db_backup_merge.sql</span></p>
<p>&nbsp;</p>
</blockquote>
<p>报错</p>
<blockquote><p><span style="color: #cc0000;">unknow command “\”</span></p>
<p>&nbsp;</p>
</blockquote>
<p>
汗，估计是分割、合并、编辑的时候系统自动添加了不必要的结尾符号。看来这条路走不通了。</p>
<p>只能直接针对那个大型文件下手。</p>
<p>现在，我们逐步精确我们要删除的那段文字的总行数。通过不断看末尾的信息&#8230;&#8230;<br />
<span style="color: #3333ff;"><br />
</span></p>
<blockquote><p><span style="color: #3333ff;"> #tail -n 20 db_backup.sql </span> 少了一点&hellip;&hellip;<br />
 <span style="color: #3333ff;">#tail -n 100 db_backup.sql </span>多了一点&hellip;&hellip;</p>
<p>&nbsp;</p>
</blockquote>
<p>&#8230;&#8230;<br />
若干次尝试后，确定了要删除文字属于最后的43行。<br />
那么如何得到除了这最后43行的所有前面的内容呢？</p>
<p>先看看这个大文件总共有多少行吧</p>
<p>&nbsp;</p>
<blockquote><p><span style="color: #3333ff;">#wc -l db_backup.sql</span></p>
<p>&nbsp;</p>
</blockquote>
<p>
6953行&#8230;<br />
那么意思是除去那要删掉的43行，剩下有用的总共有  <span style="color: #cc0000;">6953 &#8211; 43 = 6910 </span>行~<br />
好了，开始获取吧，然后保存到一个新的&ldquo;db_backup_head.sql&rdquo;里面</p>
<p>&nbsp;</p>
<blockquote><p><span style="color: #3333ff;">#head -6910 db_backup.sql&gt;db_backup_head.sql</span></p>
<p>&nbsp;</p>
</blockquote>
<p>
多检查几次看看是不是有遗失的行</p>
<p>&nbsp;</p>
<blockquote><p><span style="color: #3333ff;">#tail -n 20 db_backup_head.sql</span></p>
<p>&nbsp;</p>
</blockquote>
<p>
如果有问题，那就调整数字，直到得到一个你需要的处理过的、完整的、准确的文件。<br />
您慢慢检查吧，在下就不陪了。</p>
<p>开始恢复：</p>
<blockquote><p><span style="color: #3333ff;">mysql -uroot -pxxxx data1</span></p>
<p>&nbsp;</p>
</blockquote>
<p>
成功~</p>
]]></content:encoded>
			<wfw:commentRss>http://www.viisee.net/archives/992/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL还原时出现超时“gone away”的问题解决方法</title>
		<link>http://www.viisee.net/archives/990</link>
		<comments>http://www.viisee.net/archives/990#comments</comments>
		<pubDate>Wed, 25 Aug 2010 05:59:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.viisee.net/?p=990</guid>
		<description><![CDATA[在还原比较大的mysql备份文件的时候，经常出现“gone away”的提示，这是由于MySQL的默认配置中相关参数没有设置好的原因。 要解决这个问题，我们需要先打开你的MySQL安装目录的 my.ini(linux下为my.cnf)文件，找到[mysqld]这一节（注意，这很重要，我试过如果放在其他地方，是不会起作用的），然后在里面加上如下的三行，这三行就随便放哪里都行的，如下是一个例子：]]></description>
			<content:encoded><![CDATA[<p>在还原比较大的mysql备份文件的时候，经常出现“gone away”的提示，这是由于MySQL的默认配置中相关参数没有设置好的原因。<br />
要解决这个问题，我们需要先打开你的MySQL安装目录的 my.ini(linux下为my.cnf)文件，找到[mysqld]这一节（注意，这很重要，我试过如果放在其他地方，是不会起作用的），然后在里面加上如下的三行，这三行就随便放哪里都行的，如下是一个例子：</p>
<p><img style="max-width: 800px;" src="http://www.viisee.net/wp-content/uploads/2010/08/2010-08-25_135400.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.viisee.net/archives/990/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2008的另一优秀SVN插件&#8212;&#8212;Rocketsvn</title>
		<link>http://www.viisee.net/archives/973</link>
		<comments>http://www.viisee.net/archives/973#comments</comments>
		<pubDate>Tue, 24 Aug 2010 10:09:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[软件使用]]></category>

		<guid isPermaLink="false">http://www.viisee.net/?p=973</guid>
		<description><![CDATA[出场嘉宾： Rocketsvn 一直以来是用的AnkhSvn-2.1.7141.181，因为够用，所以也没有升级过，使用起来还是很方便的，开一小窗口，需要的时候就点击按钮即可，但是越来越觉得不能设置键盘快捷操作是个软肋，之前在《在eclipse中整合svn客户端的方法》一文中介绍过eclipse里的svn快捷操作，netbeans里也可以设置快捷，遂觉得VS2008里的这个ankhsvn越来越不好用了。（如图，您能从那小小的图标看出来它是干啥的吗？） &#160; 我只需要一个能减少commit操作时间的快捷键而已！ 于是找到了本文的主角RocketSVN，据说以前是收费的，现在免费了。下载地址是：http://www.axosoft.com/rocketsvn 首先安装，然后重启一下VS2008,在那个一闪而过的启动窗口里可以看到那个小火箭。。。。说明安装成功了 &#160; 然后打开&#8220;工具&#8221;-&#62;&#8220;选项&#8221;，在下面的Source Control里选中RocketSVN为默认的。下面还有两个 Environment和User Tools，有兴趣你也操作一下吧。 &#160; 接下来我们可以看到菜单栏已经多了一个&#8220;RocketSVN&#8221;，下面包括了所有的SVN操作，具体就不细说了。 &#160; 下面开始我们关键的设置快捷键，以本人使用频率最高的commit为例。打开&#8220;工具&#8221;-&#62;&#8220;选项&#8221;-&#62;&#8220;环境&#8221;-&#62;&#8220;键盘&#8221;，为了方便在那一串列表里快速找到Rocket SVN的提交操作，我们在3处输入&#8220;Rocket&#8221;进行筛选，然后找到需要设置快捷键的操作&#8220;RocketSVN.CommitChanges&#8221;，作为一个英语非常艰辛地通过了4级的人，我找到了，你呢？ 然后到4处，按下你需要设置的快捷键，注意尽量不要和其他软件有冲突，然后点击&#8220;分配&#8221;，最后确定。 &#160; 测试一下，我们修改了一个文件后，按下刚设置的快捷键，这时如果不出意外，就弹出文件提交的确认窗口了 [...]]]></description>
			<content:encoded><![CDATA[<p>出场嘉宾：</p>
<h4>Rocketsvn</h4>
<p>一直以来是用的AnkhSvn-2.1.7141.181，因为够用，所以也没有升级过，使用起来还是很方便的，开一小窗口，需要的时候就点击按钮即可，但是越来越觉得不能设置键盘快捷操作是个软肋，之前在<a href="http://www.viisee.net/?p=901" target="_blank">《在eclipse中整合svn客户端的方法》</a>一文中介绍过eclipse里的svn快捷操作，netbeans里也可以设置快捷，遂觉得VS2008里的这个ankhsvn越来越不好用了。（如图，您能从那小小的图标看出来它是干啥的吗？）</p>
<p><a href="http://www.viisee.net/wp-content/uploads/2010/08/image.png"></a>&nbsp;<a rel="attachment wp-att-974" href="http://www.viisee.net/?attachment_id=974"><img class="alignnone size-full wp-image-974" title="2010-08-24_181110" src="http://www.viisee.net/wp-content/uploads/2010/08/2010-08-24_181110.png" alt="" width="245" height="188" /></a></p>
<p>我只需要一个能减少commit操作时间的快捷键而已！</p>
<p>于是找到了本文的主角RocketSVN，据说以前是收费的，现在免费了。下载地址是：<a title="http://www.axosoft.com/rocketsvn" href="http://www.axosoft.com/rocketsvn">http://www.axosoft.com/rocketsvn</a></p>
<p>首先安装，然后重启一下VS2008,在那个一闪而过的启动窗口里可以看到那个小火箭。。。。说明安装成功了<span id="more-973"></span></p>
<p><a href="http://www.viisee.net/wp-content/uploads/2010/08/image1.png"></a>&nbsp;<a rel="attachment wp-att-976" href="http://www.viisee.net/?attachment_id=976"><img class="alignnone size-medium wp-image-976" title="2010-08-24_181122" src="http://www.viisee.net/wp-content/uploads/2010/08/2010-08-24_181122.png" alt="" /></a></p>
<p>然后打开&ldquo;工具&rdquo;-&gt;&ldquo;选项&rdquo;，在下面的Source Control里选中RocketSVN为默认的。下面还有两个 Environment和User Tools，有兴趣你也操作一下吧。</p>
<p><a href="http://www.viisee.net/wp-content/uploads/2010/08/image2.png"></a>&nbsp;<a rel="attachment wp-att-977" href="http://www.viisee.net/?attachment_id=977"><img class="alignnone size-medium wp-image-977" title="2010-08-24_181129" src="http://www.viisee.net/wp-content/uploads/2010/08/2010-08-24_181129.png" alt="" /></a></p>
<p>接下来我们可以看到菜单栏已经多了一个&ldquo;RocketSVN&rdquo;，下面包括了所有的SVN操作，具体就不细说了。</p>
<p><a href="http://www.viisee.net/wp-content/uploads/2010/08/image3.png"></a>&nbsp;<a rel="attachment wp-att-978" href="http://www.viisee.net/?attachment_id=978"><img class="alignnone size-full wp-image-978" title="2010-08-24_181137" src="http://www.viisee.net/wp-content/uploads/2010/08/2010-08-24_181137.png" alt="" /></a></p>
<p>下面开始我们关键的设置快捷键，以本人使用频率最高的commit为例。打开&ldquo;工具&rdquo;-&gt;&ldquo;选项&rdquo;-&gt;&ldquo;环境&rdquo;-&gt;&ldquo;键盘&rdquo;，为了方便在那一串列表里快速找到Rocket SVN的提交操作，我们在3处输入&ldquo;Rocket&rdquo;进行筛选，然后找到需要设置快捷键的操作&ldquo;RocketSVN.CommitChanges&rdquo;，作为一个英语非常艰辛地通过了4级的人，我找到了，你呢？</p>
<p>然后到4处，按下你需要设置的快捷键，注意尽量不要和其他软件有冲突，然后点击&ldquo;分配&rdquo;，最后确定。</p>
<p><a href="http://www.viisee.net/wp-content/uploads/2010/08/image4.png"></a>&nbsp;<a rel="attachment wp-att-979" href="http://www.viisee.net/?attachment_id=979"><img class="alignnone size-medium wp-image-979" title="2010-08-24_181145" src="http://www.viisee.net/wp-content/uploads/2010/08/2010-08-24_181145.png" alt="" /></a></p>
<p>测试一下，我们修改了一个文件后，按下刚设置的快捷键，这时如果不出意外，就弹出文件提交的确认窗口了</p>
<p><a href="http://www.viisee.net/wp-content/uploads/2010/08/image5.png"></a>&nbsp;<a rel="attachment wp-att-980" href="http://www.viisee.net/?attachment_id=980"><img class="alignnone size-medium wp-image-980" title="2010-08-24_181151" src="http://www.viisee.net/wp-content/uploads/2010/08/2010-08-24_181151.png" alt="" /></a></p>
<p>于是乎，我可以不用去寻找那个小图标，键指如飞了&hellip;&hellip;ankhSVN从此退休，也让我明白了一个道理，做产品，要急用户之所急，想用户之所想！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.viisee.net/archives/973/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sql语句中COUNT与DISTINCT一起使用的方法</title>
		<link>http://www.viisee.net/archives/956</link>
		<comments>http://www.viisee.net/archives/956#comments</comments>
		<pubDate>Sat, 21 Aug 2010 09:02:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.viisee.net/?p=956</guid>
		<description><![CDATA[来自于http://pavel.javaeye.com/622382 SELECT COUNT(DISTINCT column(s)) FROM table 举例 With this “Orders” Table: 用的是这张”Orders”表: Company OrderNumber Sega 3412 W3Schools 2312 Trio 4678 [...]]]></description>
			<content:encoded><![CDATA[<p>来自于<a title="http://pavel.javaeye.com/622382" href="http://pavel.javaeye.com/622382">http://pavel.javaeye.com/622382</a></p>
<pre>SELECT COUNT(DISTINCT column(s)) FROM table</pre>
<p><strong>举例<span id="more-956"></span></strong></p>
<p>With this “Orders” Table:</p>
<p>用的是这张”Orders”表:</p>
<p>Company</p>
<p>OrderNumber</p>
<p>Sega</p>
<p>3412</p>
<p>W3Schools</p>
<p>2312</p>
<p>Trio</p>
<p>4678</p>
<p>W3Schools</p>
<p>6798</p>
<p><strong>举例</strong></p>
<pre>SELECT COUNT(Company) FROM Orders</pre>
<p><strong>结果:</strong></p>
<pre>4</pre>
<p><strong>举例</strong></p>
<pre>SELECT COUNT(DISTINCT Company) FROM Orders</pre>
<p><strong>结果:</strong></p>
<pre>3</pre>
<p>&nbsp;</p>
<p>这里我使用的例子是：</p>
<blockquote><p>SELECT <strong><span style="color: #0000ff;">COUNT(DISTINCT d.did)</span></strong> FROM dtable d LEFT JOIN atable a ON d.did=a.aid</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.viisee.net/archives/956/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
