<?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>IDC免费资源网</title>
	<atom:link href="http://www.idcfree.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.idcfree.com</link>
	<description>与您分享互联网！</description>
	<lastBuildDate>Sat, 19 May 2012 03:05:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>sql无法打开用户默认数据库，登录失败，用户‘sa’登录失败，错误：4064</title>
		<link>http://www.idcfree.com/sql-sa-4064.html</link>
		<comments>http://www.idcfree.com/sql-sa-4064.html#comments</comments>
		<pubDate>Sat, 19 May 2012 03:05:55 +0000</pubDate>
		<dc:creator>idcFREE</dc:creator>
				<category><![CDATA[MSSQL教程]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.idcfree.com/?p=3250</guid>
		<description><![CDATA[无法打开用户默认数据库，登录失败，这是因为登录帐户的默认数据库被删除。 解决方案：用windows身份模式进入，选择“安全性”&#8212;”登录名”&#8212;&#8212;“sa”，在sa上右击，弹出如图窗口，设置密码，然后把默认数据库选择为master。 断开windows身份连接，再用sqlserver身份登录，即可。]]></description>
			<content:encoded><![CDATA[<div id="article_content">
<p>无法打开用户默认数据库，登录失败，这是因为登录帐户的默认数据库被删除。</p>
<p>解决方案：用windows身份模式进入，选择“安全性”&#8212;”登录名”&#8212;&#8212;“sa”，在sa上右击，弹出如图窗口，设置密码，然后把默认数据库选择为master。</p>
<p>断开windows身份连接，再用sqlserver身份登录，即可。</p>
<p><span id="more-3250"></span></p>
<p><img src="http://www.idcfree.com/wp-content/uploads/upfiles/2012/05/030556Txz.png" alt="" /></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.idcfree.com/sql-sa-4064.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>生成SQL Server数据库脚本</title>
		<link>http://www.idcfree.com/sql-server-jiaoben.html</link>
		<comments>http://www.idcfree.com/sql-server-jiaoben.html#comments</comments>
		<pubDate>Sat, 19 May 2012 01:50:16 +0000</pubDate>
		<dc:creator>idcFREE</dc:creator>
				<category><![CDATA[MSSQL教程]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.idcfree.com/?p=3247</guid>
		<description><![CDATA[数据库迁移，如果源库的SQL SERVER版本与目标库相同，或更低，没有什么问题，可以采用2种方式： 1）备份、还原的方式 2）直接拷贝数据库文件的方式（从源库分离，拷贝到目标库附加） 但如果源库的SQL SERVER版本比目标库高，就没办法了，只好用 生成数据库脚本 + 导出导入数据 的老土办法了。生成数据库脚本好像也有个选项可以带数据，我没试过，但有大虾说这只适合少量数据的情况。 生成数据库脚本，有些地方值得一提： 1、权限默认没有选上。应该选上。点“高级”可发现 这样生成的脚本，就可以将权限带出来，如： GRANT EXECUTE ON [dbo].[news_prd_GetForSlideShow] TO [spider] AS [dbo] GO 存储过程[dbo].[news_prd_GetForSlideShow]  的 权限EXECUTE 赋给了用户spider &#160; 2、在目标库，将用户与登录名映射。 数据库的用户与登录名是分开的。二者是映射的关系。一个登录名可以映射多个数据库里的用户，但每个数据库只能映射一个；而用户则只能映射一个登录名。 对于数据库迁移，很可能出现登录名跟之前发生变化的状况，或者要新增，或者是映射现有的。之前我一直习惯用户名和登录名的名字相同，迁移之后，搞得很狼狈。 在导出来的脚本中，对于用户名和登录名部分，会有如下语句： /****** Object:  User [spider]    Script Date: 05/18/2012 10:09:27 ******/ CREATE USER [spider] FOR LOGIN [spider] WITH DEFAULT_SCHEMA=[spider] GO 意思就是说将用户名 [spider] 映射到登录名 [spider]。（习惯了两个名字取得一模一样） 但在目标数据库实例里面，不存在一个这么一个叫[spider]的登录名，只有一个叫[big_spider]，那应该将语句改成 [...]]]></description>
			<content:encoded><![CDATA[<p>数据库迁移，如果源库的SQL SERVER版本与目标库相同，或更低，没有什么问题，可以采用2种方式：</p>
<p>1）备份、还原的方式</p>
<p>2）直接拷贝数据库文件的方式（从源库分离，拷贝到目标库附加）</p>
<p>但如果源库的SQL SERVER版本比目标库高，就没办法了，只好用 生成数据库脚本 + 导出导入数据 的老土办法了。生成数据库脚本好像也有个选项可以带数据，我没试过，但有大虾说这只适合少量数据的情况。</p>
<p>生成数据库脚本，有些地方值得一提：</p>
<p>1、权限默认没有选上。应该选上。点“高级”可发现<span id="more-3247"></span></p>
<p><img src="http://www.idcfree.com/wp-content/uploads/upfiles/2012/05/015017Xoi.jpg" alt="" data-pinit="registered" /></p>
<p>这样生成的脚本，就可以将权限带出来，如：</p>
<p>GRANT EXECUTE ON [dbo].[news_prd_GetForSlideShow] TO [spider] AS [dbo]<br />
GO</p>
<p>存储过程[dbo].[news_prd_GetForSlideShow]  的 权限EXECUTE 赋给了用户spider</p>
<p>&nbsp;</p>
<p>2、在目标库，将用户与登录名映射。</p>
<p>数据库的用户与登录名是分开的。二者是映射的关系。一个登录名可以映射多个数据库里的用户，但每个数据库只能映射一个；而用户则只能映射一个登录名。</p>
<p>对于数据库迁移，很可能出现登录名跟之前发生变化的状况，或者要新增，或者是映射现有的。之前我一直习惯用户名和登录名的名字相同，迁移之后，搞得很狼狈。</p>
<p>在导出来的脚本中，对于用户名和登录名部分，会有如下语句：</p>
<p>/****** Object:  User [spider]    Script Date: 05/18/2012 10:09:27 ******/<br />
CREATE USER [spider] FOR LOGIN [spider] WITH DEFAULT_SCHEMA=[spider]<br />
GO</p>
<p>意思就是说将用户名 [spider] 映射到登录名 [spider]。（习惯了两个名字取得一模一样）</p>
<p>但在目标数据库实例里面，不存在一个这么一个叫[spider]的登录名，只有一个叫[big_spider]，那应该将语句改成</p>
<p>&nbsp;</p>
<p>CREATE USER [spider] FOR LOGIN [big_spider] WITH DEFAULT_SCHEMA=[spider]<br />
GO</p>
<p>&nbsp;</p>
<p>或者硬着头皮运行脚本，报错，但用户名还是会建立起来，再加以修改：</p>
<p>EXEC sp_change_users_login &#8216;update_one&#8217; , &#8216;spider&#8217; , &#8216;big_spider&#8217; ;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.idcfree.com/sql-server-jiaoben.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server 2008的错误日志太大</title>
		<link>http://www.idcfree.com/sql-server-2008-rizhi.html</link>
		<comments>http://www.idcfree.com/sql-server-2008-rizhi.html#comments</comments>
		<pubDate>Sat, 19 May 2012 01:43:24 +0000</pubDate>
		<dc:creator>idcFREE</dc:creator>
				<category><![CDATA[MSSQL教程]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2008]]></category>

		<guid isPermaLink="false">http://www.idcfree.com/?p=3244</guid>
		<description><![CDATA[早上客户说，网站为毛出问题了？ 出问题。问题永远出现在早上刚上班，电脑刚打开的时刻，永远在最忙碌或者刚喘口气，准备实现一个宏伟功能的时候蹦出来，让你猝不及防。工作，仿佛就是在救火。今天救一个，明天救一个。 访问客户网站，报错，黄底红字的.NET报错界面，让人心惊肉跳。我立刻黑着脸质问旁边的家伙，他这2天在更新，肯定是更新之后没有检查。“混蛋！什么垃圾！”我心中充满了蔑视和愤怒。这个月的绩效给你个不及格。马拉到隔壁去了。 这个家伙不能依靠，等他，不知道猴年马月才搞的定，只好亲自上阵。小姐不济，妈咪来了。 登录服务器，发觉系统警告说C盘空间严重不足。天啦，只剩下0KB。 找来找去，发现是SQL SERVER占用空间太大。没理由，里面的数据库，日志都不大，怎么会爆棚了呢？ 我好慌乱。因为我没遇到过这种问题。我这个DBA是盗版的。 查来查去，发现是目录C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLLog，里面有几个ERRORLOG十分巨大，其中一个17GB。 这是神马文件？原来是SQL SERVER的错误日志。 并且它还在增长，象的士上的跳表。 我感到恐惧，立刻就停掉了SQL SERVER。然后在C盘移走了一些无关紧要的文件（当然还没傻到去碰SQL SERVER的），挤出了200M，然后开启SQL（谢天谢地，还能开），网站也可以访问了。 但问题出在哪里呢？ 我打开sql server的management studio，点 管理 &#8211; SQL SERVER日志，看了当前的日志，发现有人在试探sa的密码。怪不得日志这么大，都是他们在不停地试 &#160; &#160; 混蛋。数据库部署的时候，没有改默认端口，还是1433，我立刻改了端口。结果错误就没有了。且让他们慢慢试。 &#160; 然后这些巨大无比的错误日志该怎么删掉呢？management studio这里不能直接删的。当然手动更不能删了。查了一下，方法是这样的： 1、点SQL SERVER错误日志，右键，配置，限定错误日志的数目，比如6个 2、然后运行命令： EXEC sp_cycle_errorlog ; 这个命令的作用是将当前日志归档，然后新建一个日志。因为日志数量被限制为6，那么只要运行这个步骤若干次，那么老的日志就会被回收了。SQL服务重启一次，也会将日志归档新建，但这个命令不用重启。 &#160; 结论： 1、SQL的默认端口一定要改 2、sa的密码一定要设的够强。]]></description>
			<content:encoded><![CDATA[<p>早上客户说，网站为毛出问题了？</p>
<p>出问题。问题永远出现在早上刚上班，电脑刚打开的时刻，永远在最忙碌或者刚喘口气，准备实现一个宏伟功能的时候蹦出来，让你猝不及防。工作，仿佛就是在救火。今天救一个，明天救一个。</p>
<p>访问客户网站，报错，黄底红字的.NET报错界面，让人心惊肉跳。我立刻黑着脸质问旁边的家伙，他这2天在更新，肯定是更新之后没有检查。“混蛋！什么垃圾！”我心中充满了蔑视和愤怒。这个月的绩效给你个不及格。马拉到隔壁去了。</p>
<p>这个家伙不能依靠，等他，不知道猴年马月才搞的定，只好亲自上阵。小姐不济，妈咪来了。</p>
<p>登录服务器，发觉系统警告说C盘空间严重不足。天啦，只剩下0KB。</p>
<p>找来找去，发现是SQL SERVER占用空间太大。没理由，里面的数据库，日志都不大，怎么会爆棚了呢？<span id="more-3244"></span></p>
<p>我好慌乱。因为我没遇到过这种问题。我这个DBA是盗版的。</p>
<p>查来查去，发现是目录C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLLog，里面有几个ERRORLOG十分巨大，其中一个17GB。</p>
<p>这是神马文件？原来是SQL SERVER的错误日志。</p>
<p>并且它还在增长，象的士上的跳表。</p>
<p>我感到恐惧，立刻就停掉了SQL SERVER。然后在C盘移走了一些无关紧要的文件（当然还没傻到去碰SQL SERVER的），挤出了200M，然后开启SQL（谢天谢地，还能开），网站也可以访问了。</p>
<p>但问题出在哪里呢？</p>
<p>我打开sql server的management studio，点 管理 &#8211; SQL SERVER日志，看了当前的日志，发现有人在试探sa的密码。怪不得日志这么大，都是他们在不停地试</p>
<p>&nbsp;</p>
<p><img src="http://www.idcfree.com/wp-content/uploads/upfiles/2012/05/014324Btr.gif" alt="" /></p>
<p>&nbsp;</p>
<p>混蛋。数据库部署的时候，没有改默认端口，还是1433，我立刻改了端口。结果错误就没有了。且让他们慢慢试。</p>
<p>&nbsp;</p>
<p>然后这些巨大无比的错误日志该怎么删掉呢？management studio这里不能直接删的。当然手动更不能删了。查了一下，方法是这样的：</p>
<p>1、点SQL SERVER错误日志，右键，配置，限定错误日志的数目，比如6个</p>
<p>2、然后运行命令：</p>
<p>EXEC sp_cycle_errorlog ;</p>
<p>这个命令的作用是将当前日志归档，然后新建一个日志。因为日志数量被限制为6，那么只要运行这个步骤若干次，那么老的日志就会被回收了。SQL服务重启一次，也会将日志归档新建，但这个命令不用重启。</p>
<p>&nbsp;</p>
<p>结论：</p>
<p>1、SQL的默认端口一定要改</p>
<p>2、sa的密码一定要设的够强。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.idcfree.com/sql-server-2008-rizhi.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server 的导入导出文件</title>
		<link>http://www.idcfree.com/sql-server-daoru-daochu.html</link>
		<comments>http://www.idcfree.com/sql-server-daoru-daochu.html#comments</comments>
		<pubDate>Sat, 19 May 2012 01:41:17 +0000</pubDate>
		<dc:creator>idcFREE</dc:creator>
				<category><![CDATA[MSSQL教程]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.idcfree.com/?p=3239</guid>
		<description><![CDATA[每次要用到SQL SERVER 的导入导出文件都大为烦恼，甚至吓到面无人色。实在是太难用了，又繁琐，又总是报错，如果不是万不得已，鬼才用它。 这种不幸的事情，今天又撞上了。 事关有个数据库要从机器A迁移到机器B，倒霉的是，源数据库的版本比目标数据库高。真他妈的，微软，我操你姥姥！高版本的不能迁到低版本，那你在备份的时候加个选项不行吗？两个数据库都是SQL 2008，但居然还有高低之分。草泥马。 只好先从源数据库生成脚本，到目标库运行，然后将数据库导出导入。 这导出导入，真是吃尽了千辛万苦！ 总结问题及解决方法如下： 一、导出 导出相对而言比较简单，一般都默认就可以了。有2个地方值得一提 1、unicode 适用于用到了字段类型为 nvarchar(max) 之类的情况，默认死活导不出来，将unicode选项勾上就可以鸟。 &#160; 2、文本限定符 导出的时候也有个文本框让你填，叫“文本限定符”，what is this? 大意是这样子的：填上的这个东西，将会用于“框住”每个字段值，让字段有个清晰的边界，利于导入时系统分辨。 好比说，我导出的数据中，有好多文本，有些字段甚至保存的是文章内容，里面有逗号、句号、回车符什么的，那这个字段之间的边界就很不清晰了，导入的时候，系统很可能无法识别。这样的话就要靠这个文本限定符。 文本限定符可以不只一个字符！比如我这样定义文本限定符：!#!，那么导出来的文本内容是这样的： !#!1!#!,!#!&#60;p&#62;文章概要：我心疼他，感激他，也想好好的爱他一生，狗屁！看错人啦！&#60;/p&#62;!#! 相应地，导入时也要填写相同的文本限定符。 &#160; 二、导入 1、一定要纠正字段的数据类型 导入的时候，系统会将所有的字段都默认当成字符型，且长度只有50，死活导不进去。一定要纠正字段的数据类型： 其中INT是四字节带符号整型，TINYINT是单字节无符号整型，NVARCHAR(MAX)是Unicode 文本流 [DT_NTEXT]，等等 &#160; 2、注意标识列 如果有字段是标识列，那应该在编辑映射时，将“启用标识插入”]]></description>
			<content:encoded><![CDATA[<p>每次要用到SQL SERVER 的导入导出文件都大为烦恼，甚至吓到面无人色。实在是太难用了，又繁琐，又总是报错，如果不是万不得已，鬼才用它。</p>
<p>这种不幸的事情，今天又撞上了。</p>
<p>事关有个数据库要从机器A迁移到机器B，倒霉的是，源数据库的版本比目标数据库高。真他妈的，微软，我操你姥姥！高版本的不能迁到低版本，那你在备份的时候加个选项不行吗？两个数据库都是SQL 2008，但居然还有高低之分。草泥马。</p>
<p>只好先从源数据库生成脚本，到目标库运行，然后将数据库导出导入。<span id="more-3239"></span></p>
<p>这导出导入，真是吃尽了千辛万苦！</p>
<p>总结问题及解决方法如下：</p>
<p>一、导出</p>
<p>导出相对而言比较简单，一般都默认就可以了。有2个地方值得一提</p>
<p>1、unicode</p>
<p>适用于用到了字段类型为 nvarchar(max) 之类的情况，默认死活导不出来，将unicode选项勾上就可以鸟。</p>
<p><img src="http://www.idcfree.com/wp-content/uploads/upfiles/2012/05/014117hKO.jpg" alt="" data-pinit="registered" /></p>
<p>&nbsp;</p>
<p>2、文本限定符</p>
<p>导出的时候也有个文本框让你填，叫“文本限定符”，what is this?</p>
<p>大意是这样子的：填上的这个东西，将会用于“框住”每个字段值，让字段有个清晰的边界，利于导入时系统分辨。</p>
<p>好比说，我导出的数据中，有好多文本，有些字段甚至保存的是文章内容，里面有逗号、句号、回车符什么的，那这个字段之间的边界就很不清晰了，导入的时候，系统很可能无法识别。这样的话就要靠这个文本限定符。</p>
<p>文本限定符可以不只一个字符！比如我这样定义文本限定符：!#!，那么导出来的文本内容是这样的：</p>
<p>!#!1!#!,!#!&lt;p&gt;文章概要：我心疼他，感激他，也想好好的爱他一生，狗屁！看错人啦！&lt;/p&gt;!#!</p>
<p>相应地，导入时也要填写相同的文本限定符。</p>
<p>&nbsp;</p>
<p>二、导入</p>
<p>1、一定要纠正字段的数据类型</p>
<p>导入的时候，系统会将所有的字段都默认当成字符型，且长度只有50，死活导不进去。一定要纠正字段的数据类型：</p>
<p><img src="http://www.idcfree.com/wp-content/uploads/upfiles/2012/05/014118qAK.jpg" alt="" data-pinit="registered" /></p>
<p>其中INT是四字节带符号整型，TINYINT是单字节无符号整型，NVARCHAR(MAX)是Unicode 文本流 [DT_NTEXT]，等等</p>
<p>&nbsp;</p>
<p>2、注意标识列</p>
<p>如果有字段是标识列，那应该在编辑映射时，将“启用标识插入”</p>
<p><img src="http://www.idcfree.com/wp-content/uploads/upfiles/2012/05/014118qTm.jpg" alt="" data-pinit="registered" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.idcfree.com/sql-server-daoru-daochu.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于MySQL的LIMIT 语法小优化</title>
		<link>http://www.idcfree.com/mysql-limit-youhua.html</link>
		<comments>http://www.idcfree.com/mysql-limit-youhua.html#comments</comments>
		<pubDate>Fri, 18 May 2012 23:00:24 +0000</pubDate>
		<dc:creator>idcFREE</dc:creator>
				<category><![CDATA[MySQL教程]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.idcfree.com/?p=3237</guid>
		<description><![CDATA[今天有朋友问起此类语句的优化，我大致给他介绍了下从SQL角度做简单的优化，至于应用程序方面的考虑咱暂时不考虑。 下面我来举一个简单的例子。 考虑如下表结构： /*DDL Information For &#8211; t_girl.t_page_sample*/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- Table          Create Table                                                     &#8212;&#8212;&#8212;&#8212;-  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- t_page_sample  CREATE TABLE `t_page_sample` (                                                    `id` int(10) unsigned NOT NULL,                                                 `v_state` tinyint(1) NOT NULL DEFAULT &#8217;1&#8242;,                                      `log_time` timestamp NOT NULL DEFAULT &#8217;0000-00-00 00:00:00&#8242;,                    `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,                     PRIMARY [...]]]></description>
			<content:encoded><![CDATA[<p>今天有朋友问起此类语句的优化，我大致给他介绍了下从SQL角度做简单的优化，至于应用程序方面的考虑咱暂时不考虑。<br />
下面我来举一个简单的例子。<br />
考虑如下表结构：<br />
/*DDL Information For &#8211; t_girl.t_page_sample*/<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- <span id="more-3237"></span></p>
<p>Table          Create Table                                                    <br />
&#8212;&#8212;&#8212;&#8212;-  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
t_page_sample  CREATE TABLE `t_page_sample` (                                  <br />
                 `id` int(10) unsigned NOT NULL,                               <br />
                 `v_state` tinyint(1) NOT NULL DEFAULT &#8217;1&#8242;,                    <br />
                 `log_time` timestamp NOT NULL DEFAULT &#8217;0000-00-00 00:00:00&#8242;,  <br />
                 `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,   <br />
                 PRIMARY KEY (`id`)                                            <br />
               ) ENGINE=MyISAM DEFAULT CHARSET=utf8</p>
<p>我的测试系统为标配DELL D630， XP系统。<br />
示例表的记录数：<br />
select count(*) from t_page_sample;</p>
<div id="art">&lt;!&#8211;&gt;</p>
<h3>query result(1 records)</h3>
<table border="1">
<tbody>
<tr>
<td bgcolor="silver">count(*)</td>
</tr>
<tr>
<td valign="top">993098</td>
</tr>
</tbody>
</table>
<p>下面我们来一步一步看看下面的这条语句：<br />
explain select sql_no_cache * from t_page_sample order by id asc limit 900001,20;<br />
&lt;!&#8211;&gt;<br />
&lt;!&#8211;&gt;</p>
<h3>query result(1 records)</h3>
<table border="1">
<tbody>
<tr>
<td bgcolor="silver">id</td>
<td bgcolor="silver">select_type</td>
<td bgcolor="silver">table</td>
<td bgcolor="silver">type</td>
<td bgcolor="silver">possible_keys</td>
<td bgcolor="silver">key</td>
<td bgcolor="silver">key_len</td>
<td bgcolor="silver">ref</td>
<td bgcolor="silver">rows</td>
<td bgcolor="silver">Extra</td>
</tr>
<tr>
<td valign="top">1</td>
<td valign="top">SIMPLE</td>
<td valign="top">t_page_sample</td>
<td valign="top">ALL</td>
<td valign="top">(NULL)</td>
<td valign="top">(NULL)</td>
<td valign="top">(NULL)</td>
<td valign="top">(NULL)</td>
<td valign="top">993098</td>
<td valign="top">Using filesort</td>
</tr>
</tbody>
</table>
<p>从上面可以看出，她没有用到任何索引，扫描的行数为993098,而且用到了排序！</p>
<p>select sql_no_cache * from t_page_sample order by id asc limit 900001,20;</p>
<p>(20 row(s)returned)<br />
(4688 ms taken)</p>
<p>那么我们怎么优化这条语句呢？<br />
首先，我们想到的是索引。 在这条语句中，只有ID可能能用到索引，那么我们给优化器加一个暗示条件，让他用到索引。</p>
<p>select sql_no_cache * from t_page_sample force index (primary) order by id asc limit 900001,20;</p>
<p>(20 row(s)returned)<br />
(9239 ms taken)</p>
<p>没想到用的时间竟然比不加索引还长。 看来这条路好像走不通了。<br />
我们尝试着变化下语句如下：<br />
select * from t_page_sample<br />
where id between<br />
         (select sql_no_cache id from t_page_sample order by id asc limit 900001,1)<br />
         and<br />
         (select sql_no_cache id from t_page_sample order by id asc limit 900020,1);</p>
<p>(20 row(s)returned)<br />
(625 ms taken)<br />
哇，这个很不错，足足缩短了将近15倍！<br />
那么还有优化的空间吗？<br />
我们再次变化语句：<br />
select * from t_page_sample<br />
where id &gt;= ( select sql_no_cache id from t_page_sample order by id asc limit 900001,1)<br />
limit 20;</p>
<p>(20 row(s)returned)<br />
(406 ms taken)</p>
<p>时间上又比上次的语句缩短了1/3。可喜可贺。</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.idcfree.com/mysql-limit-youhua.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于MySQL的慢日志分析工具</title>
		<link>http://www.idcfree.com/%e5%85%b3%e4%ba%8emysql%e7%9a%84%e6%85%a2%e6%97%a5%e5%bf%97%e5%88%86%e6%9e%90%e5%b7%a5%e5%85%b7.html</link>
		<comments>http://www.idcfree.com/%e5%85%b3%e4%ba%8emysql%e7%9a%84%e6%85%a2%e6%97%a5%e5%bf%97%e5%88%86%e6%9e%90%e5%b7%a5%e5%85%b7.html#comments</comments>
		<pubDate>Fri, 18 May 2012 22:58:44 +0000</pubDate>
		<dc:creator>idcFREE</dc:creator>
				<category><![CDATA[MySQL教程]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.idcfree.com/?p=3235</guid>
		<description><![CDATA[今天我们看看关于MySQL慢日志的阅读。 我们知道，如果我们的语句不够优化，那么首先MySQL的慢日志是进一步优化的离线证据，虽然里面有好多“伪慢语句”！ 先不说怎么优化，如果你的日志有一条语句赌住了，那么会有不计其数的慢语句填充到MySQL的满日志里面。那么首先提炼出这些语句就非常头疼。 今天主要介绍两种工具： 1,mysqldumpslow。（咱们 MySQL自带的简单而又实用的工具） 我们先来看下mysqldumpslow的结果。 [root@localhost ~]# mysqldumpslow -r localhost-slow.log Reading mysql slow query log from localhost-slow.log Count: 2  Time=7.00s (14s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost   select * from t_page_sample order by id desc limit N,N Count: 1  Time=11.00s (11s)  Lock=0.00s (0s)  Rows=1.0 (1), root[root]@localhost   select count(*) from t_page_sample Count: 1  [...]]]></description>
			<content:encoded><![CDATA[<div id="article_content">
<p>今天我们看看关于MySQL慢日志的阅读。<br />
我们知道，如果我们的语句不够优化，那么首先MySQL的慢日志是进一步优化的离线证据，虽然里面有好多“伪慢语句”！<br />
先不说怎么优化，如果你的日志有一条语句赌住了，那么会有不计其数的慢语句填充到MySQL的满日志里面。那么首先提炼出这些语句就非常头疼。<br />
今天主要介绍两种工具：<br />
1,mysqldumpslow。（咱们 MySQL自带的简单而又实用的工具） <span id="more-3235"></span></p>
<p>我们先来看下mysqldumpslow的结果。<br />
[root@localhost ~]# mysqldumpslow -r localhost-slow.log</p>
<table border="0" align="center">
<tbody>
<tr>
<td>Reading mysql slow query log from localhost-slow.log<br />
Count: 2  Time=7.00s (14s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost<br />
  select * from t_page_sample order by id desc limit N,N</p>
<p>Count: 1  Time=11.00s (11s)  Lock=0.00s (0s)  Rows=1.0 (1), root[root]@localhost<br />
  select count(*) from t_page_sample</p>
<p>Count: 1  Time=1418.00s (1418s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost<br />
  insert ignore into t_page_sample select ceil(rand()*N), ceil(rand()*N), date_sub(now(),interval floor(rand()*N) day), now() from t_page_sample</td>
</tr>
</tbody>
</table>
<p>比如要查找排序的慢语句：<br />
[root@localhost ~]# mysqldumpslow -r -g “order by ” localhost-slow.log</p>
<table border="0" align="center">
<tbody>
<tr>
<td>Reading mysql slow query log from localhost-slow.log<br />
Count: 2  Time=7.00s (14s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost<br />
  select * from t_page_sample order by id desc limit N,N</td>
</tr>
</tbody>
</table>
<p>自带的mysqldumpslow简单实用，作为我个人的首选。关于具体的参数含义，可以参见它自身的HELP。</p>
<p>2,mk-query-digest。(网上著名的开源脚本家族Maatkit中一员)<br />
手册地址：http://www.maatkit.org/doc/mk- query-digest.html<br />
下载方法：wget http://www.maatkit.org/get/mk-query-digest<br />
完了赋给它可执行权限就OK。</p>
<p>mk-query-digest 功能太多，我今天只是试了下它对MySQL慢日志的分析功能。<br />
以下是我觉得比较实用的功能。<br />
1）分析慢日志并且把找出来的语句写到规定的表里。<br />
[root@localhost ~]# ./mk-query-digest &#8211;limit 2 &#8211;select Query_time,Lock_time,Rows_sent,Rows_examined,ts &#8211;create-review-table &#8211;review D=t_girl,t=query_review localhost-slow.log</p>
<table border="0" align="center">
<tbody>
<tr>
<td># 280ms user time, 80ms system time, 11.56M rss, 16.65M vsz<br />
# Current date: Sat May  8 02:47:39 2010<br />
# Files: localhost-slow.log<br />
# Overall: 4 total, 3 unique, 0.01 QPS, 1.96x concurrency ________________<br />
#                    total     min     max     avg     95%  stddev  median<br />
# Exec time          1443s      5s   1418s    361s   1357s    584s    684s<br />
# Lock time              0       0       0       0       0       0       0<br />
# Rows sent              1       0       1    0.25    0.99    0.43       0<br />
# Rows exam          6.98M   1.69M   1.89M   1.74M   1.86M  76.62k   1.69M<br />
# Time range        2010-05-08 00:28:42 to 2010-05-08 00:40:58</p>
<p># Profile<br />
# Rank Query ID           Response time    Calls R/Call    Item<br />
# ==== ================== ================ ===== ========= ===============<br />
#    1 0x2A94F91D8C3B4B26  1418.0000 99.0%     1 1418.0000 INSERT SELECT t_page_sample<br />
#    2 0x06754F1BD3C8D697    14.0000  1.0%     2    7.0000 SELECT t_page_sample</p>
<p># Query 1: 0 QPS, 0x concurrency, ID 0x2A94F91D8C3B4B26 at byte 0 ________<br />
# This item is included in the report because it matches &#8211;limit.<br />
#              pct   total     min     max     avg     95%  stddev  median<br />
# Count         25       1<br />
# Exec time     98   1418s   1418s   1418s   1418s   1418s       0   1418s<br />
# Lock time      0       0       0       0       0       0       0       0<br />
# Rows sent      0       0       0       0       0       0       0       0<br />
# Rows exam     27   1.89M   1.89M   1.89M   1.89M   1.89M       0   1.89M<br />
# Time range 2010-05-08 00:28:42 to 2010-05-08 00:28:42<br />
# Query_time distribution<br />
#   1us<br />
#  10us<br />
# 100us<br />
#   1ms<br />
#  10ms<br />
# 100ms<br />
#    1s<br />
#  10s+  ################################################################<br />
# Review information<br />
#    first_seen: 2010-05-08 00:28:42<br />
#     last_seen: 2010-05-08 00:28:42<br />
#   reviewed_by:<br />
#   reviewed_on:<br />
#      comments:<br />
# Tables<br />
#    SHOW TABLE STATUS FROM `t_girl` LIKE &#8216;t_page_sample&#8217;/G<br />
#    SHOW CREATE TABLE `t_girl`.`t_page_sample`/G<br />
insert ignore into t_page_sample select ceil(rand()*10000000), ceil(rand()*9), date_sub(now(),interval floor(rand()*20) day), now() from t_page_sample/G</p>
<p># Query 2: 0.07 QPS, 0.47x concurrency, ID 0x06754F1BD3C8D697 at byte 1499<br />
# This item is included in the report because it matches &#8211;limit.<br />
#              pct   total     min     max     avg     95%  stddev  median<br />
# Count         50       2<br />
# Exec time      0     14s      5s      9s      7s      9s      3s      7s<br />
# Lock time      0       0       0       0       0       0       0       0<br />
# Rows sent      0       0       0       0       0       0       0       0<br />
# Rows exam     48   3.39M   1.69M   1.69M   1.69M   1.69M       0   1.69M<br />
# Time range 2010-05-08 00:40:28 to 2010-05-08 00:40:58<br />
# Query_time distribution<br />
#   1us<br />
#  10us<br />
# 100us<br />
#   1ms<br />
#  10ms<br />
# 100ms<br />
#    1s  ################################################################<br />
#  10s+<br />
# Review information<br />
#    first_seen: 2010-05-08 00:40:28<br />
#     last_seen: 2010-05-08 00:40:58<br />
#   reviewed_by:<br />
#   reviewed_on:<br />
#      comments:<br />
# Tables<br />
#    SHOW TABLE STATUS FROM `t_girl` LIKE &#8216;t_page_sample&#8217;/G<br />
#    SHOW CREATE TABLE `t_girl`.`t_page_sample`/G<br />
# EXPLAIN<br />
select * from t_page_sample order by id desc limit 4400000,2/G</td>
</tr>
</tbody>
</table>
<p>[root@localhost ~]#</p>
<p>因为慢日志里面会有写和读语句，所以当以后想要分析某类语句时，只需要简单的SELECT即可出来。<br />
mysql&gt; select * from query_review where fingerprint like &#8216;select%&#8217;/G</p>
<table border="0" align="center">
<tbody>
<tr>
<td>*************************** 1. row ***************************<br />
   checksum: 465365117438580375<br />
fingerprint: select * from t_page_sample order by id desc limit ?<br />
     sample: select * from t_page_sample order by id desc limit 4400000,2<br />
 first_seen: 2010-05-08 00:40:28<br />
  last_seen: 2010-05-08 00:40:58<br />
reviewed_by: NULL<br />
reviewed_on: NULL<br />
   comments: NULL<br />
1 rows in set (0.00 sec)</td>
</tr>
</tbody>
</table>
<p>2. 分析当前运行的SQL语句。<br />
以前我都是自己写脚本，配合CRONTAB来定时抓取信息到固定的文件里以备分析。不过现在可以用它来打印出比较详细的报告来。<br />
[root@localhost ~]# ./mk-query-digest &#8211;select Query_time,Lock_time,Rows_sent,Rows_examined  &#8211;processlist h=localhost,u=root</p>
<table border="0" align="center">
<tbody>
<tr>
<td># Caught SIGINT.</p>
<p># 690ms user time, 2.4s system time, 11.27M rss, 16.41M vsz<br />
# Current date: Sat May  8 03:17:39 2010<br />
# Files: STDIN<br />
# Overall: 1 total, 1 unique, 0 QPS, 0x concurrency ______________________<br />
#                    total     min     max     avg     95%  stddev  median<br />
# Exec time        1273313855s 1273313855s 1273313855s 1273313855s 1273313855s       0 1273313855s<br />
# Lock time              0       0       0       0       0       0       0</p>
<p># Profile<br />
# Rank Query ID           Response time          Calls R/Call          Ite<br />
# ==== ================== ====================== ===== =============== ===<br />
#    1 0xB52E1970DE36E57F 1273313854.8595 100.0%     1 1273313854.8595 SELECT t_page_sample</p>
<p># Query 1: 0 QPS, 0x concurrency, ID 0xB52E1970DE36E57F at byte 0 ________<br />
# This item is included in the report because it matches &#8211;limit.<br />
#              pct   total     min     max     avg     95%  stddev  median<br />
# Count        100       1<br />
# Exec time    100 1273313855s 1273313855s 1273313855s 1273313855s 1273313855s       0 1273313855s<br />
# Lock time      0       0       0       0       0       0       0       0<br />
# Query_time distribution<br />
#   1us<br />
#  10us<br />
# 100us<br />
#   1ms<br />
#  10ms<br />
# 100ms<br />
#    1s<br />
#  10s+  ################################################################<br />
# Tables<br />
#    SHOW TABLE STATUS FROM `t_girl` LIKE &#8216;t_page_sample&#8217;/G<br />
#    SHOW CREATE TABLE `t_girl`.`t_page_sample`/G<br />
# EXPLAIN<br />
select count(*) from t_page_sample/G<br />
[root@localhost ~]#</td>
</tr>
</tbody>
</table>
<p>当想停止截取当前语句时，按住CTRL+C就OK。</p>
<p>不过我还是喜欢我自己的那个小脚本。哈哈。</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.idcfree.com/%e5%85%b3%e4%ba%8emysql%e7%9a%84%e6%85%a2%e6%97%a5%e5%bf%97%e5%88%86%e6%9e%90%e5%b7%a5%e5%85%b7.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL 黑洞引擎的使用场景解释</title>
		<link>http://www.idcfree.com/mysql-heidongyinqin.html</link>
		<comments>http://www.idcfree.com/mysql-heidongyinqin.html#comments</comments>
		<pubDate>Fri, 18 May 2012 22:57:45 +0000</pubDate>
		<dc:creator>idcFREE</dc:creator>
				<category><![CDATA[MySQL教程]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.idcfree.com/?p=3233</guid>
		<description><![CDATA[MySQL 有一个出类拔萃的引擎名叫BlackHole， 又名黑洞。 好多人说这个是SB， 一点用处也没有。 熟读手册，会发现以下几点： A. 检查DUMP 文件是否完整。 你可以用MYSQLDUMP 脚本单独导出表结果以及数据，然后单独检查导出文件的语法是否完整。 B. 对比开启二进制日志和不开启二进制日志对性能的损失到底有多少？ 好多人期待的问题。 到底开启二进制日志与关闭它对性能的损失有多大比例呢？ 黑洞可以帮你完成。 C. 在MASTER 和 SLAVE 中间充当PROXY， 缓解MASTER的压力，减少网络带宽。 在普通的MASTER 与 SLAVE 中间 充当缓解机器， 用来缓冲MASTER机器的压力，让SLAVE连接到缓解机器，这样减少MASTER 到 SLAVE之间的网络传输。 从而减小网络的带宽以及主机的压力。 所有的处理都有中间代理机器来完成， 妙哉。]]></description>
			<content:encoded><![CDATA[<p>MySQL 有一个出类拔萃的引擎名叫BlackHole， 又名黑洞。 好多人说这个是SB， 一点用处也没有。 熟读手册，会发现以下几点：</p>
<p>A. 检查DUMP 文件是否完整。</p>
<p>你可以用MYSQLDUMP 脚本单独导出表结果以及数据，然后单独检查导出文件的语法是否完整。</p>
<p>B. 对比开启二进制日志和不开启二进制日志对性能的损失到底有多少？</p>
<p>好多人期待的问题。 到底开启二进制日志与关闭它对性能的损失有多大比例呢？</p>
<p>黑洞可以帮你完成。</p>
<p>C. 在MASTER 和 SLAVE 中间充当PROXY， 缓解MASTER的压力，减少网络带宽。</p>
<p>在普通的MASTER 与 SLAVE 中间 充当缓解机器， 用来缓冲MASTER机器的压力，让SLAVE连接到缓解机器，这样减少MASTER 到 SLAVE之间的网络传输。 从而减小网络的带宽以及主机的压力。</p>
<p>所有的处理都有中间代理机器来完成， 妙哉。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.idcfree.com/mysql-heidongyinqin.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL 5.5 PROXY USER 伪装用户</title>
		<link>http://www.idcfree.com/mysql-5-5-proxy-user.html</link>
		<comments>http://www.idcfree.com/mysql-5-5-proxy-user.html#comments</comments>
		<pubDate>Fri, 18 May 2012 22:56:30 +0000</pubDate>
		<dc:creator>idcFREE</dc:creator>
				<category><![CDATA[MySQL教程]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.idcfree.com/?p=3225</guid>
		<description><![CDATA[自从MySQL 5.5 发布第一个版本以来，就在GRANT权限列表里面新增加了一条记录： PROXY。 不要以为这个是以前的MySQL Proxy 哦。其实这个是用来给用户做马甲用的。 我们来看下具体用法吧。 这里，我用的是MYSQL 5.2.23. 安装插件哦 现在我们来做对应的操作。 先创建真实用户： &#160; 现在创建PROXY USER： &#160; &#160; 行了，我们来退出，试试这个伪装用户。 下图中，如果伪装没成功，那么@@proxy_user 这个只读变量就为NULL。 &#160; 我们来看看其他的： &#160; OK。 看到了，和之前的用户有一样的权限哦。]]></description>
			<content:encoded><![CDATA[<p>自从MySQL 5.5 发布第一个版本以来，就在GRANT权限列表里面新增加了一条记录： PROXY。 不要以为这个是以前的MySQL Proxy 哦。其实这个是用来给用户做马甲用的。 我们来看下具体用法吧。</p>
<p>这里，我用的是MYSQL 5.2.23.<span id="more-3225"></span></p>
<p><img src="http://www.idcfree.com/wp-content/uploads/upfiles/2012/05/225630dCB.png" alt="" /></p>
<p>安装插件哦<br />
<img src="http://www.idcfree.com/wp-content/uploads/upfiles/2012/05/225630Ug3.png" alt="" /></p>
<p>现在我们来做对应的操作。 先创建真实用户：</p>
<p><img src="http://www.idcfree.com/wp-content/uploads/upfiles/2012/05/225630Arq.png" alt="" /></p>
<p>&nbsp;</p>
<p>现在创建PROXY USER：</p>
<p><img src="http://www.idcfree.com/wp-content/uploads/upfiles/2012/05/225631VYw.png" alt="" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>行了，我们来退出，试试这个伪装用户。 下图中，如果伪装没成功，那么@@proxy_user 这个只读变量就为NULL。</p>
<p><img src="http://www.idcfree.com/wp-content/uploads/upfiles/2012/05/225631BL0.png" alt="" /></p>
<p>&nbsp;</p>
<p>我们来看看其他的：</p>
<p><img src="http://www.idcfree.com/wp-content/uploads/upfiles/2012/05/225631s7O.png" alt="" /></p>
<p>&nbsp;</p>
<p>OK。 看到了，和之前的用户有一样的权限哦。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.idcfree.com/mysql-5-5-proxy-user.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQLite中如何为表设置自动增长字段</title>
		<link>http://www.idcfree.com/sqlite-biao-zidongzengzhang.html</link>
		<comments>http://www.idcfree.com/sqlite-biao-zidongzengzhang.html#comments</comments>
		<pubDate>Fri, 18 May 2012 07:58:08 +0000</pubDate>
		<dc:creator>idcFREE</dc:creator>
				<category><![CDATA[软件安全]]></category>
		<category><![CDATA[SQLite]]></category>

		<guid isPermaLink="false">http://www.idcfree.com/?p=3222</guid>
		<description><![CDATA[在Mysql数据库中为数据表设置自动增长字段是非常简单的，在sqlite数据库中和Mysql数据库不大一样，但是也比较简单，只要在创建表的sql语句中声明表的第一列为INTEGER PRIMARY KEY即可。 　　这样，每当你在该列上插入一NULL值时， NULL自动被转换为一个比该列中最大值大1的一个整数。如果表是空的， 将会是1；如果是最大可能的主键 9223372036854775807，那个，将键值将是随机未使用的数。 创建一个名为tablename的表，其中id设置为自增长字段，age为普通字段 CREATE TABLE  tablename(  id INTEGER PRIMARY KEY,  age INTEGER ); 在该表上，执行下面语句，就可以实现id的自增长了： INSERT INTO tablename VALUES(NULL,25); 在逻辑上等价于： INSERT INTO tablename VALUES((SELECT max(id) FROM tablename)+1,25);]]></description>
			<content:encoded><![CDATA[<p>在Mysql数据库中为数据表设置自动增长字段是非常简单的，在sqlite数据库中和Mysql数据库不大一样，但是也比较简单，只要在<strong>创建表的sql语句中声明表的第一列为INTEGER PRIMARY KEY</strong>即可。</p>
<p>　　这样，每当你在该列上插入一NULL值时， NULL自动被转换为一个比该列中最大值大1的一个整数。如果表是空的， 将会是1；如果是最大可能的主键 9223372036854775807，那个，将键值将是随机未使用的数。</p>
<p>创建一个名为tablename的表，其中id设置为自增长字段，age为普通字段<span id="more-3222"></span></p>
<blockquote><p>CREATE TABLE  tablename( <br />
id INTEGER PRIMARY KEY, <br />
age INTEGER<br />
);</p></blockquote>
<p>在该表上，执行下面语句，就可以实现id的自增长了：</p>
<blockquote><p>INSERT INTO tablename VALUES(NULL,25);</p></blockquote>
<p>在逻辑上等价于：</p>
<blockquote><p>INSERT INTO tablename VALUES((SELECT max(id) FROM tablename)+1,25);</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.idcfree.com/sqlite-biao-zidongzengzhang.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux中编译安装VIM：no terminal library found错误解决办法</title>
		<link>http://www.idcfree.com/linux-vim-no-terminal-library-found.html</link>
		<comments>http://www.idcfree.com/linux-vim-no-terminal-library-found.html#comments</comments>
		<pubDate>Fri, 18 May 2012 07:56:45 +0000</pubDate>
		<dc:creator>idcFREE</dc:creator>
				<category><![CDATA[Linux教程]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.idcfree.com/?p=3220</guid>
		<description><![CDATA[最近刚安装了Ubuntu 12.04 LTS版本，今天又在折腾安装VIM，由于需要VIM的gdb调试功能，因此选择了编译源文件的安装方式，简单的配置后，开始编译，但是却出现了下面的错误： checking –with-tlib argument… empty: automatic terminal library selection checking for tgetent in -lncurses… no checking for tgetent in -ltermlib… no checking for tgetent in -ltermcap… no checking for tgetent in -lcurses… no no terminal library found checking for tgetent()… configure: error: NOT FOUND!       You need to install a terminal library; for [...]]]></description>
			<content:encoded><![CDATA[<p>最近刚<a title="Windows XP硬盘安装Ubuntu 12.04双系统图文详解" href="http://www.idcfree.com/windows-xp-install-ubuntu-12-04.html" target="_blank">安装了Ubuntu 12.04 LTS</a>版本，今天又在折腾安装VIM，由于需要VIM的gdb调试功能，因此选择了编译源文件的安装方式，简单的配置后，开始编译，但是却出现了下面的错误：</p>
<blockquote><p>checking –with-tlib argument… empty: automatic terminal library selection<br />
checking for tgetent in -lncurses… no<br />
checking for tgetent in -ltermlib… no<br />
checking for tgetent in -ltermcap… no<br />
checking for tgetent in -lcurses… no<br />
<strong>no terminal library found</strong><br />
checking for tgetent()… configure: error: NOT FOUND!<br />
      <strong>You need to install a terminal library; for example ncurses</strong>.<br />
      Or specify the name of the library with –with-tlib.<span id="more-3220"></span></p></blockquote>
<p>　　提示没有terminal library，那我们就安装一个terminal library吧，提示中举例的terminal library为ncurses，那我们就安装这个吧，指令如下：</p>
<blockquote><p>sudo apt-get install libncurses5-dev</p></blockquote>
<p>　　如果没法安装，那你得检查下你的软件源设置和网络连接了~~~</p>
]]></content:encoded>
			<wfw:commentRss>http://www.idcfree.com/linux-vim-no-terminal-library-found.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

