<?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>开源小站 &#187; mysql</title>
	<atom:link href="http://www.litrin.net/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.litrin.net</link>
	<description>It is Cool to OpenSource</description>
	<lastBuildDate>Fri, 03 Feb 2012 04:33:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mysql Innodb的两种表空间方式</title>
		<link>http://www.litrin.net/2011/12/06/mysql-innodb%e7%9a%84%e4%b8%a4%e7%a7%8d%e8%a1%a8%e7%a9%ba%e9%97%b4%e6%96%b9%e5%bc%8f/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mysql-innodb%25e7%259a%2584%25e4%25b8%25a4%25e7%25a7%258d%25e8%25a1%25a8%25e7%25a9%25ba%25e9%2597%25b4%25e6%2596%25b9%25e5%25bc%258f</link>
		<comments>http://www.litrin.net/2011/12/06/mysql-innodb%e7%9a%84%e4%b8%a4%e7%a7%8d%e8%a1%a8%e7%a9%ba%e9%97%b4%e6%96%b9%e5%bc%8f/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 05:17:36 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1599</guid>
		<description><![CDATA[要说表空间，Mysql的表空间管理远远说不上完善。换句话说，事实上Mysql根本没有真正意义上的表空间管理。Mysql的Innodb包含两种表空间文件模式，默认的共享表空间和每个表分离的独立表空间。只要在my.cnf里面增加innodb_file_per_table=1就可以从共享表空间切换到独立表空间。当然对于已经存在的表，则需要执行alter table MY_TABLE engine=innodb命令迁移数据。 共享表空间方式 由于是默认的方式，就暂且理解为Mysql官方推荐的方式。相对而言所有的数据都在一个（或几个）文件中，比较利于管理，而且在操作的时候只需要open这一个（或几个）文件即可，相对来说代价很低。 但问题是在数据达到以G为单位来计算的时候优劣逆转。一个大小惊人的文件很不利于管理，而且对于一个如此巨大的文件来说，读写它需要耗费的资源一样巨大。更加令人费解的是，MySQL竟然将索引和数据保存于同一个文件中，索引和数据之间尚存在资源争用，不利于性能的提升。你当然可以通过innodb_data_file_path的配置规划多个表空间文件，但MySQL的逻辑是“用满后增加”，仅仅是一个文件的拆分而已，不能从根本上分离数据和索引。 之前曾经遭遇到700G以上的表空间文件，而且更加让人郁闷的是对于如此大的文件还在以每天数G的数量增加。由于无法停机，即便是拷贝一下也要花费差不多一夜，只能眼睁睁看着它继续增大而毫无保守可行的办法。 独立表空间方式 相对而言对立表空间每个表都有独立的多个数据文件，而且做到了索引和数据的分离。多个小文件之间很方便的完成跨数据库甚至跨硬件的数据拷贝和迁移。相对来说灵活性很好。 这样做同样带来另一个方面的问题。当数据库中的表数量达到一定级别时，每次操作所涉及的文件过多，如果按照默认Centos的ulimit -n = 1024的话，仅仅只能保证同时打开256个表以内，这在习惯上“拆库拆表”的MySQL数据结构上很难达到要求。尚且这种数据文件的利用率不算很高，当大量“不高”的文件集中起来，浪费的空间也很惊人，更何况最后可能出现的状况不是“一堆K级别的小文件”而是“一堆G级别的大文件”，有点适得其反的意思。你自然可以联想到分区表，又是一个“仅仅做文件拆分而已”，多个分区文件缺一不可。 之前同样遇到过这个问题，MySQL连接大的状况下大量的timeout，但主机负载还算可以，查了一圈才知道是open files限制的问题，限制一修改，负载变得惊人，但连接数却又提升的不多。 总之，两种方法各有所长，部分互补，但都不是解决问题的终极方案。期待MySQL能够出现真正意义上表空间的概念，更加自由的规划数据文件。]]></description>
			<content:encoded><![CDATA[<p>要说表空间，Mysql的表空间管理远远说不上完善。换句话说，事实上Mysql根本没有真正意义上的表空间管理。Mysql的Innodb包含两种表空间文件模式，默认的共享表空间和每个表分离的独立表空间。只要在my.cnf里面增加innodb_file_per_table=1就可以从共享表空间切换到独立表空间。当然对于已经存在的表，则需要执行alter table MY_TABLE engine=innodb命令迁移数据。</p>
<p><span id="more-1599"></span><strong>共享表空间方式</strong></p>
<p>由于是默认的方式，就暂且理解为Mysql官方推荐的方式。相对而言所有的数据都在一个（或几个）文件中，比较利于管理，而且在操作的时候只需要open这一个（或几个）文件即可，相对来说代价很低。</p>
<p>但问题是在数据达到以G为单位来计算的时候优劣逆转。一个大小惊人的文件很不利于管理，而且对于一个如此巨大的文件来说，读写它需要耗费的资源一样巨大。更加令人费解的是，MySQL竟然将索引和数据保存于同一个文件中，索引和数据之间尚存在资源争用，不利于性能的提升。你当然可以通过innodb_data_file_path的配置规划多个表空间文件，但MySQL的逻辑是“用满后增加”，仅仅是一个文件的拆分而已，不能从根本上分离数据和索引。</p>
<p>之前曾经遭遇到700G以上的表空间文件，而且更加让人郁闷的是对于如此大的文件还在以每天数G的数量增加。由于无法停机，即便是拷贝一下也要花费差不多一夜，只能眼睁睁看着它继续增大而毫无保守可行的办法。</p>
<p><strong>独立表空间方式</strong></p>
<p>相对而言对立表空间每个表都有独立的多个数据文件，而且做到了索引和数据的分离。多个小文件之间很方便的完成跨数据库甚至跨硬件的数据拷贝和迁移。相对来说灵活性很好。</p>
<p>这样做同样带来另一个方面的问题。当数据库中的表数量达到一定级别时，每次操作所涉及的文件过多，如果按照默认Centos的ulimit -n = 1024的话，仅仅只能保证同时打开256个表以内，这在习惯上“拆库拆表”的MySQL数据结构上很难达到要求。尚且这种数据文件的利用率不算很高，当大量“不高”的文件集中起来，浪费的空间也很惊人，更何况最后可能出现的状况不是“一堆K级别的小文件”而是“一堆G级别的大文件”，有点适得其反的意思。你自然可以联想到分区表，又是一个“仅仅做文件拆分而已”，多个分区文件缺一不可。</p>
<p>之前同样遇到过这个问题，MySQL连接大的状况下大量的timeout，但主机负载还算可以，查了一圈才知道是open files限制的问题，限制一修改，负载变得惊人，但连接数却又提升的不多。</p>
<p>总之，两种方法各有所长，部分互补，但都不是解决问题的终极方案。期待MySQL能够出现真正意义上表空间的概念，更加自由的规划数据文件。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/12/06/mysql-innodb%e7%9a%84%e4%b8%a4%e7%a7%8d%e8%a1%a8%e7%a9%ba%e9%97%b4%e6%96%b9%e5%bc%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从SQL到NoSQL</title>
		<link>http://www.litrin.net/2011/09/26/%e4%bb%8esql%e5%88%b0nosql/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e4%25bb%258esql%25e5%2588%25b0nosql</link>
		<comments>http://www.litrin.net/2011/09/26/%e4%bb%8esql%e5%88%b0nosql/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 05:13:28 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[DataBase]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[Redis]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1559</guid>
		<description><![CDATA[之前接触到的基于LAMP平台的网站，凡是稍微有一点量上去的，在数据结构的设计上总是离不开“拆库拆表”。同样，作为网站的数据结构设计，很少会出现类似ERP系统才会应用到的函数（function）、存储过程（procudce）、触发器（trigger）什么的——曾经看过有ERP系统的所有逻辑都是通过这3者保存在数据库端的。加上MySQL本身的一些因素，用之前一个朋友的话说：“Mysql在网站中的地位更多的是一个数据容器，而不是完整意义上的数据库。” 既然仅仅只是当作一个容器，从性能上考虑那为什么要用MySQL呢？ 最近在研究一些NoSQL的东西，memcache类这类的纯Key-value；redis这类key-list；以及更加接近于关系型的MongoDB。这类的数据容器相较MySQL这类SQL数据库而言，更多的都是在性能上做大幅提升。从搜索能力上讲，MySQL的搜索能力又远不及Sphinx或者Solr这类单纯的索引服务器。如果说关系型数据库的优势在于一致性。那事物操作本身也不是MySQL所擅长的，“拆库拆表”的设计理念更是打破了一致性的优势。MySQL剩下的优势恐怕只剩下了“便于维护”这一条了吧。 相比MySQL这些年做的改进，几乎都是在完善事物处理这类高级的SQL逻辑。之前人们选择MySQL的原因，其实很少是由于MySQL的事务处理，而是性能方面的优势。当MySQL不再将性能的提升作为首要任务时，加上近一段时间风声水起的SNS热潮，MySQL的王者地位已经逐渐被NoSQL数据库挑战——甚至出现了完全排除MySQL的SNS框架。 据说MySQL5.6中启用了对于Memcache的支持，看来连MySQL自己也顿悟了……]]></description>
			<content:encoded><![CDATA[<p>之前接触到的基于LAMP平台的网站，凡是稍微有一点量上去的，在数据结构的设计上总是离不开“拆库拆表”。同样，作为网站的数据结构设计，很少会出现类似ERP系统才会应用到的函数（function）、存储过程（procudce）、触发器（trigger）什么的——曾经看过有ERP系统的所有逻辑都是通过这3者保存在数据库端的。加上MySQL本身的一些因素，用之前一个朋友的话说：“Mysql在网站中的地位更多的是一个数据容器，而不是完整意义上的数据库。”</p>
<p><span id="more-1559"></span>既然仅仅只是当作一个容器，从性能上考虑那为什么要用MySQL呢？</p>
<p>最近在研究一些NoSQL的东西，memcache类这类的纯Key-value；redis这类key-list；以及更加接近于关系型的MongoDB。这类的数据容器相较MySQL这类SQL数据库而言，更多的都是在性能上做大幅提升。从搜索能力上讲，MySQL的搜索能力又远不及Sphinx或者Solr这类单纯的索引服务器。如果说关系型数据库的优势在于一致性。那事物操作本身也不是MySQL所擅长的，“拆库拆表”的设计理念更是打破了一致性的优势。MySQL剩下的优势恐怕只剩下了“便于维护”这一条了吧。</p>
<div id="attachment_1561" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-1561" title="mysql mongodb 写入对比" src="http://www.litrin.net/wp-content/uploads/2011/09/mysql-mongodb-write-300x179.png" alt="mysql mongodb 写入对比" width="300" height="179" /><p class="wp-caption-text">mysql mongodb 写入对比</p></div>
<div id="attachment_1562" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-1562" title="mysql mongodb 查询对比" src="http://www.litrin.net/wp-content/uploads/2011/09/mysql-mongodb-read-300x244.png" alt="mysql mongodb 查询对比" width="300" height="244" /><p class="wp-caption-text">mysql mongodb 查询对比</p></div>
<div id="attachment_1560" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-1560" title="mysql mongodb 资源对比" src="http://www.litrin.net/wp-content/uploads/2011/09/mysql-mongodb-300x202.png" alt="mysql mongodb 资源对比" width="300" height="202" /><p class="wp-caption-text">mysql mongodb 资源对比</p></div>
<p>相比MySQL这些年做的改进，几乎都是在完善事物处理这类高级的SQL逻辑。之前人们选择MySQL的原因，其实很少是由于MySQL的事务处理，而是性能方面的优势。当MySQL不再将性能的提升作为首要任务时，加上近一段时间风声水起的SNS热潮，MySQL的王者地位已经逐渐被NoSQL数据库挑战——甚至出现了完全排除MySQL的SNS框架。</p>
<p>据说MySQL5.6中启用了对于Memcache的支持，看来连MySQL自己也顿悟了……</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/09/26/%e4%bb%8esql%e5%88%b0nosql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu上Coreseek+php的安装</title>
		<link>http://www.litrin.net/2011/06/16/ubuntu%e4%b8%8acoreseekphp%e7%9a%84%e5%ae%89%e8%a3%85/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ubuntu%25e4%25b8%258acoreseekphp%25e7%259a%2584%25e5%25ae%2589%25e8%25a3%2585</link>
		<comments>http://www.litrin.net/2011/06/16/ubuntu%e4%b8%8acoreseekphp%e7%9a%84%e5%ae%89%e8%a3%85/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 02:23:30 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[DataBase]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1489</guid>
		<description><![CDATA[Coreseek是一个基于sphinx引擎，支持与mmseg中文分词模块合作完成中文的全文搜索引擎。相对sql这类操作，Coreseek负载可谓是微不足道。当然类似的索引服务器还有给予Java的solr等。我选择coreseek的主要原因之一是他可以通过配置后可以与现有的mysql客户端兼容，并可以直接嵌入到mysql中成为mysql的引擎之一。 首先，下载安装包，我选择的是最新的stable版， 不过不客气的说，即便是coreseek的stable版本，不论是从稳定性、兼容性还是灵活性上都不能算是完善，至少无法跟apache这类经典应用相提并论。 安装ubuntu开发包： apt-get install make gcc g++ automake libtool mysql-client libmysqlclient15-dev libxml2-dev libexpat1-dev   解压： tar xzvf coreseek-3.2.14.tar.gz cd coreseek-3.2.14 应该看到有mmseg csft testpack 至少3个目录 安装mmseg中文分词模块 cd mmseg-3.2.14 ./bootstrap ./configure &#8211;prefix=/usr/local/mmseg3 #不喜欢这个官方目录配置，更换目录后配置无法生效郁闷了很久，稍后再说 make make install cd ../testpack /usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml #测试结果，请确保终端可以看到utf8中文，应该可以看到分词后的结果 安装Python包 虽然coreseek支持直接的mysql连接，但考虑到分词、分表的情况，这种设置不是很灵活。我的方案是通过python脚本的预处理，将mysql的数据整理后传输到coreseek建立索引。这样还有一个优势就是“万能数据源”——memcache、redis这类几乎不指望coreseek官方支持的妖异存储方案，只要有python的api，均可以索引。 官方的安装手册中介绍的python接口是基于ActivePython 替代系统python语言的方式进行的。ActivePython属于第三方封包，远没有系统自带python来的方便，刚开始用系统python测试了数次，均不成功，后来根据出错信息，找到了原因。 apt-get install python-dev python-sqlite python-mysqldb python-memcache 安装coreseek cd ../csft-3.2.14 [...]]]></description>
			<content:encoded><![CDATA[<p>Coreseek是一个基于sphinx引擎，支持与mmseg中文分词模块合作完成中文的全文搜索引擎。相对sql这类操作，Coreseek负载可谓是微不足道。当然类似的索引服务器还有给予Java的solr等。我选择coreseek的主要原因之一是他可以通过配置后可以与现有的mysql客户端兼容，并可以直接嵌入到mysql中成为mysql的引擎之一。</p>
<p>首先，下载安装包，我选择的是<a rel="nofollow" target="_blank" href="http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz">最新的stable版</a>， 不过不客气的说，即便是coreseek的stable版本，不论是从稳定性、兼容性还是灵活性上都不能算是完善，至少无法跟apache这类经典应用相提并论。</p>
<p><span id="more-1489"></span><br />
安装ubuntu开发包：<br />
apt-get install make gcc g++ automake libtool mysql-client libmysqlclient15-dev libxml2-dev libexpat1-dev</p>
<p><strong> </strong><br />
解压：<br />
tar xzvf coreseek-3.2.14.tar.gz<br />
cd coreseek-3.2.14</p>
<p>应该看到有mmseg csft testpack 至少3个目录</p>
<p><strong>安装mmseg中文分词模块</strong></p>
<p>cd mmseg-3.2.14<br />
./bootstrap<br />
./configure &#8211;prefix=/usr/local/mmseg3 #不喜欢这个官方目录配置，更换目录后配置无法生效郁闷了很久，稍后再说<br />
make<br />
make install<br />
cd ../testpack<br />
/usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml #测试结果，请确保终端可以看到utf8中文，应该可以看到分词后的结果</p>
<p><strong>安装Python包</strong></p>
<p>虽然coreseek支持直接的mysql连接，但考虑到分词、分表的情况，这种设置不是很灵活。我的方案是通过python脚本的预处理，将mysql的数据整理后传输到coreseek建立索引。这样还有一个优势就是“万能数据源”——memcache、redis这类几乎不指望coreseek官方支持的妖异存储方案，只要有python的api，均可以索引。</p>
<p>官方的安装手册中介绍的python接口是基于<a rel="nofollow" target="_blank" href="http://www.activestate.com/activepython" target="_blank">ActivePython</a> 替代系统python语言的方式进行的。ActivePython属于第三方封包，远没有系统自带python来的方便，刚开始用系统python测试了数次，均不成功，后来根据出错信息，找到了原因。</p>
<p>apt-get install python-dev python-sqlite python-mysqldb python-memcache</p>
<p><strong>安装coreseek</strong></p>
<p>cd ../csft-3.2.14<br />
./buildconf.sh<br />
./configure &#8211;prefix=/usr/local/coreseek &#8211;without-unixodbc &#8211;with-mmseg &#8211;with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ &#8211;with-mmseg-libs=/usr/local/mmseg3/lib/ &#8211;with-mysql &#8211;with-python<br />
make<br />
make install</p>
<p>cd ../testpack<br />
/usr/local/coreseek/bin/indexer -c etc/csft.conf &#8211;all<br />
/usr/local/coreseek/bin/search -c etc/csft.conf 网络搜索 #没什么问题了</p>
<p><strong>安装libsphinxclient</strong></p>
<p>coreseek官方教程中建议php使用直接include一个php文件进行操作，事实上php有独立的sphinx模块可以直接操作coreseek (coreseek就是sphinx！)已经进入了php的官方函数库，而且效率的提升不是一点点！但php模块依赖于libsphinxclient包。</p>
<p>cd ../csft-3.2.14/api/libsphinxclient<br />
./configure<br />
make<br />
make install<br />
ldconfig</p>
<p><strong>安装php-sphinx支持 </strong></p>
<p>apt-get install php5-dev<br />
wget http://pecl.php.net/get/sphinx-1.1.0.tgz<br />
tar vzxf  sphinx-1.1.0.tgz<br />
cd  sphinx-1.1.0<br />
phpize<br />
./configure<br />
make<br />
make install</p>
<p>确信成功后修改php.ini，还是遵从ubuntu的配置规则<br />
echo “extension=sphinx.so”  &gt; /etc/php5/conf.d/sphinx.ini</p>
<p>如果使用apache或者fast-cgi的话，请重起。察看phpinfo() 如下则安装成功。</p>
<h2><a name="module_sphinx">sphinx</a></h2>
<table border="0" cellpadding="3" width="600">
<tbody>
<tr>
<th>sphinx support</th>
<th>enabled</th>
</tr>
<tr>
<th>Version</th>
<th>1.1.0</th>
</tr>
<tr>
<th>Revision</th>
<th>$Revision: 303462 $</th>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>配置coreseek</strong></p>
<p>说容易也容易，说麻烦也麻烦的工作，照贴一份吧前面说过，我用的是python数据源</p>
<p>/usr/local/coreseek/etc/coreseek.conf</p>
<pre>python
{
           path = /usr/local/coreseek/DBSource #python 数据源脚本的存放路径
}
source Blog #索引库1 “Blog”
{
          type = python #类型为python
          name = Blog.MainSource #调用python的class
}
index Blog
{
    source          = Blog #数据源名称
    path            = /data/sphinx/Blog #数据文件存放路径
    docinfo         = extern
    mlock           = 0
    morphology      = none
    min_word_len    = 1
    html_strip      = 0
   charset_dictpath = /usr/local/mmseg3/etc/ #mmseg中文分词库的位置，本文开头时我说不能修改mmseg的安装路径就错在这里
   charset_type        = zh_cn.utf-8
}
source UserInfo #索引库2 “UserInfo” 其余同上
{
    type = python
    name = UserInfo.MainSource
}
index UserInfo
{
     source          = UserInfo
     path            = /data/sphinx/UserInfo
     docinfo         = extern
     mlock           = 0
    morphology      = none
    min_word_len    = 1
    html_strip      = 0
    charset_dictpath = /usr/local/mmseg3/etc/
    charset_type        = zh_cn.utf-8
}

searchd #服务器配置
{
    listen          =   9312  #显而易见，默认的监听端口
    listen          =   172.18.196.90:3306:mysql41 #兼容mysql方式的监听，我们配置了php-sphinx，故除了命令行方式外意义不大，可以关闭
    pid_file        =   /var/run/coreseek.pid
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/06/16/ubuntu%e4%b8%8acoreseekphp%e7%9a%84%e5%ae%89%e8%a3%85/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ecshop的问题</title>
		<link>http://www.litrin.net/2011/04/28/ecshop%e7%9a%84%e9%97%ae%e9%a2%98/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ecshop%25e7%259a%2584%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://www.litrin.net/2011/04/28/ecshop%e7%9a%84%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 08:22:05 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1454</guid>
		<description><![CDATA[在看一台服务器的SQL-Slow日志，看到了如下的一纪录，惊出了一身冷汗！ SELECT pg.package_id, pg.goods_id, pg.goods_number, pg.admin_id, g.goods_sn, g.goods_name, g.market_price, g.goods_thumb, g.is_real, IFNULL(mp.user_price, g.shop_price * '1') AS rank_price FROM `ecs_`.`ecs_package_goods` AS pg LEFT JOIN `ecs_venusveil`.`ecs_goods` AS g ON g.goods_id = pg.goods_id LEFT JOIN `ecs_venusveil`.`ecs_member_price` AS mp ON mp.goods_id = g.goods_id AND mp.user_rank = '0' WHERE pg.package_id = -1 union all select 1,2,3,4,5,6,7,8,count(*),concat( (Select concat(0x5b,email,0x3a,user_name,0x5d) FROM ecs_users [...]]]></description>
			<content:encoded><![CDATA[<p>在看一台服务器的SQL-Slow日志，看到了如下的一纪录，惊出了一身冷汗！</p>
<pre class="sql" name='code'>
SELECT pg.package_id, pg.goods_id, pg.goods_number,
        pg.admin_id, g.goods_sn, g.goods_name, g.market_price, g.goods_thumb, g.is_real,
        IFNULL(mp.user_price, g.shop_price * '1') AS rank_price
FROM `ecs_`.`ecs_package_goods` AS pg
        LEFT JOIN `ecs_venusveil`.`ecs_goods` AS g ON g.goods_id = pg.goods_id
        LEFT JOIN `ecs_venusveil`.`ecs_member_price` AS mp ON mp.goods_id = g.goods_id AND mp.user_rank = '0'
WHERE pg.package_id = -1
union all
        select 1,2,3,4,5,6,7,8,count(*),concat(
                (Select concat(0x5b,email,0x3a,user_name,0x5d)
                        FROM ecs_users
                        LIMIT 9456,1), floor(rand(0)*2))x
         from information_schema.tables
         group by x
ORDER BY pg.package_id, pg.goods_id;</pre>
<p><span id="more-1454"></span><br />
不知看懂没有，反正这句SQL是解释不通的。由于网站跑在ECshop2.7.2的环境之上，问题肯定来自代码缺陷。之前似乎有发过<a href="http://www.litrin.net/2009/09/11/%E8%AF%B4%E8%AF%B4%E2%80%9C%E4%B8%93%E4%B8%9A%E2%80%9D/">ECShop的牢骚</a>，作为一个商业软件，而且是做交易平台的商业软件，竟然如此不专业种种的操作。特地浏览了一下代码，发觉代码里面的更加经典！几乎没有对任何变量进行校验和过滤！</p>
<p>由于程序不是我开发的，无法追溯源。只能根据日志进行反查，找到了根基</p>
<ol>
<li>flow.php中2157行中json来源可由客户端定义，导致2182行$package-&gt;package_id不可控。</li>
<li>include/lib_order.php中对include/lib_common.php 的function get_package_info($id)可以植入SQL</li>
<li>畸形SQL导致Mysql返回空信息</li>
<li>攻击者获得无限量优惠包，仅此而已。</li>
</ol>
<p>无话可说！引以为戒吧！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/04/28/ecshop%e7%9a%84%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>高负载的Lamp架构</title>
		<link>http://www.litrin.net/2011/04/20/%e9%ab%98%e8%b4%9f%e8%bd%bd%e7%9a%84lamp%e6%9e%b6%e6%9e%84/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e9%25ab%2598%25e8%25b4%259f%25e8%25bd%25bd%25e7%259a%2584lamp%25e6%259e%25b6%25e6%259e%2584</link>
		<comments>http://www.litrin.net/2011/04/20/%e9%ab%98%e8%b4%9f%e8%bd%bd%e7%9a%84lamp%e6%9e%b6%e6%9e%84/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 04:23:26 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[DataBase]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[网络和安全]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1435</guid>
		<description><![CDATA[记得那时是2005年10月，开源小站刚上线不久的一篇文章。那时的我还仅仅将网站的高可用性和大负载，大流量集中在“堆硬件”的层面上。包括之后的一篇文档，似乎也没有逃脱这个范畴。之后由于工作内容的关系，始终没有再继续探讨这个问题。仅仅只在一篇关于GAE的文章中讲述了一下架构的趋势。 时隔了5年多，不妨回头重新从新的高度上说说LAMP结构的网站如何支撑尽可能大的负载。同样说明，本文代表站长Litrin的个人意见，欢迎共同探讨，但喷子慎入。 首先声明的是，以下一堆相对无趣的文字仅针对一系列负载到了至少10W pv以上级别，对于较小规模的网站大可不必遵守，还是提倡成本优先的原则，到了对应的PV级别想必也会有足够的财力和物力去改版了。 初期规划 这里主要还是指设计模型等前期工作。MVC的设计结构深入人心，不得不承认确实大多架构设计师首选的设计结构必是MVC。事实上，在一个网站上最容易获取，最不缺的资源是CPU和内存，最大的瓶颈都是出现在IO。 作为LAMP架构最大的问题就是MVC的代价太大，层层的封包意味着重复判断；打开大量的程序文件只会严重拖累性能。网上很多免费的、开源的PHP框架，用过的几个诸如ThinkPHP, ZF等应付中小型网站绝对没有问题，但都不适合大负载的网站。甚至包括Smarty这样单纯的模版引擎，大量的IO操作会拖累整体性能。如果不考虑其他因素，我甚至都考虑过All in 1的垃圾结构——这当然不现实。但恰恰是这种all in 1却正是大负载最适合的结构。奇怪的悖论。 受GAE的影响，曾经想过API+XML的方式实现网站架构，但后来打消了这个念头。XML本身的结构冗余度很多，这也就意味着信息承载率低。在内部几台服务器之间的通讯状况想必都没有必要搞XML，如果要搞类似的模式，CSV方式反倒是不错的选择。XML是为了开放给第三方用户的。 数据库设计 读写分离这个是众所周知的秘密了。Mysql 的Master + Slaver的设计真的很方便！最多就是多搞几重的读写分离。 拆表、拆库、分机器，大表做纵拆，宽表做横拆，不关联的分机器；纵拆是为了省时间，横拆是为了省内存，分机器是为了分负载。Mysql在几百万行数据级别以下性能是很不错的，超过这个数量级，就算机器再强悍都会死的很难看，mysql垃圾的锁表机制会展现无疑。没有人愿等到30秒以上的Respone，何况我曾经遭遇一个45分钟以上的Select操作（一重操作，没有用到Like，使用索引）。曾经用过mysql 的分区表，感觉这种方法更像是在打补丁——改变数据库结构去适应程序，很奇怪的流程，更何况即便逃过这次不拆，迟早有一天还会回来拆的。 索引，该有的全都有，但对于写操作频繁的表，索引反倒成了累赘，不要让索引数占到字段数的30%以上这是约定俗成的标准吧。 memcache，没什么可以多说的，这玩意基本上就是铺硬件换时间的。 说道非关系型数据库，好像近期很热门。怎么说呢？越是复杂的网站越是能体现出它的优势，但问题是大多数网站都不会像twitter或者Facebook这么复杂，况且大多数程序员的逻辑还是SQL模式，贸进很可能搞砸。 WWW服务器拓扑设计 F5这类的设备是必须的，之前曾经觉得LVS可以替代F5这样的设备。用过之后才发现，这等于是将整个网站的身价性命都扔到了一台服务器上，一旦宕机或者被侵入呢？ 对于Apache还是nginx的争论持续了很久。nginx很快速，可以将单独的PHP负载分离出去，但没有apache来的灵活。要根据需求再做评价。 异步操作和缓存机制 这个貌似也没有什么花头，调整好负载之后可以将一部分操作异步到数据库相对空闲的时段进行，达到移峰填谷的效果。配合memcache或者其他的缓存机制本身也是动转静的手段之一。 自动和手动的问题 属于代码级别了吧。良好的编程规范对系统的优化是很显著的。漫山遍野的select *， 大量的变量不清空是高负载系统的忌讳。纵然php的内存处理机制再出色，它永远也不会理解你设置的变量什么时候失效，减少这看似寥寥无几的空间乘上惊人的pv数也是很可观的。]]></description>
			<content:encoded><![CDATA[<p>记得那时是2005年10月，<a title="开源小站" href="http://www.litrin.net" target="_blank">开源小站</a>刚上线不久的<a title="中国顶级门户网站架构分析" href="http://www.litrin.net/2005/10/27/%e4%b8%ad%e5%9b%bd%e9%a1%b6%e7%ba%a7%e9%97%a8%e6%88%b7%e7%bd%91%e7%ab%99%e6%9e%b6%e6%9e%84%e5%88%86%e6%9e%90/" target="_blank">一篇文章</a>。那时的我还仅仅将网站的高可用性和大负载，大流量集中在“堆硬件”的层面上。包括之后的<a href="http://www.litrin.net/2005/11/06/%e5%8c%96%e7%ae%80%e4%b8%ba%e7%b9%81%e2%80%94%e2%80%94%e4%bc%98%e5%8c%96%e4%bd%a0%e7%9a%84%e7%bd%91%e7%ab%99%e5%b1%82%e6%ac%a1/" target="_blank">一篇文档</a>，似乎也没有逃脱这个范畴。之后由于工作内容的关系，始终没有再继续探讨这个问题。仅仅只在一篇关于<a href="http://www.litrin.net/2010/12/21/%e4%bb%8egae%e7%9c%8b%e7%bd%91%e7%ab%99%e6%9e%b6%e6%9e%84%e8%b6%8b%e5%8a%bf/" target="_blank">GAE的文章</a>中讲述了一下架构的趋势。</p>
<p>时隔了5年多，不妨回头重新从新的高度上说说LAMP结构的网站如何支撑尽可能大的负载。同样说明，本文代表站长Litrin的个人意见，欢迎共同探讨，但喷子慎入。</p>
<p><span id="more-1435"></span></p>
<p>首先声明的是，以下一堆相对无趣的文字仅针对一系列负载到了至少10W pv以上级别，对于较小规模的网站大可不必遵守，还是提倡成本优先的原则，到了对应的PV级别想必也会有足够的财力和物力去改版了。</p>
<h2>初期规划</h2>
<p>这里主要还是指设计模型等前期工作。MVC的设计结构深入人心，不得不承认确实大多架构设计师首选的设计结构必是MVC。事实上，在一个网站上最容易获取，最不缺的资源是CPU和内存，最大的瓶颈都是出现在IO。</p>
<p>作为LAMP架构最大的问题就是MVC的代价太大，层层的封包意味着重复判断；打开大量的程序文件只会严重拖累性能。网上很多免费的、开源的PHP框架，用过的几个诸如ThinkPHP, ZF等应付中小型网站绝对没有问题，但都不适合大负载的网站。甚至包括Smarty这样单纯的模版引擎，大量的IO操作会拖累整体性能。如果不考虑其他因素，我甚至都考虑过All in 1的垃圾结构——这当然不现实。但恰恰是这种all in 1却正是大负载最适合的结构。奇怪的悖论。</p>
<p>受GAE的影响，曾经想过API+XML的方式实现网站架构，但后来打消了这个念头。XML本身的结构冗余度很多，这也就意味着信息承载率低。在内部几台服务器之间的通讯状况想必都没有必要搞XML，如果要搞类似的模式，CSV方式反倒是不错的选择。XML是为了开放给第三方用户的。</p>
<h2>数据库设计</h2>
<p>读写分离这个是众所周知的秘密了。Mysql 的Master + Slaver的设计真的很方便！最多就是多搞几重的读写分离。</p>
<p>拆表、拆库、分机器，大表做纵拆，宽表做横拆，不关联的分机器；纵拆是为了省时间，横拆是为了省内存，分机器是为了分负载。Mysql在几百万行数据级别以下性能是很不错的，超过这个数量级，就算机器再强悍都会死的很难看，mysql垃圾的锁表机制会展现无疑。没有人愿等到30秒以上的Respone，何况我曾经遭遇一个45分钟以上的Select操作（一重操作，没有用到Like，使用索引）。曾经用过mysql 的分区表，感觉这种方法更像是在打补丁——改变数据库结构去适应程序，很奇怪的流程，更何况即便逃过这次不拆，迟早有一天还会回来拆的。</p>
<p>索引，该有的全都有，但对于写操作频繁的表，索引反倒成了累赘，不要让索引数占到字段数的30%以上这是约定俗成的标准吧。</p>
<p>memcache，没什么可以多说的，这玩意基本上就是铺硬件换时间的。</p>
<p>说道非关系型数据库，好像近期很热门。怎么说呢？越是复杂的网站越是能体现出它的优势，但问题是大多数网站都不会像twitter或者Facebook这么复杂，况且大多数程序员的逻辑还是SQL模式，贸进很可能搞砸。</p>
<h2>WWW服务器拓扑设计</h2>
<p>F5这类的设备是必须的，之前曾经觉得LVS可以替代F5这样的设备。用过之后才发现，这等于是将整个网站的身价性命都扔到了一台服务器上，一旦宕机或者被侵入呢？</p>
<p>对于Apache还是nginx的争论持续了很久。nginx很快速，可以将单独的PHP负载分离出去，但没有apache来的灵活。要根据需求再做评价。</p>
<h2>异步操作和缓存机制</h2>
<p>这个貌似也没有什么花头，调整好负载之后可以将一部分操作异步到数据库相对空闲的时段进行，达到移峰填谷的效果。配合memcache或者其他的缓存机制本身也是动转静的手段之一。</p>
<h2>自动和手动的问题</h2>
<p>属于代码级别了吧。良好的编程规范对系统的优化是很显著的。漫山遍野的select *， 大量的变量不清空是高负载系统的忌讳。纵然php的内存处理机制再出色，它永远也不会理解你设置的变量什么时候失效，减少这看似寥寥无几的空间乘上惊人的pv数也是很可观的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/04/20/%e9%ab%98%e8%b4%9f%e8%bd%bd%e7%9a%84lamp%e6%9e%b6%e6%9e%84/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu的AppArmor引发的Mysql问题</title>
		<link>http://www.litrin.net/2011/04/08/ubuntu%e7%9a%84apparmor%e5%bc%95%e5%8f%91%e7%9a%84mysql%e9%97%ae%e9%a2%98/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ubuntu%25e7%259a%2584apparmor%25e5%25bc%2595%25e5%258f%2591%25e7%259a%2584mysql%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://www.litrin.net/2011/04/08/ubuntu%e7%9a%84apparmor%e5%bc%95%e5%8f%91%e7%9a%84mysql%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Fri, 08 Apr 2011 02:56:29 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1430</guid>
		<description><![CDATA[这些天一台ubuntu server的mysql数据目录/var/lib/mysql所在分区快用光了，于是想把Mysql的数据目录移到一个相对空闲的分区下，直接修改了my.cnf中的配置，系统提示无法启动Mysql。又自做聪明的使用了链接文件访问，仍然无效。完全排除了所有linux文件系统权限的可能之后，我回忆起了之前在Redhat系操作系统上发生过的SeLinux导致的类似问题。看了一下官档，果然！Ubuntu在710之后，增加了一个类似于Selinux的权限控制服务叫做AppArmor，名字就很有意思：应用铠甲，让我想起了Diablo2中的暗金⋯⋯ 首先，解决那个Mysql的问题： #sudo nano /etc/apparmor.d/usr.sbin.mysqld ＃好吧，我承认，我sudo出了习惯 发现了有两行配置： /home/mysql/ r, /home/mysql/** rwk, 修改掉 /data/mysql/ r, /data/mysql/** rwk, 重启AppArmor /etc/init.d/apparmor reload 重启Mysql，一切OK! 当然你可以直接关闭apparmor服务避免类似的问题，但从安全角度考虑，我不建议这么做，毕竟修改两行参数的事，不复杂。 事实上，这个应用是Novell主导的，想必Suse上也有同样的设置。在/etc/apparmor.d目录下的增减文件可以在Linux文件系统权限之外基于程序对文件系统的访问操作进行限制。如果你想要限制一个/a/b的文件，对应的配置文件就是/etc/apparmor.d/a.b。内容应该很好理解了。 感觉上相比Selinux而言AppArmor简单一点，不知安全程度如何。但就我个人而言，我更加信任相对复杂的SeLinux。 ps: 之前我还碰到过ssh上去不能读写移动硬盘的问题，估计也于此有关。]]></description>
			<content:encoded><![CDATA[<p>这些天一台ubuntu server的mysql数据目录/var/lib/mysql所在分区快用光了，于是想把Mysql的数据目录移到一个相对空闲的分区下，直接修改了my.cnf中的配置，系统提示无法启动Mysql。又自做聪明的使用了链接文件访问，仍然无效。完全排除了所有linux文件系统权限的可能之后，我回忆起了之前在Redhat系操作系统上发生过的SeLinux导致的类似问题。看了一下官档，果然！Ubuntu在710之后，增加了一个类似于Selinux的权限控制服务叫做AppArmor，名字就很有意思：应用铠甲，让我想起了Diablo2中的暗金⋯⋯</p>
<p><span id="more-1430"></span>首先，解决那个Mysql的问题：</p>
<pre>#sudo nano /etc/apparmor.d/usr.sbin.mysqld ＃好吧，我承认，我sudo出了习惯</pre>
<p>发现了有两行配置：</p>
<pre>/home/mysql/ r,
/home/mysql/** rwk,</pre>
<p>修改掉</p>
<pre>/data/mysql/ r,
/data/mysql/** rwk,</pre>
<p>重启AppArmor</p>
<pre>/etc/init.d/apparmor reload</pre>
<p>重启Mysql，一切OK!<br />
当然你可以直接关闭apparmor服务避免类似的问题，但从安全角度考虑，我不建议这么做，毕竟修改两行参数的事，不复杂。</p>
<p>事实上，这个应用是Novell主导的，想必Suse上也有同样的设置。在/etc/apparmor.d目录下的增减文件可以在Linux文件系统权限之外基于程序对文件系统的访问操作进行限制。如果你想要限制一个/a/b的文件，对应的配置文件就是/etc/apparmor.d/a.b。内容应该很好理解了。</p>
<p>感觉上相比Selinux而言AppArmor简单一点，不知安全程度如何。但就我个人而言，我更加信任相对复杂的SeLinux。</p>
<p>ps:</p>
<p>之前我还碰到过ssh上去不能读写移动硬盘的问题，估计也于此有关。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/04/08/ubuntu%e7%9a%84apparmor%e5%bc%95%e5%8f%91%e7%9a%84mysql%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>将Apache日志实时写入mysql</title>
		<link>http://www.litrin.net/2010/02/24/%e5%b0%86apache%e6%97%a5%e5%bf%97%e5%ae%9e%e6%97%b6%e5%86%99%e5%85%a5mysql/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%25b0%2586apache%25e6%2597%25a5%25e5%25bf%2597%25e5%25ae%259e%25e6%2597%25b6%25e5%2586%2599%25e5%2585%25a5mysql</link>
		<comments>http://www.litrin.net/2010/02/24/%e5%b0%86apache%e6%97%a5%e5%bf%97%e5%ae%9e%e6%97%b6%e5%86%99%e5%85%a5mysql/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 09:54:15 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1176</guid>
		<description><![CDATA[貌似 站长Litrin已经很久没有关注过LAMP的东西了。 作为网站运行来说，日志分析是一个很重要的工作。当一个网站的日志到了一定程度，或者一个网站同时有多台服务器的时候，传统的文本日志分析总会遇到瓶颈。 这个时候我就会想起强大的sql语句。看了网上很多人的帖子，都是将日志转成sql语句再导入的，搞得有点复杂。本方案不需要任何多余的软件和操作，一切全是实时、自动，供各位参考。 主机至少需要预安装apache(废话！)和mysql的客户端。如果访问量不大且服务器的资源管够的话可以将mysql装在本地，否则建议一台独立的mysql服务器。 在apache配置文件或者虚拟主机配置文件中面添加 LogFormat INSERT INTO apacheLog (ID, dateTime, IP, URL, code, referer, userAgent, size, request) VALUES ( NULL , \"%{%Y-%m-%d %H:%M:%S}t\", \"%a\", \"%U\", \"%&#62;s\", \" %{Referer}i\", \"%{User-Agent}i\", %b, %T);" sqlcomm CustomLog "&#124; /usr/local/Mysql --host=HOST --user=USER --password=PASSWORD --database=LITRIN_NET" sqlcomm 建立数据库apacheLog。 CREATE TABLE ` apacheLog ` ( `ID` int(11) NOT NULL auto_increment, `dateTime` datetime NOT [...]]]></description>
			<content:encoded><![CDATA[<p>貌似 站长Litrin已经很久没有关注过LAMP的东西了。</p>
<p>作为网站运行来说，日志分析是一个很重要的工作。当一个网站的日志到了一定程度，或者一个网站同时有多台服务器的时候，传统的文本日志分析总会遇到瓶颈。</p>
<p>这个时候我就会想起强大的sql语句。看了网上很多人的帖子，都是将日志转成sql语句再导入的，搞得有点复杂。本方案不需要任何多余的软件和操作，一切全是实时、自动，供各位参考。</p>
<p><span id="more-1176"></span></p>
<p>主机至少需要预安装apache(废话！)和mysql的客户端。如果访问量不大且服务器的资源管够的话可以将mysql装在本地，否则建议一台独立的mysql服务器。</p>
<p>在apache配置文件或者虚拟主机配置文件中面添加</p>
<pre>LogFormat INSERT INTO apacheLog (ID, dateTime, IP, URL, code, referer, userAgent, size, request) VALUES ( NULL , \"%{%Y-%m-%d %H:%M:%S}t\", \"%a\", \"%U\", \"%&gt;s\", \" %{Referer}i\", \"%{User-Agent}i\", %b, %T);" sqlcomm
CustomLog "| /usr/local/Mysql --host=HOST --user=USER --password=PASSWORD --database=LITRIN_NET" sqlcomm</pre>
<p>建立数据库apacheLog。</p>
<pre name=code class=sql>
CREATE TABLE ` apacheLog ` (
  `ID` int(11) NOT NULL auto_increment,
  `dateTime` datetime NOT NULL,
  `IP` varchar(15) NOT NULL,
  `URL` varchar(256) NOT NULL,
  `code` varchar(3) NOT NULL,
  `referer` varchar(256) NOT NULL,
  `userAgent` varchar(256) NOT NULL,
  `size` int(11) NOT NULL,
  `request` float NOT NULL,
  PRIMARY KEY  (`ID`),
  KEY `dateTime` (`dateTime`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;
</pre>
<p> 确认无误后重启apache生效！</p>
<p>其实整个流程很简单：先是利用LogFormat设置将日志转换为接近sql的格式，再通过CustomLog 调用pipe实现mysql写入。你也可以参照<a rel="nofollow" target="_blank" href="http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats">http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats</a>的格式设置写入自己关心的数据。<br />
此外，你也可以使用<code>SetEnvIf配合正则表达式过滤掉诸如图片、CSS、JS之类相对不重要的信息。</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/02/24/%e5%b0%86apache%e6%97%a5%e5%bf%97%e5%ae%9e%e6%97%b6%e5%86%99%e5%85%a5mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle+Sun=?</title>
		<link>http://www.litrin.net/2009/04/21/oraclesun/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oraclesun</link>
		<comments>http://www.litrin.net/2009/04/21/oraclesun/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 00:58:52 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[开源7788]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=973</guid>
		<description><![CDATA[刚刚得到的消息，Oracle以每股$9.50的价格，总计74亿美元收购了Sun。具体官方报道 上回说到IBM的收购案，被IBM收购可以看作对SUN的一种讽刺甚至于侮辱。在一次次的谈判无果之后，忽然间传出了这么一条冷门消息。MS说明与IBM谈判是假，Oracle是真啊。 Oracle收购Sun之后，Java的悖论总算不会发生了，Oracle一直梦想的“进军操作系统”也得以实现。Sun呢？有了Oracle作为摇钱树，系统整合中又多了数据库这一块的业务。看来，我们又一次见证了另外一个IBM的诞生。 整合以后的Mysql如何？mysql作为独立的一部分业务，本身就有oracle的股份存在。同时,mysql和oracle也不存在市场竞争（最终用户是不同的） 对于此次收购本人认为对于mysql的影响不大。即便Oracle不需要Mysql，Mysql最有可能也不过就是交由社区维护，无非由一个.com变成了.org而已。 IBM在短短的一周内从玩了Sun，直到被Oracle玩；从差点消灭了一个对手，到培养起来了一个更可怕的对手。其中滋味，只有他们自己清楚。到底是风水轮流转啊。 总之，祝今后的新Oracle一路走好！]]></description>
			<content:encoded><![CDATA[<p>刚刚得到的消息，Oracle以每股$9.50的价格，总计74亿美元收购了Sun。具体<a rel="nofollow" target="_blank" href="http://www.oracle.com/sun/index.html">官方报道</a></p>
<p>上回说到<a href="http://www.litrin.net/2009/03/29/sun%e7%9a%84%e8%ba%ab%e5%89%8d%e8%ba%ab%e5%90%8e%e4%ba%8b/">IBM的收购案</a>，被IBM收购可以看作对SUN的一种讽刺甚至于侮辱。在一次次的谈判无果之后，忽然间传出了这么一条冷门消息。MS说明与IBM谈判是假，Oracle是真啊。</p>
<p><span id="more-973"></span>Oracle收购Sun之后，Java的悖论总算不会发生了，Oracle一直梦想的“进军操作系统”也得以实现。Sun呢？有了Oracle作为摇钱树，系统整合中又多了数据库这一块的业务。看来，我们又一次见证了另外一个IBM的诞生。</p>
<p>整合以后的Mysql如何？mysql作为独立的一部分业务，本身就有oracle的股份存在。同时,mysql和oracle也不存在市场竞争（最终用户是不同的） 对于此次收购本人认为对于mysql的影响不大。即便Oracle不需要Mysql，Mysql最有可能也不过就是交由社区维护，无非由一个.com变成了.org而已。</p>
<p>IBM在短短的一周内从玩了Sun，直到被Oracle玩；从差点消灭了一个对手，到培养起来了一个更可怕的对手。其中滋味，只有他们自己清楚。到底是风水轮流转啊。</p>
<p>总之，祝今后的新Oracle一路走好！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2009/04/21/oraclesun/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mysql的几个设置值</title>
		<link>http://www.litrin.net/2009/04/14/mysql%e7%9a%84%e5%87%a0%e4%b8%aa%e8%ae%be%e7%bd%ae%e5%80%bc/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mysql%25e7%259a%2584%25e5%2587%25a0%25e4%25b8%25aa%25e8%25ae%25be%25e7%25bd%25ae%25e5%2580%25bc</link>
		<comments>http://www.litrin.net/2009/04/14/mysql%e7%9a%84%e5%87%a0%e4%b8%aa%e8%ae%be%e7%bd%ae%e5%80%bc/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 09:19:57 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=970</guid>
		<description><![CDATA[mysql数据库的优化——老声长谈的话题，总是有那么多的话题好谈。闲来无事，谈谈几个关键优化参数的设置问题。注意的是，本文主要针对于MyISAM引擎，其他的，日后再吧。 在此之前，如果对mysql的命令和配置不很熟的情况下，phpmysql是必要的。 首先，到状态选项栏，拉一个系统状态表下来，或者执行mysqladmin variables extended-status –u root –p  ，同时计算下系统的uptime. 配置文件一般保存在/etc/my.cnf中，直接修改其中的内容即可。 此外，我的设置中还有如下内容： skip-networking #不使用网络连接 skip-innodb #不使用innodb引擎 thread_concurrency = 4 #这个数值等于cpu核心数x2 key_buffer_size参数的设置:索引缓冲池大小，决定了处理索引的速度。官方文档说最多这将会有238%的性能提升。什么，你的表不加索引？来人啊，把他拖到这个页面。 算法一：把系统中所有在用的表的索引加起来，个人习惯取一个最接近此数的2的n次方。如32M，64M，128M…… 算法二：设置到Key_reads  ：Key_read_requests 至少应该1：500以上，越大越好，例如我的： [root@www ~]# mysqladmin variables extended-status -u admin -p  &#124;grep Key_re Enter password: &#124; Key_read_requests        &#124; 7335599   &#124; &#124; Key_reads                          &#124; 9137      &#124; 两种方式随个人喜好啦，个人习惯用后面的方式进行配置。 query_cache_size：返回结果缓存，数据库会将返回值缓冲，当然会快，如果想要强制关闭该功能，可以在sql中加入SQL_NO_CACHE。 [root@www ~]# mysqladmin variables extended-status -u [...]]]></description>
			<content:encoded><![CDATA[<p>mysql数据库的优化——老声长谈的话题，总是有那么多的话题好谈。闲来无事，谈谈几个关键优化参数的设置问题。注意的是，本文主要针对于MyISAM引擎，其他的，日后再吧。</p>
<p>在此之前，如果对mysql的命令和配置不很熟的情况下，phpmysql是必要的。</p>
<p>首先，到状态选项栏，拉一个系统状态表下来，或者执行mysqladmin variables extended-status –u root –p  ，同时计算下系统的uptime.</p>
<p>配置文件一般保存在/etc/my.cnf中，直接修改其中的内容即可。</p>
<p>此外，我的设置中还有如下内容：</p>
<p>skip-networking #不使用网络连接<br />
skip-innodb #不使用innodb引擎</p>
<p>thread_concurrency = 4 #这个数值等于cpu核心数x2</p>
<p><span id="more-970"></span></p>
<p><strong>key_buffer_size参数的设置:</strong>索引缓冲池大小，决定了处理索引的速度。官方文档说最多这将会有238%的性能提升。什么，你的表不加索引？来人啊，<a href="http://www.litrin.net/2006/03/25/%e4%bc%98%e5%8c%96%e4%bd%a0%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93/">把他拖到这个页面。</a></p>
<ol>
<li>算法一：把系统中所有在用的表的索引加起来，个人习惯取一个最接近此数的2的n次方。如32M，64M，128M……</li>
<li>算法二：设置到Key_reads  ：Key_read_requests 至少应该1：500以上，越大越好，例如我的：<br />
[root@www ~]# mysqladmin variables extended-status -u admin -p  |grep Key_re<br />
Enter password:<br />
| Key_read_requests        | 7335599   |<br />
| Key_reads                          | 9137      |</li>
</ol>
<p>两种方式随个人喜好啦，个人习惯用后面的方式进行配置。</p>
<p><strong>query_cache_size：</strong>返回结果缓存，数据库会将返回值缓冲，当然会快，如果想要强制关闭该功能，可以在sql中加入SQL_NO_CACHE。</p>
<p>[root@www ~]# mysqladmin variables extended-status -u admin -p  |grep Qcache<br />
Enter password:<br />
| Qcache_free_blocks       | 115       |<br />
| Qcache_free_memory       | 27422464  | #剩余的缓冲空间<br />
| Qcache_hits              | 15257     |<br />
| Qcache_inserts           | 11492     |<br />
| Qcache_lowmem_prunes     | 0         | #出现缓存过低的此数<br />
| Qcache_not_cached        | 29        |<br />
| Qcache_queries_in_cache  | 1115      | #缓存的结果数<br />
| Qcache_total_blocks      | 2441      |<br />
| Questions                | 43849     |</p>
<p>次数值大致算法：最大返回大小x每5分钟查询次数。</p>
<p>原则上，如果内存足够的情况下，可以尽量调大此数值。个人认为  uptime 秒数/Qcache_lowmem_prunes  应该小于300。这意味着至少不是每5分钟系统就报一次缓存过低。</p>
<p>要注意的是配置了此参数的时候，请同时设置 query_cache_type= 1</p>
<p><strong>table_cache</strong>：表缓冲数量。</p>
<p>mysqladmin variables extended-status -u admin -p  |grep Open<br />
Enter password:<br />
| Open_files               | 191       |<br />
| Open_streams             | 0         |<br />
| Open_tables              | 132       | #打开的表<br />
| Opened_tables            | 138       | #已经打开的表</p>
<p>我这边设置的table_cache为512，uptime为2小时，暂时看不出有什么问题，如果系统一开没多久Open_tables就已经等于设置的table_cache的时候，请将此数值再调大。</p>
<p><strong>关于索引：</strong>刚才被拖走的兄弟可以回来了^_^<br />
很多人最初接触索引的时候，以为索引越多越快。其实不然，过多的索引往往会拖慢系统，按照惯例索引字段最多只占字段总数的40%。多则无益。</p>
<p>索引字段的类型，尽量选择numeric下属的类型或者date time下属的类型，如果非要用string，可以尝试使用char来取代varchar，很多情况下不影响使用，但性能提升一个档次。</p>
<p><strong>关于内存</strong></p>
<p>经过上面的折腾，内存耗用量应该大有提升。很多人觉得内存占用高了性能会下降——这似乎是windows桌面的问题。要知道，<span style="text-decoration: underline;">作为一个数据库服务器而言，痛苦的不是内存用完了；而是内存用不掉，IO用光了。</span> 能把内存用的光光但swap基本不动，这才是高明的系统管理员。</p>
<p>正常负载下，mysql的内存耗用要保证大于空闲内存。</p>
<p><strong>sql语句的问题</strong></p>
<p>尽管这不属于系统管理员的工作内容，但要知道，一个到处是select * 语句的程序是绝对会影响系统性能的。</p>
<p><strong></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2009/04/14/mysql%e7%9a%84%e5%87%a0%e4%b8%aa%e8%ae%be%e7%bd%ae%e5%80%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用FreeBSD的ports安装apache+php+mysql·改</title>
		<link>http://www.litrin.net/2007/08/01/%e7%94%a8freebsd%e7%9a%84ports%e5%ae%89%e8%a3%85apachephpmysql%c2%b7%e6%94%b9/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e7%2594%25a8freebsd%25e7%259a%2584ports%25e5%25ae%2589%25e8%25a3%2585apachephpmysql%25c2%25b7%25e6%2594%25b9</link>
		<comments>http://www.litrin.net/2007/08/01/%e7%94%a8freebsd%e7%9a%84ports%e5%ae%89%e8%a3%85apachephpmysql%c2%b7%e6%94%b9/#comments</comments>
		<pubDate>Wed, 01 Aug 2007 01:10:17 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=459</guid>
		<description><![CDATA[ 正如我一贯习惯于规律性的工作和生活一样，昨天，我按照惯例在以往的时间，用电脑里的outlook软件收信——天热，纵然室内空调的温度已经远远低于官方标准的26度，人毕竟还是没有冷天来的那么清醒。如果从心理学的角度上讲，也许那时的我正处在“意识朦胧状态”。除了正如以往枯燥的工作E-mail之外，我收到了一封网友的E-mail。出乎意料的是，不同于往常访客在浏览了我的个人网页以后会在文章后面发表评论，这次却是发了mail。既然如此，我觉得mail一定是重要的，至少体现了相当一部分访客的心情吧。 那篇E-mail不长，在我的电脑上显示下来仅仅只有三行不到的样子，大抵的内容无非是说本站如何如何的帮了忙，我不免沾沾自喜起来——正如往常的沾沾自喜一样，mail的结尾处指出了小站的几个问题，最重要的是说很多文章过于流程化了，没有一点文字上的修饰和润色，言外之意是字里行间缺乏应有的优雅和细致。要指明的是，所谓优雅和细致，正是目前白领文学或者说白领文化所擅长的。说到白领文化的代表，我想村上春树的小说（或者说林少华翻译的日本小说）、伍佰的歌词、汪家卫的台词、小女人的blog绝对可以作为代表。作为我，从来没有当作自己是白领的一员——乏味的代码、吵闹的机房、灰尘遍布的机架，也许能跟这些词句联系上的只有“体力劳动”一个词了。我固然写不出优雅和细致，字里行间唯独只有王朔依稀的身影。于是我决定做一个尝试，既然有这样的需求，按照目前常说的一句话似乎叫做“需求第一”吧，我决定润色并重写本站访问量最高的那篇文章……   以上，正如以往话剧前面总有一个人上来讲述故事背景一样，是本文的开场白，别急，正剧马上就要开始了，当然希望您读的时候也要用优雅而细致的语调默默的朗读。 那时大概在前年的下班年，我一个正处在技术大崩溃边缘的技术人员，为了给自己制作一个技术性的网站（正如您现在看到的那样，就是本站了），要用FreeBSD平台的操作系统build一个万维网系统。 在此之前，看了网上很多安装apache php以及mysql的文章，唯独可惜是，其中大多都是用在林纳克斯的OS中的，不知为何，大多是用源代码编译的步骤教程，而其余的，Rpm（redhat programs manager )又占去了绝大部分。几乎寻觅不到FreeBSD平台下有关于Ports安装的一点讯息。于是我决定写一篇这样的东西，以免让大家舍近求远。 需要在所有的工作开始之前confirm的是，将您的主机连接到互联网之上且网路配置吻合，虽然这是句笑话，但似乎很多人都在这里遇到了坎坷。 连接好控制台，轻击键盘，键入命令： cvsup -h cvsup.freebsd.org /usr/share/example/cvsup/ports-supfile 这条命令的大体意思是从互联网上同步一下ports，以防止后续的工作中出现不必要的麻烦。 接下来的步骤就是要安装database了，Mysql纵然在严酷而恶劣下的环境还可以迅即的完成数据检索，为此Mysql成了我的首选。我的手指轻轻滑过键盘，屏幕出现了： cd /usr/ports/databases/mysql50-server/ make install clean ;rehash 不知过了多久，在我回忆了我虚度的童年时光之后——也许吧，可能时光流逝的还要慢一点，总之，一阵漫长的时光度过之后，Mysql已经成为了电脑中的一分子。接下来呢？配置mysql吧：cp /usr/local/share/mysql/my-small.cnf /etc/my.cnf 可见我电脑中资源少的可怜，我仅仅只有权力使用小内存模式启动mysql，如果条件允许您这样做的话，您可以尝试 my-big.cnf 甚至于 my-huge.cnf mysql_install_db -u mysql ; mysqld_safe -u mysql &#38; 看看mysql是否已经能够start]]></description>
			<content:encoded><![CDATA[<p> 正如我一贯习惯于规律性的工作和生活一样，昨天，我按照惯例在以往的时间，用电脑里的outlook软件收信——天热，纵然室内空调的温度已经远远低于官方标准的26度，人毕竟还是没有冷天来的那么清醒。如果从心理学的角度上讲，也许那时的我正处在“意识朦胧状态”。除了正如以往枯燥的工作E-mail之外，我收到了一封网友的E-mail。出乎意料的是，不同于往常访客在浏览了我的个人网页以后会在文章后面发表评论，这次却是发了mail。既然如此，我觉得mail一定是重要的，至少体现了相当一部分访客的心情吧。</p>
<p>那篇E-mail不长，在我的电脑上显示下来仅仅只有三行不到的样子，大抵的内容无非是说本站如何如何的帮了忙，我不免沾沾自喜起来——正如往常的沾沾自喜一样，mail的结尾处指出了小站的几个问题，最重要的是说很多文章过于流程化了，没有一点文字上的修饰和润色，言外之意是字里行间缺乏应有的优雅和细致。要指明的是，所谓优雅和细致，正是目前白领文学或者说白领文化所擅长的。说到白领文化的代表，我想村上春树的小说（或者说林少华翻译的日本小说）、伍佰的歌词、汪家卫的台词、小女人的blog绝对可以作为代表。作为我，从来没有当作自己是白领的一员——乏味的代码、吵闹的机房、灰尘遍布的机架，也许能跟这些词句联系上的只有“体力劳动”一个词了。我固然写不出优雅和细致，字里行间唯独只有王朔依稀的身影。于是我决定做一个尝试，既然有这样的需求，按照目前常说的一句话似乎叫做“需求第一”吧，我决定润色并重写本站访问量最高的<a href="http://www.litrin.net/2005/11/09/%E7%94%A8freebsd%E7%9A%84ports%E5%AE%89%E8%A3%85apachephpmysql/" target="_blank">那篇文章……</a></p>
<p> <span id="more-459"></span></p>
<p>以上，正如以往话剧前面总有一个人上来讲述故事背景一样，是本文的开场白，别急，正剧马上就要开始了，当然希望您读的时候也要用优雅而细致的语调默默的朗读。</p>
<p>那时大概在前年的下班年，我一个正处在技术大崩溃边缘的技术人员，为了给自己制作一个技术性的网站（正如您现在看到的那样，就是本站了），要用FreeBSD平台的操作系统build一个万维网系统。</p>
<p>在此之前，看了网上很多安装apache php以及mysql的文章，唯独可惜是，其中大多都是用在林纳克斯的OS中的，不知为何，大多是用源代码编译的步骤教程，而其余的，Rpm（redhat programs manager )又占去了绝大部分。几乎寻觅不到FreeBSD平台下有关于Ports安装的一点讯息。于是我决定写一篇这样的东西，以免让大家舍近求远。</p>
<p>需要在所有的工作开始之前confirm的是，将您的主机连接到互联网之上且网路配置吻合，虽然这是句笑话，但似乎很多人都在这里遇到了坎坷。</p>
<p>连接好控制台，轻击键盘，键入命令：<br />
cvsup -h cvsup.freebsd.org /usr/share/example/cvsup/ports-supfile<br />
这条命令的大体意思是从互联网上同步一下ports，以防止后续的工作中出现不必要的麻烦。</p>
<p>接下来的步骤就是要安装database了，Mysql纵然在严酷而恶劣下的环境还可以迅即的完成数据检索，为此Mysql成了我的首选。我的手指轻轻滑过键盘，屏幕出现了：<br />
cd /usr/ports/databases/mysql50-server/<br />
make install clean ;rehash<br />
不知过了多久，在我回忆了我虚度的童年时光之后——也许吧，可能时光流逝的还要慢一点，总之，一阵漫长的时光度过之后，Mysql已经成为了电脑中的一分子。接下来呢？配置mysql吧：cp /usr/local/share/mysql/my-small.cnf /etc/my.cnf<br />
可见我电脑中资源少的可怜，我仅仅只有权力使用小内存模式启动mysql，如果条件允许您这样做的话，您可以尝试 my-big.cnf 甚至于 my-huge.cnf<br />
mysql_install_db -u mysql ; mysqld_safe -u mysql &amp;<br />
看看mysql是否已经能够start</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2007/08/01/%e7%94%a8freebsd%e7%9a%84ports%e5%ae%89%e8%a3%85apachephpmysql%c2%b7%e6%94%b9/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>mysql的“降级”移植</title>
		<link>http://www.litrin.net/2007/05/30/mysql%e7%9a%84%e2%80%9c%e9%99%8d%e7%ba%a7%e2%80%9d%e7%a7%bb%e6%a4%8d/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mysql%25e7%259a%2584%25e2%2580%259c%25e9%2599%258d%25e7%25ba%25a7%25e2%2580%259d%25e7%25a7%25bb%25e6%25a4%258d</link>
		<comments>http://www.litrin.net/2007/05/30/mysql%e7%9a%84%e2%80%9c%e9%99%8d%e7%ba%a7%e2%80%9d%e7%a7%bb%e6%a4%8d/#comments</comments>
		<pubDate>Wed, 30 May 2007 02:50:37 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=449</guid>
		<description><![CDATA[开发了一个项目，在部署时遇到了一点问题。 开发环境原本是mysql5.1，可实际部署的时候才发现服务器端的环境是mysql4.0。可mysqldump出来的数据无法直接倒入4.0，直接拷贝出来的数据，mysql4.0根本无法识别。 研究了一下mysqldump的文档，找到了一个选项&#8220;&#8211;compatible=name&#8221; 问题迎刃而解。而且这个选项竟然支持在多个环境中的平移。 选项支持mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb,格式的SQL语句。]]></description>
			<content:encoded><![CDATA[<p>开发了一个项目，在部署时遇到了一点问题。</p>
<p>开发环境原本是mysql5.1，可实际部署的时候才发现服务器端的环境是mysql4.0。可mysqldump出来的数据无法直接倒入4.0，直接拷贝出来的数据，mysql4.0根本无法识别。</p>
<p>研究了一下mysqldump的文档，找到了一个选项&ldquo;&#8211;compatible=name&rdquo; 问题迎刃而解。而且这个选项竟然支持在多个环境中的平移。 选项支持mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb,格式的SQL语句。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2007/05/30/mysql%e7%9a%84%e2%80%9c%e9%99%8d%e7%ba%a7%e2%80%9d%e7%a7%bb%e6%a4%8d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>请教mysql的数据备份</title>
		<link>http://www.litrin.net/2006/09/25/%e8%af%b7%e6%95%99mysql%e7%9a%84%e6%95%b0%e6%8d%ae%e5%a4%87%e4%bb%bd/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e8%25af%25b7%25e6%2595%2599mysql%25e7%259a%2584%25e6%2595%25b0%25e6%258d%25ae%25e5%25a4%2587%25e4%25bb%25bd</link>
		<comments>http://www.litrin.net/2006/09/25/%e8%af%b7%e6%95%99mysql%e7%9a%84%e6%95%b0%e6%8d%ae%e5%a4%87%e4%bb%bd/#comments</comments>
		<pubDate>Mon, 25 Sep 2006 09:48:31 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=401</guid>
		<description><![CDATA[我想备份服务器(linux)上的数据 mysqldump -p db_name &#62; backup.txt 提示Enter password : 但我输入不进去密码(光标不动),为什么? 急呀,请求帮助,谢谢了! MSN:zch1125@163.com email : linda.zh@vonno.com]]></description>
			<content:encoded><![CDATA[<p>我想备份服务器(linux)上的数据 mysqldump -p db_name &gt; backup.txt  提示Enter password : 但我输入不进去密码(光标不动),为什么? 急呀,请求帮助,谢谢了!  MSN:zch1125@163.com  email : linda.zh@vonno.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2006/09/25/%e8%af%b7%e6%95%99mysql%e7%9a%84%e6%95%b0%e6%8d%ae%e5%a4%87%e4%bb%bd/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mysql的存储引擎</title>
		<link>http://www.litrin.net/2006/07/25/mysql%e7%9a%84%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mysql%25e7%259a%2584%25e5%25ad%2598%25e5%2582%25a8%25e5%25bc%2595%25e6%2593%258e</link>
		<comments>http://www.litrin.net/2006/07/25/mysql%e7%9a%84%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/#comments</comments>
		<pubDate>Tue, 25 Jul 2006 03:06:31 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=372</guid>
		<description><![CDATA[mysql5.1里包含了好几种存储引擎(Storage Engine )。性能各有千秋，究竟哪个才是您需要的？ 功能列表： MyISAM BDB Memory InnoDB Archive NDB 最大数据 256TB No Yes 64TB No 384EB[4] 事务处理 No Yes No Yes No Yes 锁定级别 Table Page Table Row Row Row 读取快照 No No No Yes Yes No 特殊类型字段支持 Yes Yes[1] No Yes[1] Yes[1] Yes[1] B-tree 索引 Yes Yes Yes Yes No Yes 哈西索引 No [...]]]></description>
			<content:encoded><![CDATA[<p>mysql5.1里包含了好几种存储引擎(Storage Engine )。性能各有千秋，究竟哪个才是您需要的？</p>
<p>功能列表：</p>
<p><!--break--></p>
<table border="1">
<tbody>
<tr>
<td><span class="bold"><strong><br />
            </strong></span></td>
<td><span class="bold"><strong>MyISAM</strong></span></td>
<td><span class="bold"><strong>BDB</strong></span></td>
<td><span class="bold"><strong>Memory</strong></span></td>
<td><span class="bold"><strong>InnoDB</strong></span></td>
<td><span class="bold"><strong>Archive</strong></span></td>
<td><span class="bold"><strong>NDB</strong></span></td>
</tr>
<tr>
<td>最大数据
            </td>
<td>256TB</td>
<td>No</td>
<td>Yes</td>
<td>64TB</td>
<td>No</td>
<td>384EB<sup>[4]</sup> </td>
</tr>
<tr>
<td>事务处理</td>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>锁定级别</td>
<td>Table</td>
<td>Page</td>
<td>Table</td>
<td>Row</td>
<td>Row</td>
<td>Row</td>
</tr>
<tr>
<td>读取快照</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr>
<td>特殊类型字段支持</td>
<td>Yes</td>
<td>Yes<sup>[1]</sup> </td>
<td>No</td>
<td>Yes<sup>[1]</sup> </td>
<td>Yes<sup>[1]</sup> </td>
<td>Yes<sup>[1]</sup> </td>
</tr>
<tr>
<td>B-tree 索引
            </td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>哈西索引
            </td>
<td>No</td>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>全文搜索
            </td>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td>集群索引</td>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td>数据缓存
            </td>
<td>No</td>
<td>Yes</td>
<td>N/A</td>
<td>Yes</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>索引缓存
            </td>
<td>Yes</td>
<td>Yes</td>
<td>N/A</td>
<td>Yes</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>压缩数据
            </td>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr>
<td>加密<sup>[2]</sup> </td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>集群数据库</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td><sup>复制支持</sup><sup>[3]</sup> </td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>外键支持</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td>热备份热恢复<sup>[3]</sup> </td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>结果缓存支持</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>字典更新统计
            </td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
</tbody>
</table>
<p>注：</p>
<p>[1]支持特殊的数据类型，但不可作为索引<br />
[2] 通过编程在服务器执行，效果远胜于在存储引擎中执行<br />
[3] 在服务器内执行，远胜过在存储引擎中执行<br />
[4] EB = 1024 * 1024TB</p>
<p>
其中最常用的非<code class="literal">MyISAM</code>莫数。也是mysql下功夫最多的一个引擎了，几乎所有的参数都可以调节。速度超快，适合存储网页数据。类似的还有一个ISAM引擎，但就我看来，它不过是MyISAM的前身为了保证兼容性保留下来的。</p>
<p><code class="literal">Memory首次接触是将php的seesion保存在数据库中，Memory顾名思义，将所有数据保存在内存中，访问速度有所提高，当然关机后数据消失。感觉这个引擎更加体现了mysql的&ldquo;裸奔原则&rdquo;，为了速度，能丢弃的全部丢弃。</code></p>
<p><code class="literal">InnoDB因为有了事务处理和外键支持，很适合做企业数据库。但说老实话，他的速度实在叫人提不起兴趣。支持</code><code class="literal">COMMIT</code>,           <code class="literal">ROLLBACK</code>, 和 savepoints.<br />
<code class="literal"><br />
BDB，很接近于InnoDB，支持</code>R<code class="literal">COMMIT</code> 和 <code class="literal">ROLLBACK 操作</code><code class="literal">。</p>
<p>NDB，如果你的mysql不得不作集群，这也是不得不选择的引擎。</p>
<p>一个数据库中每个表都可以用不同的引擎，你可以使用</code>&ldquo;CREATE TABLE engineTest (id INT) ENGINE = MyISAM;&rdquo; 的方式来创建一个表，同时也可以使用&ldquo;ALTER TABLE engineTest ENGINE = ARCHIVE;&rdquo;的方式改变一个表的属性。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2006/07/25/mysql%e7%9a%84%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>细解mysqldump</title>
		<link>http://www.litrin.net/2006/05/15/%e7%bb%86%e8%a7%a3mysqldump/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e7%25bb%2586%25e8%25a7%25a3mysqldump</link>
		<comments>http://www.litrin.net/2006/05/15/%e7%bb%86%e8%a7%a3mysqldump/#comments</comments>
		<pubDate>Mon, 15 May 2006 08:19:10 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=320</guid>
		<description><![CDATA[mysqldump是mysql自带的一个强大的备份工具。如果您像装载整个数据库mydb的内容到一个文件中，可以使用下面的命令： 　　#mysqldump &#8211;-database mydb &#8211;user=username &#8211;password=password &#62; mydb.sql 　　　　这个语句也允许您指定一个表进行dump(备份/导出/装载?)。如果您只是希望把数据库db中的表table中的整个内容导出到一个文件，可以使用下面的命令： 　　#mysqldump &#8211;database db table &#62;db_table.sql　　　　这个非常的灵活，您甚至可以使用WHERE从句来选择您需要的记录导出到文件中。看过mysql官方手册中就介绍了这样一个实现mysql增量备份的例子： &#160;&#160;&#160; &#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; #mysqldump &#8211;where=&#8220; last_modified &#60; NOW() &#8211; INTERVAL 1 MONTH&#8221;&#160; &#62;backup.sql　　　　　　mysqldump工具有大量的选项，部分选项如下表： 　　选项/Option 作用/Action Performed 　　&#8211;add-drop-table 　　这个选项将会在每一个表的前面加上DROP TABLE IF EXISTS语句，这样可以保证导回MySQL数据库的时候不会出错，因为每次导回的时候，都会首先检查表是否存在，存在就删除 　　&#8211;add-locks 　　这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作 　　　　-c or &#8211; complete_insert 　　这个选项使得mysqldump命令给每一个产生INSERT语句加上列（field）的名字。当把数据导出导另外一个数据库时这个选项很有用。 　　&#8211;delayed-insert 在INSERT命令中加入DELAY选项 　　-F or -flush-logs 使用这个选项，在执行导出之前将会刷新MySQL服务器的log. 　　-f or -force 使用这个选项，即使有错误发生，仍然继续导出 [...]]]></description>
			<content:encoded><![CDATA[<p>mysqldump是mysql自带的一个强大的备份工具。如果您像装载整个数据库mydb的内容到一个文件中，可以使用下面的命令： </p>
<p>　　#mysqldump &ndash;-database mydb &#8211;user=username &#8211;password=password &gt; mydb.sql <br />　　<br />　　这个语句也允许您指定一个表进行dump(备份/导出/装载?)。如果您只是希望把数据库db中的表table中的整个内容导出到一个文件，可以使用下面的命令： </p>
<p>　　#mysqldump &ndash;database db table &gt;db_table.sql<br />　　<br />　　这个非常的灵活，您甚至可以使用WHERE从句来选择您需要的记录导出到文件中。看过mysql官方手册中就介绍了这样一个实现mysql增量备份的例子： <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #mysqldump &#8211;where=&ldquo; last_modified &lt; NOW() &#8211; INTERVAL 1 MONTH&rdquo;&nbsp; &gt;backup.sql<br />　　　　<br />　　mysqldump工具有大量的选项，部分选项如下表： </p>
<p>　　选项/Option 作用/Action Performed </p>
<p>　　&#8211;add-drop-table </p>
<p>　　这个选项将会在每一个表的前面加上DROP TABLE IF EXISTS语句，这样可以保证导回MySQL数据库的时候不会出错，因为每次导回的时候，都会首先检查表是否存在，存在就删除 </p>
<p>　　&#8211;add-locks </p>
<p>　　这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作 <br />　　<br />　　-c or &#8211; complete_insert </p>
<p>　　这个选项使得mysqldump命令给每一个产生INSERT语句加上列（field）的名字。当把数据导出导另外一个数据库时这个选项很有用。 </p>
<p>　　&#8211;delayed-insert 在INSERT命令中加入DELAY选项 </p>
<p>　　-F or -flush-logs 使用这个选项，在执行导出之前将会刷新MySQL服务器的log. </p>
<p>　　-f or -force 使用这个选项，即使有错误发生，仍然继续导出 </p>
<p>　　&#8211;full 这个选项把附加信息也加到CREATE TABLE的语句中 </p>
<p>　　-l or -lock-tables 使用这个选项，导出表的时候服务器将会给表加锁。 </p>
<p>　　-t or -no-create- info </p>
<p>　　这个选项使的mysqldump命令不创建CREATE TABLE语句，这个选项在您只需要数据而不需要DDL（数据库定义语句）时很方便。 <br />　　<br />　　-d or -no-data 这个选项使的mysqldump命令不创建INSERT语句。</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &#8211;opt 此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。 </p>
<p>　　-q or -quick 这个选项使得MySQL不会把整个导出的内容读入内存再执行导出，而是在读到的时候就写入导文件中。 </p>
<p>　 　-T path or -tab = path 这个选项将会创建两个文件，一个文件包含DDL语句或者表创建语句，另一个文件包含数据。DDL文件被命名为table_name.sql,数据文件被命 名为table_name.txt.路径名是存放这两个文件的目录。目录必须已经存在，并且命令的使用者有对文件的特权。 <br />　　<br />　　-w &quot;WHERE Clause&quot; or -where = &quot;Where clause &quot; </p>
<p>　　如前面所讲的，您可以使用这一选项来过筛选将要放到 导出文件的数据。 <br />　　</p>
<p>PS: 如果你的mysql是运行在*nix平台上的，可以利用其强大的pipe连接一下，输出压缩后的数据：mysqldump -A | bzip2 -9 -f &gt; db_backup.sql.bz2。直接从一个服务器备份到另一服务器：mysqldump&nbsp;&#8211;opt&nbsp;database&nbsp;|&nbsp;mysql&nbsp;&#8211;host=remote-host&nbsp;-C&nbsp;database&nbsp; 。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2006/05/15/%e7%bb%86%e8%a7%a3mysqldump/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>优化你的数据库</title>
		<link>http://www.litrin.net/2006/03/25/%e4%bc%98%e5%8c%96%e4%bd%a0%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e4%25bc%2598%25e5%258c%2596%25e4%25bd%25a0%25e7%259a%2584%25e6%2595%25b0%25e6%258d%25ae%25e5%25ba%2593</link>
		<comments>http://www.litrin.net/2006/03/25/%e4%bc%98%e5%8c%96%e4%bd%a0%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93/#comments</comments>
		<pubDate>Sat, 25 Mar 2006 12:24:48 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=286</guid>
		<description><![CDATA[最近一段时间似乎是受到了刺激，弄来弄去都是优化各种数据库的活所以继续还是写这一类的东西。凡是运行中的数据库，总会数据越来越多（废话！），性能同时也会越来越差。这里就按照一般的顺序，从应用逐步提高到硬件升级。 应用优化 任何一个数据库他的作用都不是全力运行算术运算的，所以除了必须的工作之外，其他的还是交给外部软件来完成吧。让数据库来执行类似于计算器功能的算术运算或者执行一系列无谓的数据校验可谓是愚蠢至极，过于复杂的函数最好也不要使用，记住数据库的优势在于： SELECT和INSERT 指定的行 JOIN表 GROUP BY ORDER BY DISTINCT &#160;对于一般的简单运算，类似于sum avg之类的操作，出于节省连接时间的考虑还是交给外部软件吧。当然不要查询应用中不需要的列；同时可以试试看UPDATE table set count=count+1 where key，性能可能会有不少提升。如果在一个批处理中进行大量修改，可以使用LOCK TABLES，例如将多个UPDATES或DELETES集中在一起；Insert使用默认值也是一个不错的选择。当然可以多试试EXPLAIN 工具，总会找到一种适合的最优化操作的。 优化数据结构 注意的是，这里说的并不是让你去更改系统的数据结构，特别是在运行中的系统中，这样做是&#8220;相当&#8221;危险的。 明智地使用键码。 键码适合搜索，但不适合索引列的插入/更新。 不要索引你不想用的东西。 虽说有种说法叫做&#8220;同样的数据只保存一次&#8221;但前提是&#8220;在所有的运算只做一次且有用&#8221;的前提下，创建足够总结表、简化表是非常有益的。 在大表上不做GROUP BY，相反创建大表的总结表/简化表并查询它。 ANALYSE过程可以帮助你找到表的最优类型：SELECT * FROM table_name PROCEDURE ANALYSE()。 数据库优化 这里一句话也讲不清这么多种数据库的优化，本站有不少相关的东西可供大家参考，并且本站会不断更新和完善，同时也希望大家协助。 磁盘优化 磁盘系统通常是影响数据库第二个重要的因素（第一重要的是内存，但内存的优化相比较复杂） 为系统、程序和临时文件配备一个专用磁盘，如果确是进行很多修改工作，将更新日志和事务日志放在专用磁盘上。 低寻道时间对数据库磁盘非常重要。对与大表，你可以估计你将需要log(行数)/log(索引块长度/3*2/(键码长度 + 数据指针长度))+1次寻到才能找到一行。对于有500000行的表，索引Mediun int类型的列，需要log(500000) / log(1024/3*2/(3 + 2))+1=4次寻道。上述索引需要500000*7*3/2=5.2M的空间。实际上，大多数块将被缓存，所以大概只需要1-2次寻道。 然而对于写入（如上），你将需要4次寻道请求来找到在哪里存放新键码，而且一般要2次寻道来更新索引并写入一行。 对于非常大的数据库，你的应用将受到磁盘寻道速度的限制，随着数据量的增加呈N log N数据级递增。 将数据库和表分在不同的磁盘上。在MySQL中，你可以为此而使用符号链接。 RAID 0将提高读和写的吞吐量。 RAID [...]]]></description>
			<content:encoded><![CDATA[<p lang="zh-CN" style="margin-bottom: 0cm;">最近一段时间似乎是受到了刺激，弄来弄去都是优化各种数据库的活所以继续还是写这一类的东西。凡是运行中的数据库，总会数据越来越多（废话！），性能同时也会越来越差。这里就按照一般的顺序，从应用逐步提高到硬件升级。</p>
<p lang="zh-CN" style="margin-bottom: 0cm;"> </p>
<p lang="zh-CN" style="margin-bottom: 0cm;"><strong>应用优化</strong></p>
<p lang="zh-CN" style="">任何一个数据库他的作用都不是全力运行算术运算的，所以除了必须的工作之外，其他的还是交给外部软件来完成吧。让数据库来执行类似于计算器功能的算术运算或者执行一系列无谓的数据校验可谓是愚蠢至极，过于复杂的函数最好也不要使用，记住数据库的优势在于： </p>
<ul>
<li>
<p lang="zh-CN" style="margin-bottom: 0cm;"><font face="Times New Roman, serif">SELECT</font>和<font face="Times New Roman, serif">INSERT 	</font>指定的行</p>
</li>
<li>
<p style="margin-bottom: 0cm;"><font face="Times New Roman, serif">JOIN</font>表 		</p>
</li>
</ul>
<ul>
<li>
<p style="margin-bottom: 0cm;"><font face="Times New Roman, serif">GROUP 	BY </font> 	</p>
</li>
</ul>
<ul>
<li>
<p style="margin-bottom: 0cm;"><font face="Times New Roman, serif">ORDER 	BY </font> 	</p>
</li>
</ul>
<ul>
<li>
<p><font face="Times New Roman, serif">DISTINCT </font> 	</p>
</li>
</ul>
<p>&nbsp;<span lang="zh-CN">对于一般的简单运算，类似于</span><font face="Times New Roman, serif">sum avg</font><span lang="zh-CN">之类的操作，出于节省连接时间的考虑还是交给外部软件吧。<span lang="zh-CN">当然</span>不要查询应用中不需要的列<span lang="zh-CN">；</span>同时可以试试看</span><font face="Times New Roman, serif">UPDATE table set count=count+1 where key</font><span lang="zh-CN">，性能可能会有不少提升。</span>如果在一个批处理中进行大量修改，<span lang="zh-CN">可以</span>使用<font face="Times New Roman, serif">LOCK TABLES</font><span lang="zh-CN">，</span>例如将多个<font face="Times New Roman, serif">UPDATES</font>或<font face="Times New Roman, serif">DELETES</font>集中在一起；<font face="Times New Roman, serif">Insert</font>使用默认值也是一个不错的选择。<span lang="zh-CN">当然可以多试试</span><font face="Times New Roman, serif">EXPLAIN </font><span lang="zh-CN">工具，总会找到一种适合的最优化操作的。</span></p>
<p lang="zh-CN">
<p lang="zh-CN"><strong>优化数据结构</strong>  </p>
<p lang="zh-CN">注意的是，这里说的并不是让你去更改系统的数据结构，特别是在运行中的系统中，这样做是&ldquo;相当&rdquo;危险的。  </p>
<ul>
<li>明智地使用键码。     </li>
<li>
<p style="margin-bottom: 0cm;">键码适合搜索，但不适合索引列的插入<font face="Times New Roman, serif">/</font>更新。 		</p>
</li>
<li>
<p style="margin-bottom: 0cm;">不要索引你不想用的东西。 		</p>
</li>
<li>
<p style="margin-bottom: 0cm;"><span lang="zh-CN">虽说有种说法叫做&ldquo;同样的数据只保存一次&rdquo;但前提是&ldquo;在所有的运算只做一次且有用&rdquo;的前提下，</span>创建<span lang="zh-CN">足够</span>总结表<span lang="zh-CN">、简化表是非常有益的</span>。 		</p>
</li>
<li>
<p style="margin-bottom: 0cm;">在大表上不做<font face="Times New Roman, serif">GROUP 	BY</font>，相反创建大表的<span lang="zh-CN">总结表</span><font face="Times New Roman, serif">/</font><span lang="zh-CN">简化表</span>并查询它。 		</p>
</li>
<li>
<p style="margin-bottom: 0cm;"><font face="Times New Roman, serif">ANALYSE</font>过程可以帮助你找到表的最优类型：<font face="Times New Roman, serif">SELECT 	* FROM table_name PROCEDURE ANALYSE()</font>。  	</p>
<p style="margin-bottom: 0cm;">
</li>
</ul>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><strong><span lang="zh-CN">数据库优化</span> </strong> </p>
<p lang="zh-CN" style="margin-bottom: 0cm;">这里一句话也讲不清这么多种数据库的优化，<a href="http://www.litrin.net">本站</a>有不少相关的东西可供大家参考，并且<a href="http://www.litrin.net">本站</a>会不断更新和完善，同时也希望大家协助。</p>
<p lang="zh-CN" style="margin-bottom: 0cm;"> </p>
<p lang="zh-CN" style="margin-bottom: 0cm;"> </p>
<p lang="zh-CN"><strong>磁盘优化</strong></p>
<p lang="zh-CN" style="">磁盘系统通常是影响数据库第二个重要的因素（第一重要的是内存，但内存的优化相比较复杂）</p>
<ul>
<li>
<p style="margin-bottom: 0cm;">为系统、程序和临时文件配备一个专用磁盘，如果确是进行很多修改工作，将更新日志和事务日志放在专用磁盘上。 		</p>
</li>
<li>
<p style="margin-bottom: 0cm;">低寻道时间对数据库磁盘非常重要。对与大表，你可以估计你将需要<font face="Times New Roman, serif"><font color="#000000">l</font><font color="#000000">og(</font></font><font color="#000000">行数<font face="Times New Roman, serif">)/log(</font></font><font color="#000000">索引块长度<font face="Times New Roman, serif">/3*2/(</font></font><font color="#000000">键码长度 	<font face="Times New Roman, serif">+ 	</font></font><font color="#000000">数据指针长度<font face="Times New Roman, serif">))+1</font></font>次寻到才能找到一行。对于有<font face="Times New Roman, serif">500000</font>行的表，索引<font face="Times New Roman, serif">Mediun 	int</font>类型的列，需要<font face="Times New Roman, serif"><font color="#000000">log(500000) 	/ log(1024/3*2/(3 + 	2))+1=4</font></font>次寻道。上述索引需要<font face="Times New Roman, serif">500000*7*3/2=5.2M</font>的空间。实际上，大多数块将被缓存，所以大概只需要<font face="Times New Roman, serif">1-2</font>次寻道。 		</p>
</li>
</ul>
<ul>
<li>
<p style="margin-bottom: 0cm;">然而对于写入（如上），你将需要<font face="Times New Roman, serif">4</font>次寻道请求来找到在哪里存放新键码，而且一般要<font face="Times New Roman, serif">2</font>次寻道来更新索引并写入一行。 		</p>
</li>
</ul>
<ul>
<li>
<p style="margin-bottom: 0cm;">对于非常大的数据库，你的应用将受到磁盘寻道速度的限制，随着数据量的增加呈<font face="Times New Roman, serif">N 	log N</font>数据级递增。  	</p>
</li>
</ul>
<ul>
<li>
<p style="margin-bottom: 0cm;">将数据库和表分在不同的磁盘上。在<font face="Times New Roman, serif">MySQL</font>中，你可以为此而使用符号链接。 		</p>
</li>
</ul>
<ul>
<li>
<p style="margin-bottom: 0cm;"><font face="Times New Roman, serif">RAID 	0</font>将提高读和写的吞吐量。  	</p>
</li>
</ul>
<ul>
<li>
<p style="margin-bottom: 0cm;"><font face="Times New Roman, serif">RAID 	0+1</font>将更安全并提高读取的吞吐量，<span lang="zh-CN">但</span>写入的吞吐量将有所降低。 		</p>
</li>
</ul>
<ul>
<li>
<p style="margin-bottom: 0cm;">不要对临时文件或可以很容易地重建的数据所在的磁盘使用镜像或<font face="Times New Roman, serif">RAID(</font>除了<font face="Times New Roman, serif">RAID 	0)</font>。  	</p>
</li>
</ul>
<ul>
<li>
<p style="margin-bottom: 0cm;">在<font face="Times New Roman, serif">Linux</font>上，在引导时对磁盘使用命令<font face="Times New Roman, serif">hdparm 	-m16 -d1</font>以启用同时读写多个扇区和<font face="Times New Roman, serif">DMA</font>功能。这可以将响应时间提高<font face="Times New Roman, serif">5~50%</font>。 		</p>
</li>
</ul>
<ul>
<li>
<p style="margin-bottom: 0cm;">在<font face="Times New Roman, serif">Linux</font>上，用<font face="Times New Roman, serif">async 	(</font>默认<font face="Times New Roman, serif">)</font>和<font face="Times New Roman, serif">noatime</font>挂载磁盘<font face="Times New Roman, serif">(mount)</font>。 		</p>
</li>
</ul>
<ul>
<li>
<p>对于某些特定应用，可以对某些特定表使用内存磁盘，但通常不需要。 		</p>
</li>
</ul>
<p lang="zh-CN">
<p lang="zh-CN"><strong>升级硬件</strong></p>
<p><span style=""><span lang="zh-CN">按照数据库对于硬件的依赖程度，内存、硬盘、</span></span><font face="Times New Roman, serif"><span style="">CPU</span></font><span style=""><span lang="zh-CN">的顺序来升级硬件，包括操作系统。</span></span></p>
<ul>
<li>
<p style="margin-bottom: 0cm;">如果你需要庞大的数据库表<font face="Times New Roman, serif">(&gt;2G) 	</font><span lang="zh-CN">，最好采用</span><font face="Times New Roman, serif">64</font><span lang="zh-CN">位的</span><font face="Times New Roman, serif">CPU</font><span lang="zh-CN">加</span><font face="Times New Roman, serif">64</font><span lang="zh-CN">位的操作系统。</span></p>
</li>
<li>
<p lang="zh-CN" style="margin-bottom: 0cm;">如果有足够大的内存，关掉<font face="Times New Roman, serif">Swap</font>分区吧。</p>
</li>
<li>
<p style="margin-bottom: 0cm;">更多的内存通过将最常用的键码页面存放在内存中可以加速键码的更新 	<span lang="zh-CN">，但前提是要正确的设置而且配置好这些内存&mdash;&mdash;这正是我前些天碰到的比较讽刺的例子，空有</span><font face="Times New Roman, serif">24G</font><span lang="zh-CN">的内存只执行了</span><font face="Times New Roman, serif">2</font><span lang="zh-CN">秒钟的&ldquo;</span><font face="Times New Roman, serif">F5</font><span lang="zh-CN">攻击&rdquo;就死的一塌胡图。</span></p>
</li>
<li>
<p style="margin-bottom: 0cm;">如果不使用事务安全<font face="Times New Roman, serif">(transaction-safe)</font>的表或有大表并且想避免长文件检查，一台<font face="Times New Roman, serif">UPS</font>就能够在电源故障时让系统安全关闭<span lang="zh-CN">。</span></p>
</li>
<li>
<p><span lang="zh-CN">如果数据库单独列出来需要网络连接，请选择至少千兆网卡和交换机的连接，如果采用了类似于</span><font face="Times New Roman, serif">8139</font><span lang="zh-CN">的烂网卡你会抓狂的。</span><font face="Times New Roman, serif"><br /></font></p>
</li>
</ul>
<p>其他的类似于定期优化表、修复磁盘、消除碎片等等工作属于一般性的维护操作，这里不加深解。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2006/03/25/%e4%bc%98%e5%8c%96%e4%bd%a0%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>数据库系统升级</title>
		<link>http://www.litrin.net/2006/03/09/%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b3%bb%e7%bb%9f%e5%8d%87%e7%ba%a7/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e6%2595%25b0%25e6%258d%25ae%25e5%25ba%2593%25e7%25b3%25bb%25e7%25bb%259f%25e5%258d%2587%25e7%25ba%25a7</link>
		<comments>http://www.litrin.net/2006/03/09/%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b3%bb%e7%bb%9f%e5%8d%87%e7%ba%a7/#comments</comments>
		<pubDate>Thu, 09 Mar 2006 03:27:32 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=270</guid>
		<description><![CDATA[根据PostgresSQL8.1的手册所描述，8.1新增了诸如数据库自动清理和自动备份等新功能。在本地测试了大约3周，确实如实。故今天上午9:00~11:00升级了网站的数据库至8.1的版本，同时连带升级还有PHP5的pgsql模块和perl。 整体性能有了一定提高，首页的平均载入时间减少了百分之三秒且还有潜力可挖。升级过程中可能部分用户会注册失败，还请重新注册。]]></description>
			<content:encoded><![CDATA[<p>根据PostgresSQL8.1的手册所描述，8.1新增了诸如数据库自动清理和自动备份等新功能。在本地测试了大约3周，确实如实。故今天上午9:00~11:00升级了网站的数据库至8.1的版本，同时连带升级还有PHP5的pgsql模块和perl。</p>
<p>整体性能有了一定提高，首页的平均载入时间减少了百分之三秒且还有潜力可挖。升级过程中可能部分用户会注册失败，还请重新注册。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2006/03/09/%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b3%bb%e7%bb%9f%e5%8d%87%e7%ba%a7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让Openoffic与你的数据库对接</title>
		<link>http://www.litrin.net/2006/01/12/%e8%ae%a9openoffic%e4%b8%8e%e4%bd%a0%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93%e5%af%b9%e6%8e%a5/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e8%25ae%25a9openoffic%25e4%25b8%258e%25e4%25bd%25a0%25e7%259a%2584%25e6%2595%25b0%25e6%258d%25ae%25e5%25ba%2593%25e5%25af%25b9%25e6%258e%25a5</link>
		<comments>http://www.litrin.net/2006/01/12/%e8%ae%a9openoffic%e4%b8%8e%e4%bd%a0%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93%e5%af%b9%e6%8e%a5/#comments</comments>
		<pubDate>Thu, 12 Jan 2006 07:33:18 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[桌面应用]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=210</guid>
		<description><![CDATA[Openoffice从2.0版本开始，增加了Openoffic Base组件。这个组件功能类似于MS Access，同样允许你通过ODBC 或 JDBC 连接到外部数据库。本文就Ubuntu下的ODBC连接mysql为例。安装 unixODBC 和 MyODBC ： #sudo apt-get install unixodbc unixodbc-bin libmyodbc其中&#8220;unixodbc-bin&#8221;是一系列图形化的工具，可以不安装。 设置unixODBC:#sudo ODBCConfig开启ODBC的控制面板，与windows的几乎一样的布局。 System DSN-&#62;ADD&#8230;按钮 继续ADD 这里的Name和Description随便写就可以了,Driver 为 /usr/lib/odbc/libmyodbc.so Setup 为 /usr/lib/odbc/libodbcmyS.so ，其余的默认就好了。对于其它不是Ubuntu的用户，只要确保安装了MyODBC，不妨直接搜索文件名将路径贴过来就可。结束后&#8220;对勾&#8221;按钮保存结束。 到了这一步就没有太大难度了，Name随便，Server添数据库服务器的IP地址，Port Mysql的端口，默认3306，Database下拉列表中选择需要连接的数据库。其余空着，对勾。 设置成功！OK结束。 设置OpenOffice Base: 这里选择&#8220;连接到现有数据库&#8221;下拉列表选择ODBC,我试过选择Mysql不过到头来还是通过了ODBC连接。 如果前面ODBC设置正确，这里会出现数据源列表。 数据库的用户名、密码，同时还有测试按钮。 OK,搞定！ 现在就可以利用OpenOffice Base来直接向数据库中导入、导出数据了，对于数据库开发来说，利用图形化的界面搭建数据库是非常惬意的了。]]></description>
			<content:encoded><![CDATA[<p>Openoffice从2.0版本开始，增加了Openoffic Base组件。这个组件功能类似于MS Access，同样允许你通过ODBC 或 JDBC 连接到外部数据库。本文就Ubuntu下的ODBC连接mysql为例。<br /><span style="font-weight: bold;"></span><br /><span style="font-weight: bold;">安装 unixODBC 和 MyODBC ： </span><br />#sudo apt-get install unixodbc unixodbc-bin libmyodbc<br />其中&ldquo;unixodbc-bin&rdquo;是一系列图形化的工具，可以不安装。</p>
<p><span style="font-weight: bold;">设置unixODBC:</span><br />#sudo ODBCConfig<br />开启ODBC的控制面板，与windows的几乎一样的布局。</p>
<p>System DSN-&gt;ADD&#8230;按钮</p>
<p><img width="400" height="253" src="/UserFiles/Image/odbc_ooo/Screenshot-ODBC Data Source Administrator.png" alt="" /></p>
<p>继续ADD<br /><img width="400" height="269" src="/UserFiles/Image/odbc_ooo/Screenshot-Select a Driver....png" alt="" /></p>
<p><img width="400" height="270" src="/UserFiles/Image/odbc_ooo/Screenshot-Driver Properties 2.png" alt="" /></p>
<p>这里的Name和Description随便写就可以了,Driver 为 /usr/lib/odbc/libmyodbc.so <br />Setup 为 /usr/lib/odbc/libodbcmyS.so ，其余的默认就好了。对于其它不是Ubuntu的用户，只要确保安装了MyODBC，不妨直接搜索文件名将路径贴过来就可。结束后&ldquo;对勾&rdquo;按钮保存结束。</p>
<p><img width="400" src="/UserFiles/Image/odbc_ooo/Screenshot-Data Source Properties.png" alt="" /></p>
<p>到了这一步就没有太大难度了，Name随便，Server添数据库服务器的IP地址，Port Mysql的端口，默认3306，Database下拉列表中选择需要连接的数据库。其余空着，对勾。</p>
<p>设置成功！OK结束。</p>
<p><span style="font-weight: bold;">设置OpenOffice Base:</p>
<p><img width="400" height="258" src="/UserFiles/Image/odbc_ooo/oo1.png" alt="" /></p>
<p><span style="font-weight: bold;">这里选择&ldquo;连接到现有数据库&rdquo;下拉列表选择ODBC,我试过选择Mysql不过到头来还是通过了ODBC连接。</p>
<p><img width="400" src="/UserFiles/Image/odbc_ooo/oo2.png" alt="" /></p>
<p>如果前面ODBC设置正确，这里会出现数据源列表。</p>
<p><img width="400" src="/UserFiles/Image/odbc_ooo/oo3.png" alt="" /></p>
<p>数据库的用户名、密码，同时还有测试按钮。</p>
<p>OK,搞定！</p>
<p>现在就可以利用OpenOffice Base来直接向数据库中导入、导出数据了，对于数据库开发来说，利用图形化的界面搭建数据库是非常惬意的了。<img src="/modules/fckeditor/lib/editor/images/smiley/msn/wink_smile.gif" alt="" /><br /></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2006/01/12/%e8%ae%a9openoffic%e4%b8%8e%e4%bd%a0%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93%e5%af%b9%e6%8e%a5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Samba 3.0.10 的 MySQL 用户表验证</title>
		<link>http://www.litrin.net/2005/12/05/samba-3010-%e7%9a%84-mysql-%e7%94%a8%e6%88%b7%e8%a1%a8%e9%aa%8c%e8%af%81/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=samba-3010-%25e7%259a%2584-mysql-%25e7%2594%25a8%25e6%2588%25b7%25e8%25a1%25a8%25e9%25aa%258c%25e8%25af%2581</link>
		<comments>http://www.litrin.net/2005/12/05/samba-3010-%e7%9a%84-mysql-%e7%94%a8%e6%88%b7%e8%a1%a8%e9%aa%8c%e8%af%81/#comments</comments>
		<pubDate>Mon, 05 Dec 2005 07:31:36 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[samba]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=120</guid>
		<description><![CDATA[Samba 让 Linux 的灵活性表露无遗。在公司的局域网内部，我十分喜欢 Samba 的自由自在。 　　安装和编译的步骤并不复杂，但是需要了解为了支持 MySQL 认证，编译时需要的参数，以及配置时采用正确的参数。 编译命令： $ ./configure &#8211;with-expsam=mysql &#8211;with-mysql-prefix=/opt/mysql 如果以上命令成功的话，然后就是 make ; make install 了。然后拷贝一个 examples 下的 smb.conf 到 /usr/local/samba/lib 。用 /usr/local/samba/sbin/smbd -D 即可启动。用 smbstatus 命令可以查看 Samba 服务器的状态。 下面配置 MySQL 的支持。 和 MYSQL 相关的配置有以下几行： [global] # passdb backend = plugin:/usr/local/samba/lib/pdb/mysql.so:mysqlpassdb backend = mysql:mysqlmysql:mysql host = localhost #主机名mysql:mysql port = nnnn [...]]]></description>
			<content:encoded><![CDATA[<p>Samba 让 Linux 的灵活性表露无遗。在公司的局域网内部，我十分喜欢 Samba 的自由自在。</p>
<p>　　安装和编译的步骤并不复杂，但是需要了解为了支持 MySQL 认证，编译时需要的参数，以及配置时采用正确的参数。</p>
<p>编译命令：</p>
<p>$ ./configure &#8211;with-expsam=mysql &#8211;with-mysql-prefix=/opt/mysql</p>
<p>如果以上命令成功的话，然后就是 make ; make install 了。<br />然后拷贝一个 examples 下的 smb.conf 到 /usr/local/samba/lib 。<br />用 /usr/local/samba/sbin/smbd -D 即可启动。<br />用 smbstatus 命令可以查看 Samba 服务器的状态。</p>
<p>下面配置 MySQL 的支持。 和 MYSQL 相关的配置有以下几行：</p>
<pre>[global]</pre>
<p># passdb backend = plugin:/usr/local/samba/lib/pdb/mysql.so:mysql<br />passdb backend = mysql:mysql<br />mysql:mysql host = localhost #主机名<br />mysql:mysql port = nnnn #端口号，默认3306<br />mysql:mysql user = samba #mysql用户<br />mysql:mysql password = password #mysql密码<br />mysql:mysql database = smb_user #数据库名<br />mysql:mysql table = user #数据表，似乎没有用处</p>
<p>&#8230;&#8230;<br />　　建立 smb_user.user 表的脚本可以从 examples/pdb/mysql 目录下的 mysql.dump 导入，如果使用的版本是samba3，还需要单独手工增加&ldquo;logon_hours&quot;键值，这个目录下的 smb.conf 是一个最简单的配置，可以供参考。但是这个文件有几个地方是错的。</p>
<p>　　最主要的就是上面注释掉的那行，我发现根据这个 sample 不能使用，后来修改为简单的 <br />mysql:mysql 后就能使用了。</p>
<p>　　具体的调试还是必须看相关的日志文件，如果是数据库连接错误，相关的日志文件会报告数据库不能连接的错误。</p>
<p>　　这样，一个基于 MySQL 用户的 Samba 系统建立了起来。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果安装了swat，可以运行一下，重新格式化一下配置文件，这样看起来更方便一些。</p>
<p>　 　但是，目前没有现成的完全基于 PHP 的针对 Samba 口令的修改程序。因为 user 表中的 lm_pw 和 nt_pw 分别代表口令的散列，其算法相对比较复杂， 远远不是 PHP 和 MySQL 提供的 encrypt() md5() 之类的函数能解决的。</p>
<p>　　如果有读者已经发现或者已经研发出纯 PHP 的修改 lm_pw 和 nt_[pw 字段的程序，欢迎一起交流。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2005/12/05/samba-3010-%e7%9a%84-mysql-%e7%94%a8%e6%88%b7%e8%a1%a8%e9%aa%8c%e8%af%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql在不同操作系统下的性能</title>
		<link>http://www.litrin.net/2005/11/26/mysql%e5%9c%a8%e4%b8%8d%e5%90%8c%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e4%b8%8b%e7%9a%84%e6%80%a7%e8%83%bd/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mysql%25e5%259c%25a8%25e4%25b8%258d%25e5%2590%258c%25e6%2593%258d%25e4%25bd%259c%25e7%25b3%25bb%25e7%25bb%259f%25e4%25b8%258b%25e7%259a%2584%25e6%2580%25a7%25e8%2583%25bd</link>
		<comments>http://www.litrin.net/2005/11/26/mysql%e5%9c%a8%e4%b8%8d%e5%90%8c%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e4%b8%8b%e7%9a%84%e6%80%a7%e8%83%bd/#comments</comments>
		<pubDate>Sat, 26 Nov 2005 04:47:33 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=102</guid>
		<description><![CDATA[网上有很多关于硬件的测评，前不久，我找到了不同操作系统下Mysql的测评,比较有趣。不过讲老实话，由于我刚刚经历了数月的mysql折磨&#8212;传说中mysql的极限竟然被我遇上了（话外音：应该买彩票）。我现在似乎已经不太敢用mysql做项目了。 操作系统： &#160;&#160;&#160; gentoo (kernel 2.4.28) &#160;&#160;&#160; gentoo (kernel 2.6.10) &#160;&#160;&#160; NetBSD 2.0 &#160;&#160;&#160; FreeBSD 5.3 KSE &#160;&#160;&#160; FreeBSD 5.3 LT &#160;&#160;&#160; FreeBSD 4.11 (libc_r) &#160;&#160;&#160; FreeBSD 4.11 LT &#160;&#160;&#160; OpenBSD 3.6 &#160;&#160;&#160; Solaris 10 (b69) Super Smack 1.2测试1，2cpu下的SELECT-KEY和UPDATE-KEY的效能： 命令： super-smack /usr/share/smacks/select-key.smack 10 10000 super-smack /usr/share/smacks/update-select.smack 10 10000 SysBench 0.3.1 1M 的数据Rows测试数据库性能，同样也是1，2CPU的资料： 命令： To setup: [...]]]></description>
			<content:encoded><![CDATA[<p>网上有很多关于硬件的测评，前不久，我找到了不同操作系统下Mysql的测评,比较有趣。不过讲老实话，由于我刚刚经历了数月的mysql折磨&mdash;传说中mysql的极限竟然被我遇上了（话外音：应该买彩票）。我现在似乎已经不太敢用mysql做项目了。</p>
<p> 操作系统：<br /> &nbsp;&nbsp;&nbsp; gentoo (kernel 2.4.28)<br /> &nbsp;&nbsp;&nbsp; gentoo (kernel 2.6.10)<br /> &nbsp;&nbsp;&nbsp; NetBSD 2.0<br /> &nbsp;&nbsp;&nbsp; FreeBSD 5.3 KSE<br /> &nbsp;&nbsp;&nbsp; FreeBSD 5.3 LT<br /> &nbsp;&nbsp;&nbsp; FreeBSD 4.11 (libc_r)<br /> &nbsp;&nbsp;&nbsp; FreeBSD 4.11 LT<br /> &nbsp;&nbsp;&nbsp; OpenBSD 3.6<br /> &nbsp;&nbsp;&nbsp; Solaris 10 (b69)</p>
<p><font><strong>Super Smack 1.2测试1，2cpu下的SELECT-KEY和UPDATE-KEY的效能：</p>
<p> </strong></font> <font> </font> </p>
<p><font>命令：<br /> super-smack /usr/share/smacks/select-key.smack 10 10000</font><font></p>
<p> super-smack /usr/share/smacks/update-select.smack 10 10000</font></p>
<table width="30" cellspacing="0" cellpadding="3" border="0" align="center">
<tbody>
<tr>
<td valign="top"> <img width="416" height="264" border="0" alt="v2graphs_1-CPU-select-key.gif" src="http://www.newsforge.com/blob.pl?id=32f570dd606d7b23156f0ce9c3816ddf" /> </td>
<td width="12"> </td>
</tr>
</tbody>
</table>
<table width="30" cellspacing="0" cellpadding="3" border="0" align="center">
<tbody>
<tr>
<td valign="top"> <img width="425" height="264" border="0" alt="v2graphs_2-CPU-select-key.gif" src="http://www.newsforge.com/blob.pl?id=524a5df4c717f7e5c9cd9718af5f95d2" /> </td>
<td width="12"> </td>
</tr>
</tbody>
</table>
<table width="30" cellspacing="0" cellpadding="3" border="0" align="center">
<tbody>
<tr>
<td valign="top"> <img width="404" height="265" border="0" alt="v2graphs_1-CPU-update-select.gif" src="http://www.newsforge.com/blob.pl?id=62f1b3fb703f780850f22e092cc9a961" /> </td>
<td width="12"> </td>
</tr>
</tbody>
</table>
<table width="30" cellspacing="0" cellpadding="3" border="0" align="center">
<tbody>
<tr>
<td valign="top"> <img width="407" height="265" border="0" alt="v2graphs_2-CPU-update-select.gif" src="http://www.newsforge.com/blob.pl?id=a1797ee0512a1f242883c4e6792a61ce" /> </td>
<td width="12"> </td>
</tr>
</tbody>
</table>
<p><font><strong>SysBench 0.3.1 1M 的数据Rows测试数据库性能，同样也是1，2CPU的资料：</p>
<p> </strong></font></p>
<p><font>命令：<br /> To setup:</font></p>
<p><font>sysbench &#8211;num-threads=10 &#8211;test=oltp &#8211;mysql-host=172.16.3.7 &#8211;mysql-user=root &#8211;mysql-password=mysql &#8211;oltp-table-size=1000000 prepare</font></p>
<p><font>To run:</font></p>
<p><font>sysbench &#8211;num-threads=10 &#8211;test=oltp &#8211;mysql-host=172.16.3.7 &#8211;mysql-user=root &#8211;mysql-password=mysql &#8211;oltp-table-size=1000000 run</font></p>
<p><font>To cleanup:</font></p>
<p><font>sysbench &#8211;num-threads=10 &#8211;test=oltp &#8211;mysql-host=172.16.3.7 &#8211;mysql-user=root &#8211;mysql-password=mysql &#8211;oltp-table-size=1000000 cleanup</font></p>
<p><font>10M Rows:</font></p>
<p><font>To setup:</font></p>
<p><font>sysbench &#8211;num-threads=10 &#8211;test=oltp &#8211;mysql-host=172.16.3.7 &#8211;mysql-user=root &#8211;mysql-password=mysql &#8211;oltp-table-size=10000000 prepare</font></p>
<p><font>To run:</font></p>
<p><font>sysbench &#8211;num-threads=10 &#8211;test=oltp &#8211;mysql-host=172.16.3.7 &#8211;mysql-user=root &#8211;mysql-password=mysql &#8211;oltp-table-size=10000000 run</font></p>
<p><font>To cleanup:</font></p>
<p><font>sysbench &#8211;num-threads=10 &#8211;test=oltp &#8211;mysql-host=172.16.3.7 &#8211;mysql-user=root &#8211;mysql-password=mysql &#8211;oltp-table-size=10000000 cleanup</font></p>
<p><font><br /> </font></p>
<table width="30" cellspacing="0" cellpadding="3" border="0" align="center">
<tbody>
<tr>
<td valign="top"> <img width="404" height="265" border="0" alt="v2graphs_1-CPU-1M-rows.gif" src="http://www.newsforge.com/blob.pl?id=b0df6fd9080aff59e324040116c6a7e5" /> </td>
<td width="12"> </td>
</tr>
</tbody>
</table>
<table width="30" cellspacing="0" cellpadding="3" border="0" align="center">
<tbody>
<tr>
<td valign="top"> <img width="407" height="264" border="0" alt="v2graphs_2-CPU-1M-Rows.gif" src="http://www.newsforge.com/blob.pl?id=034921ed3ce064d0e141d50dc19a106e" /> </td>
<td width="12"> </td>
</tr>
</tbody>
</table>
<p><font><strong>同上，只是 10M 的Row<br /> </strong></font></p>
<table width="30" cellspacing="0" cellpadding="3" border="0" align="center">
<tbody>
<tr>
<td valign="top"> <img width="402" height="265" border="0" alt="v2graphs_1-CPU-10M-Rows.gif" src="http://www.newsforge.com/blob.pl?id=82311a9e7896a841032c395f270d6a0f" /> </td>
<td width="12"> </td>
</tr>
</tbody>
</table>
<table width="30" cellspacing="0" cellpadding="3" border="0" align="center">
<tbody>
<tr>
<td valign="top"> <img width="417" height="265" border="0" alt="v2graphs_2-CPU-10M-Rows.gif" src="http://www.newsforge.com/blob.pl?id=0a83d275c8c9092ea56f1ecebf239dc1" /> </td>
<td width="12"> </td>
</tr>
</tbody>
</table>
<p></p>
<p><font><strong> Super Smack的综合</strong></font></p>
<table width="30" cellspacing="0" cellpadding="3" border="0" align="center">
<tbody>
<tr>
<td valign="top"> <img width="438" height="264" border="0" alt="v2graphs-Delta-Super-Smack.gif" src="http://www.newsforge.com/blob.pl?id=a3f8bd8a134c8825bbbfa95abc8b7711" /> </td>
<td width="12"> </td>
</tr>
</tbody>
</table>
<p><font><strong> SysBench  的综合：<br /> </strong></font></p>
<p><font><br /> </font></p>
<table width="30" cellspacing="0" cellpadding="3" border="0" align="center">
<tbody>
<tr>
<td valign="top"> <img width="410" height="264" border="0" alt="v2graphs_Delta-1M-Rows.gif" src="http://www.newsforge.com/blob.pl?id=8786c155eea3d90dc415159d6c3ba8fa" /> </td>
<td width="12"> </td>
</tr>
</tbody>
</table>
<table width="30" cellspacing="0" cellpadding="3" border="0" align="center">
<tbody>
<tr>
<td valign="top"> <img width="419" height="265" border="0" alt="v2graphs_Detla-10M-Rows.gif" src="http://www.newsforge.com/blob.pl?id=fd8ebc6127827d23428906c580e6689a" /> </td>
<td width="12"> </td>
</tr>
</tbody>
</table>
<p>该测评的最终结论：<br />     Linux2.4 2.6 以及Solaris比较适合运行mysql,<font> FreeBSD 5.3 (KSE and linuxthreads), and FreeBSD 4.11 表现一般，而其余的很不适合多处理器，而个别案例说明他对于单个处理器还是有优势可言的。</p>
<p> 后面的还有很多评语，苦于本人的英语水平有限，只等说看出大概。(原文在 <a rel="nofollow" target="_blank" href="http://www.newsforge.com/article.pl?sid=04/12/27/1243207">http://www.newsforge.com/article.pl?sid=04/12/27/1243207)</a></p>
<p> 其实本人对某些测试结果持怀疑态度：<br /> &nbsp;&nbsp;&nbsp; 1.其实操作系统内核是可以根据需要进行优化和重编的，<br /> &nbsp;&nbsp;&nbsp; 2.而且对于FreeBSD的测试都是基于Linux模拟方式进行的，对于FreeBSD评价有失公平。<br /> &nbsp;&nbsp;&nbsp; 3.Solaris的磁盘格式非常适合数据库存储，本人就有采用Solairs的磁盘格式优化linux下mysql的经历。</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2005/11/26/mysql%e5%9c%a8%e4%b8%8d%e5%90%8c%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e4%b8%8b%e7%9a%84%e6%80%a7%e8%83%bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>启动多个mysqld</title>
		<link>http://www.litrin.net/2005/11/18/%e5%90%af%e5%8a%a8%e5%a4%9a%e4%b8%aamysqld/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%2590%25af%25e5%258a%25a8%25e5%25a4%259a%25e4%25b8%25aamysqld</link>
		<comments>http://www.litrin.net/2005/11/18/%e5%90%af%e5%8a%a8%e5%a4%9a%e4%b8%aamysqld/#comments</comments>
		<pubDate>Fri, 18 Nov 2005 05:54:35 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=76</guid>
		<description><![CDATA[为达到启动多个mysqld服务，只要启动时使用不同pid-file,datadir,socket,port是完全的可行。 步骤： 1、准备目录 mkdir&#160;/mysql1 chown&#160;mysql:mysql&#160;/mysql1 chmod&#160;755&#160;mysql&#160;/mysql1 2、准备新的服务要读取的数据库 cp&#160;/path/to/mysql/var&#160;/mysql1 3、创建mysqld启动脚本 #start_msyql #!/bin/sh rundir=&#34;$1&#34; port=&#34;$2&#34; echo&#160;&#34;$rundir&#34; /www/mysql/bin/safe_mysqld&#160;&#8211;user=mysql&#160;&#8211;pid-file=&#34;$rundir&#34;/mysql.pid&#160; &#8211;datadir=&#34;$rundir&#34;/var&#160;-O&#160;max_connections=500&#160;-O&#160;wait_timeout=600&#160;-O&#160;key_buffer=32M&#160; &#8211;port=&#34;$port&#34;&#160;&#8211;socket=&#34;$rundir&#34;/mysql.sock&#160;&#38; 说明： 脚本使用方法./start_mysql&#160;/mysql1&#160;3307 ./start_mysql&#160;dir&#160;port dir:指的是mysql数据库及运行时产生的文件所在目录 port:指新的mysqld监听的端口 4、创建mysqld的停止脚本 #stop_mysql #!/bin/sh rundir=&#34;$1&#34; echo&#160;&#34;$rundir&#34; /www/mysql/bin/mysqladmin&#160;-u&#160;root&#160;-p&#160;-S&#34;$rundir&#34;/mysql.sock&#160;shutdown]]></description>
			<content:encoded><![CDATA[<p>为达到启动多个mysqld服务，只要启动时使用不同pid-file,datadir,socket,port是完全的可行。 </p>
<p>步骤： <br /> <strong> 1、准备目录 </strong><br />  mkdir&nbsp;/mysql1 <br />  chown&nbsp;mysql:mysql&nbsp;/mysql1 <br />  chmod&nbsp;755&nbsp;mysql&nbsp;/mysql1 <br /> <strong> 2、准备新的服务要读取的数据库 </strong><br />  cp&nbsp;/path/to/mysql/var&nbsp;/mysql1 <br /> <strong> 3、创建mysqld启动脚本 </strong><br />  #start_msyql <br />  #!/bin/sh <br />  rundir=&quot;$1&quot; <br />  port=&quot;$2&quot; <br />  echo&nbsp;&quot;$rundir&quot; <br />  /www/mysql/bin/safe_mysqld&nbsp;&#8211;user=mysql&nbsp;&#8211;pid-file=&quot;$rundir&quot;/mysql.pid&nbsp; </p>
<p>  &#8211;datadir=&quot;$rundir&quot;/var&nbsp;-O&nbsp;max_connections=500&nbsp;-O&nbsp;wait_timeout=600&nbsp;-O&nbsp;key_buffer=32M&nbsp; </p>
<p>  &#8211;port=&quot;$port&quot;&nbsp;&#8211;socket=&quot;$rundir&quot;/mysql.sock&nbsp;&amp; <br />  说明： <br />  脚本使用方法./start_mysql&nbsp;/mysql1&nbsp;3307 <br />  ./start_mysql&nbsp;dir&nbsp;port <br />  dir:指的是mysql数据库及运行时产生的文件所在目录 <br />  port:指新的mysqld监听的端口 </p>
<p> <strong> 4、创建mysqld的停止脚本 </strong><br />  #stop_mysql <br />  #!/bin/sh <br />  rundir=&quot;$1&quot; <br />  echo&nbsp;&quot;$rundir&quot; <br />  /www/mysql/bin/mysqladmin&nbsp;-u&nbsp;root&nbsp;-p&nbsp;-S&quot;$rundir&quot;/mysql.sock&nbsp;shutdown</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2005/11/18/%e5%90%af%e5%8a%a8%e5%a4%9a%e4%b8%aamysqld/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

