<?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/"
	>

<channel>
	<title>OurMySQL</title>
	<atom:link href="http://www.ourmysql.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ourmysql.com</link>
	<description>我们致力于一个MySQL知识的分享网站</description>
	<pubDate>Tue, 09 Mar 2010 01:25:42 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Innodb 表和索引结构</title>
		<link>http://www.ourmysql.com/archives/817</link>
		<comments>http://www.ourmysql.com/archives/817#comments</comments>
		<pubDate>Tue, 09 Mar 2010 01:25:42 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL基础知识]]></category>

		<category><![CDATA[InnoDB]]></category>

		<category><![CDATA[索引]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=817</guid>
		<description><![CDATA[    因为Innodb表的数据是依赖于聚集索引顺序存放，同时聚集索引和数据一块存储，普通索引也需要存放一份聚集索引。所以对于聚集索引的设计尽量按顺序写入，必免数据分页，行迁移等对性能影响的现象。另外聚集索引要设计的尽可能短。从设计上必须锁的时间，大量随机IO的出现。]]></description>
			<content:encoded><![CDATA[<p>    <strong>表的结构：</strong></p>
<p>    对于MySQL把有的存储引擎都是把表结构的定义存放到.frm文件中。但对于Innodb表同时有一个内部的字典存放到<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>中。所以对于Innodb表不能单纯的移动.frm在不同的MySQL事例下。对于Innodb引擎的表，如果MySQL 删除相应的表或数据库，同时会删除相应的.frm及在<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>的相应的字典信息。在.frm文件只是用来定义表的结构，Innodb把数据和索引都存放到了<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>中。</p>
<p>    <strong>聚集索引和次要索引：</strong></p>
<p>    每一个Innodb表都有一个聚集索引，这个聚信索引和行数据存在一起。</p>
<p>    可以用来做聚集索引的列：</p>
<p>如果有声明了主建(primary key)，则这个列可以做为表的主建。 如果没有声明主建，MySQL会用一个唯一索引(UNIQUE)而且是不为空的列做为主建，成为该表的聚信索引。 如果没声明主建，同时也没合适的唯一的索引，Innodb内部会产生一个隐藏的聚集索引:RowID。这个RowID在Innodb的多版本中曾提到过。这个RowID是在插入时产生，并且是自增的增加。所以也是按顺序增长存放。</p>
<p>    由于聚集索引和行数据存放一起(在同一个数据页中)，所以利用聚集索引访问数据行时，非常的快，同一个数据页在访问索引时，已经把页加载到Buffer中，在访问数据时，等于了一个顺序IO的访问（<a href="http://www.ourmysql.com/archives/tag/%e5%86%85%e5%ad%98" class="st_tag internal_tag" rel="tag" title="标签 内存 下的日志">内存</a>中完成）。大多数情况下索引和数据都不在一块（MyISAM，数据和索引存到不同的文件中），而聚集索引是有结构的通常是按顺序存放，同时和数据存放在一起，利用索引索引访问大表的数据可以节省许多IO。</p>
<p>    对于Innodb次要的索引会包含聚信索引，查询在使用次要索引时，找到聚集索引信息，然后利用聚集索引信息访问行。所以，如果聚集索引过长，会造成空间浪费严重。另外，如果对表或是区间进行Count操作的话，大多数情况较短的次要索引比基于聚集索引快。对于Innodb的聚集索引选择，尽量选择比较短的列做为聚集索引列，是一个好的设计习惯。</p>
<p>    <strong>索引的物理结构：</strong></p>
<p>    Innodb的索引以B-tree的形式存到各个叶点上。索引叶点页的大小默认为16K，当有什么的索引插入叶点时，该叶点至少会保留1/16的空闲空间，用于将来该叶点的索引更新或是插入。</p>
<p>    对于顺序写入的索引（无论是递增或是递减，顺序的就行），索引叶点可以达到15/16满。如果是随机的索引写入行为，叶点只会达到1/2到15/16满。当叶点填充在1/2以下满，或是被删除到1/2下满时，Innodb会缩短索引树，试图释放该叶点，该叶点可以被继续写入数据。</p>
<p align="left"><strong>设计中的Tips：</strong></p>
<p>    因为Innodb表的数据是依赖于聚集索引顺序存放，同时聚集索引和数据一块存储，普通索引也需要存放一份聚集索引。所以对于聚集索引的设计尽量按顺序写入，必免数据分页，行迁移等对性能影响的现象。另外聚集索引要设计的尽可能短。从设计上必须锁的时间，大量随机IO的出现。</p>
<p>    如对于监控（或是股票类的信息）可以利用时间和类型构成聚集索引，让相关性高的数据尽可能位到一块。以便读取时可以利用顺序IO读取到相应的数据。最好的情况，相关性高的数据在一个Page上，这样读取的效果更好。基于Innodb聚集索引的特性，在设计上也需要考虑利用一下优势，必免其不好的一方面从而达到最佳性能。<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2008-11-18 &#8212; <a href="http://www.ourmysql.com/archives/284" title="Innodb 索引结构了解 - Innodb Index Structure">Innodb 索引结构了解 - Innodb Index Structure</a></li>
<li>2010-03-09 &#8212; <a href="http://www.ourmysql.com/archives/811" title="InnoDB线程并发检查机制">InnoDB线程并发检查机制</a></li>
<li>2009-12-20 &#8212; <a href="http://www.ourmysql.com/archives/805" title="Innodb如何使用内存">Innodb如何使用内存</a></li>
<li>2009-12-20 &#8212; <a href="http://www.ourmysql.com/archives/801" title="Innodb文件表空间结构">Innodb文件表空间结构</a></li>
<li>2009-12-12 &#8212; <a href="http://www.ourmysql.com/archives/796" title="InnoDB的”替代品”：Percona XtraDB">InnoDB的”替代品”：Percona XtraDB</a></li>
<li>2009-11-18 &#8212; <a href="http://www.ourmysql.com/archives/783" title="Memory &#038; MyISAM 引擎小注意！">Memory &#038; MyISAM 引擎小注意！</a></li>
<li>2009-09-25 &#8212; <a href="http://www.ourmysql.com/archives/743" title="Innodb表空间page size的选择">Innodb表空间page size的选择</a></li>
<li>2009-09-13 &#8212; <a href="http://www.ourmysql.com/archives/737" title="Mysql combine index">Mysql combine index</a></li>
<li>2009-09-03 &#8212; <a href="http://www.ourmysql.com/archives/732" title="MySQL InnoDB性能调整的一点实践">MySQL InnoDB性能调整的一点实践</a></li>
<li>2009-08-18 &#8212; <a href="http://www.ourmysql.com/archives/711" title="随机主键对InnoDB插入性能的影响">随机主键对InnoDB插入性能的影响</a></li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/tag/innodb" title="InnoDB" rel="tag">InnoDB</a>, <a href="http://www.ourmysql.com/archives/category/basic" title="MySQL基础知识" rel="tag">MySQL基础知识</a>, <a href="http://www.ourmysql.com/archives/tag/%e7%b4%a2%e5%bc%95" title="索引" rel="tag">索引</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/817/feed</wfw:commentRss>
		</item>
		<item>
		<title>InnoDB线程并发检查机制</title>
		<link>http://www.ourmysql.com/archives/811</link>
		<comments>http://www.ourmysql.com/archives/811#comments</comments>
		<pubDate>Tue, 09 Mar 2010 01:22:23 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL基础知识]]></category>

		<category><![CDATA[InnoDB]]></category>

		<category><![CDATA[检查]]></category>

		<category><![CDATA[线程]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=811</guid>
		<description><![CDATA[InnoDB在接受MySQL线程调用时，有一个并发线程的检查机制，通过innodb_thread_concurrency参数进行控制。如果参数设置大于0，则表示检查机制开启，允许进入的线程数就是参数的值。等于0则禁用并发检查。]]></description>
			<content:encoded><![CDATA[<p>InnoDB在接受MySQL线程调用时，有一个并发<a href="http://www.ourmysql.com/archives/tag/%e7%ba%bf%e7%a8%8b" class="st_tag internal_tag" rel="tag" title="标签 线程 下的日志">线程</a>的检查机制，通过<strong>innodb_thread_concurrency</strong>参数进行控制。如果参数设置大于0，则表示检查机制开启，允许进入的<a href="http://www.ourmysql.com/archives/tag/%e7%ba%bf%e7%a8%8b" class="st_tag internal_tag" rel="tag" title="标签 线程 下的日志">线程</a>数就是参数的值。等于0则禁用并发检查。</p>
<p>在新的MySQL线程调用Innodb接口前，Innodb会检查已经接受的请求<a href="http://www.ourmysql.com/archives/tag/%e7%ba%bf%e7%a8%8b" class="st_tag internal_tag" rel="tag" title="标签 线程 下的日志">线程</a>数，如已经超过innodb_thread_concurrency设置的限制，则该请求<a href="http://www.ourmysql.com/archives/tag/%e7%ba%bf%e7%a8%8b" class="st_tag internal_tag" rel="tag" title="标签 线程 下的日志">线程</a>会等待<strong>innodb_thread_sleep_delay</strong>微秒后尝试重新请求，如果第二次请求还是无法获得，则该<a href="http://www.ourmysql.com/archives/tag/%e7%ba%bf%e7%a8%8b" class="st_tag internal_tag" rel="tag" title="标签 线程 下的日志">线程</a>会进入<a href="http://www.ourmysql.com/archives/tag/%e7%ba%bf%e7%a8%8b" class="st_tag internal_tag" rel="tag" title="标签 线程 下的日志">线程</a>队列休眠。重试两次的机制是为了减少CPU的上下文切换的次数，以降低CPU消耗，这和Oracle中latch的spin机制是同样的道理。如果请求被Innodb接受，则会获得一个次数为<strong>innodb_concurrency_tickets</strong>(默认500次)的通行证，在次数用完之前，该<a href="http://www.ourmysql.com/archives/tag/%e7%ba%bf%e7%a8%8b" class="st_tag internal_tag" rel="tag" title="标签 线程 下的日志">线程</a>重新请求时无须再进行前面所说innodb_thread_concurrency的检查。</p>
<p>上述检查逻辑在源码<strong>storage/innobase/srv/srv0srv.c</strong>(Innodb很多参数都可以在该文件中找到定义)的<strong>srv_conc_enter_innodb</strong><a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>中，有兴趣的可以仔细阅读一下，代码比较浅显，不难理解。另外，如果是一个已经持有lock的<a href="http://www.ourmysql.com/archives/tag/%e7%ba%bf%e7%a8%8b" class="st_tag internal_tag" rel="tag" title="标签 线程 下的日志">线程</a>，则通过调用<strong>srv_conc_force_enter_innodb</strong><a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>可以无视该检查，这是为了避免<a href="http://www.ourmysql.com/archives/tag/%e7%ba%bf%e7%a8%8b" class="st_tag internal_tag" rel="tag" title="标签 线程 下的日志">线程</a>长时间持有锁影响性能，且可能增加死锁的机率。除此之外，slave线程也是有无视检查直接通行的权限。</p>
<p>简单思考一下上述机制，可以得出一个初步的推论：在数据库并发请求较小的情况下，从性能上来说禁用检查机制应该是更好的，毕竟执行检查机制本身也需要加锁(Mutex)。当并发<a href="http://www.ourmysql.com/archives/tag/%e7%ba%bf%e7%a8%8b" class="st_tag internal_tag" rel="tag" title="标签 线程 下的日志">线程</a>很高的情况下，则开启检查机制对性能更有利。至于具体innodb_thread_concurrency设置为多少，可能就需要在不同的条件下实际的做一下测试了，不同的硬件环境，不同的MySQL版本和Innodb版本，应该都会有一些区别。</p>
<p>源代码中对于innodb_thread_concurrency参数的注释如下：</p>
<pre>/* The following controls how many threads we let inside <a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">InnoDB</a> concurrently:
threads waiting for locks are not counted into the number because otherwise
we could get a deadlock. MySQL creates a thread for each user session, and
semaphore contention and convoy problems can occur withput this restriction.
Value 10 should be good if there are less than 4 processors + 4 disks in the
computer. Bigger computers need bigger values. Value 0 will disable the
concurrency check. */

ulong   srv_thread_concurrency  = 0;</pre>
<p>因为检查机制需要Mutex保护(Mutex-based Model)，所以开启检查本身也有性能消耗，并且扩展性也会受到限制，在MySQL5.4版本中引入了一种新的机制（Timer-based Model），这里就不讨论了，有兴趣的可以参考<a href="http://mikaelronstrom.blogspot.com/2009/05/mysql-54-patches-innodb-thread.html"><span style="color: #0082ff;">这里</span></a>(需要翻墙)，实际上<a href="http://www.ningoo.net/html/2009/xtradb_storage_engine.html"><span style="color: #0082ff;">XtraDB存储引擎</span></a>里已经包含Timer-based Model，通过参数<strong>innodb_thread_concurrency_timer_based</strong>可以开启，默认为OFF。在MySQL5.4的srv0srv.c的源代码中的注释中，可以看到Google和Percona的版权声明，看来MySQL5.4中吸引了很多第三方的改进代码，值得期待。<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2010-03-09 &#8212; <a href="http://www.ourmysql.com/archives/817" title="Innodb 表和索引结构">Innodb 表和索引结构</a></li>
<li>2009-12-20 &#8212; <a href="http://www.ourmysql.com/archives/805" title="Innodb如何使用内存">Innodb如何使用内存</a></li>
<li>2009-12-20 &#8212; <a href="http://www.ourmysql.com/archives/801" title="Innodb文件表空间结构">Innodb文件表空间结构</a></li>
<li>2009-12-12 &#8212; <a href="http://www.ourmysql.com/archives/796" title="InnoDB的”替代品”：Percona XtraDB">InnoDB的”替代品”：Percona XtraDB</a></li>
<li>2009-09-25 &#8212; <a href="http://www.ourmysql.com/archives/743" title="Innodb表空间page size的选择">Innodb表空间page size的选择</a></li>
<li>2009-09-03 &#8212; <a href="http://www.ourmysql.com/archives/732" title="MySQL InnoDB性能调整的一点实践">MySQL InnoDB性能调整的一点实践</a></li>
<li>2009-08-18 &#8212; <a href="http://www.ourmysql.com/archives/711" title="随机主键对InnoDB插入性能的影响">随机主键对InnoDB插入性能的影响</a></li>
<li>2009-08-18 &#8212; <a href="http://www.ourmysql.com/archives/707" title="InnoDB之Dirty Page、Redo log">InnoDB之Dirty Page、Redo log</a></li>
<li>2009-08-04 &#8212; <a href="http://www.ourmysql.com/archives/666" title="innodb相关参数">innodb相关参数</a></li>
<li>2009-08-04 &#8212; <a href="http://www.ourmysql.com/archives/645" title="InnoDB insert性能拐点测试">InnoDB insert性能拐点测试</a></li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/tag/innodb" title="InnoDB" rel="tag">InnoDB</a>, <a href="http://www.ourmysql.com/archives/category/basic" title="MySQL基础知识" rel="tag">MySQL基础知识</a>, <a href="http://www.ourmysql.com/archives/tag/%e6%a3%80%e6%9f%a5" title="检查" rel="tag">检查</a>, <a href="http://www.ourmysql.com/archives/tag/%e7%ba%bf%e7%a8%8b" title="线程" rel="tag">线程</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/811/feed</wfw:commentRss>
		</item>
		<item>
		<title>mysqldump意外终止的原因以及解决方法</title>
		<link>http://www.ourmysql.com/archives/813</link>
		<comments>http://www.ourmysql.com/archives/813#comments</comments>
		<pubDate>Sun, 07 Feb 2010 14:58:08 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL解错方案]]></category>

		<category><![CDATA[mysqldump]]></category>

		<category><![CDATA[net_write_timeout]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=813</guid>
		<description><![CDATA[mysqldump是非常重要的MySQL备份工具。然而在长年累月的使用过程中，TAOBAO多次出现了因mysqldump意外终止而导致备份失败的情况。
以下是我们经常遇到的问题：
1、Lost connection to MySQL server at ‘reading initial communication packet’：
这个主要是因为DNS不稳定导致的。如果做了网络隔离，MySQL处于一个相对安全的网络环境，那么开启skip-name-resolve选项将会最大程度避免这个问题。
2、Lost connection to MySQL server at ‘reading authorization packet’：
从MySQL获取一个可用的连接是多次握手的结果。在多次握手的过程中，网络波动会导致握手失败。增加connect_timeout可以解决这个问题；然而增加connect_timeout并不能防止网络故障的发生，反而会引起MySQL线程占用。最好的解决办法是让mysqldump重新发起连接请求。
3、Lost connection to MySQL server during query：
这个问题具备随机性，而淘宝MySQL的应用场景决定了我们无法多次备份数据以便重现问题。
然而我们注意到这个问题一般会在两种情况下会发生。一种是mysqldump **** &#124; gzip ****；另外一种是mysqldump **** &#62; /nfs-file
注意，不管是gzip还是nfs都有一种特点，那就是它们影响了mysqldump的速度。从这个角度思考，是不是mysqldump从MySQL接受数据包的速度不够快导致Lost connection to MySQL server during query错误呢？
为了定位到问题，我搭建了一个测试环境：
test@192.168.0.1：3306
CREATE TABLE `test` (
`id` bigint(20) NOT NULL auto_increment,
`b` varchar(2000) default NULL,
`c` varchar(2000) default NULL,
`d` varchar(2000) default NULL,
`e` varchar(2000) default [...]]]></description>
			<content:encoded><![CDATA[<p>mysqldump是非常重要的MySQL备份工具。然而在长年累月的使用过程中，TAOBAO多次出现了因mysqldump意外终止而导致备份失败的情况。<br />
以下是我们经常遇到的问题：</p>
<p>1、Lost connection to MySQL server at ‘reading initial communication packet’：<br />
这个主要是因为DNS不稳定导致的。如果做了网络隔离，MySQL处于一个相对<a href="http://www.ourmysql.com/archives/tag/%e5%ae%89%e5%85%a8" class="st_tag internal_tag" rel="tag" title="标签 安全 下的日志">安全</a>的网络环境，那么开启skip-name-resolve选项将会最大程度避免这个问题。</p>
<p>2、Lost connection to MySQL server at ‘reading authorization packet’：<br />
从MySQL获取一个可用的连接是多次握手的结果。在多次握手的过程中，网络波动会导致握手失败。增加connect_timeout可以解决这个问题；然而增加connect_timeout并不能防止网络故障的发生，反而会引起MySQL线程占用。最好的解决办法是让mysqldump重新发起连接请求。</p>
<p>3、Lost connection to MySQL server during query：<br />
这个问题具备随机性，而淘宝MySQL的应用场景决定了我们无法多次备份数据以便重现问题。<br />
然而我们注意到这个问题一般会在两种情况下会发生。一种是mysqldump **** | gzip ****；另外一种是mysqldump **** &gt; /nfs-file<br />
注意，不管是gzip还是nfs都有一种特点，那就是它们影响了mysqldump的速度。从这个角度思考，是不是mysqldump从MySQL接受数据包的速度不够快导致Lost connection to MySQL server during query错误呢？</p>
<p>为了定位到问题，我搭建了一个测试环境：<br />
test@192.168.0.1：3306<br />
CREATE TABLE `test` (<br />
`id` bigint(20) NOT NULL <a href="http://www.ourmysql.com/archives/tag/auto_increment" class="st_tag internal_tag" rel="tag" title="标签 auto_increment 下的日志">auto_increment</a>,<br />
`b` varchar(2000) default NULL,<br />
`c` varchar(2000) default NULL,<br />
`d` varchar(2000) default NULL,<br />
`e` varchar(2000) default NULL,<br />
PRIMARY KEY (`id`)<br />
) ENGINE=<a href="http://www.ourmysql.com/archives/tag/myisam" class="st_tag internal_tag" rel="tag" title="标签 MyISAM 下的日志">MyISAM</a> DEFAULT CHARSET=utf8;</p>
<p>insert into test(b,c,d,e) values (lpad(’a&#8217;,1900,’b&#8217;), lpad(’a&#8217;,1900,’b&#8217;), lpad(’a&#8217;,1900,’b&#8217;), lpad(’a&#8217;,1900,’b&#8217;));<br />
多次复制数据使测试环境达到一定数据量。</p>
<p>192.168.0.2：<br />
编写一个c++程序<br />
#include &lt;stdio.h&gt;<br />
#include &lt;mysql.h&gt;</p>
<p>using namespace std;</p>
<p>int main()<br />
{<br />
MYSQL conn;<br />
MYSQL_RES *result;<br />
MYSQL_ROW row;<br />
my_bool reconnect = 0;</p>
<p>mysql_init(&amp;conn);<br />
mysql_options(&amp;conn, MYSQL_OPT_RECONNECT, &amp;reconnect);</p>
<p>if(!mysql_real_connect(&amp;conn, “192.168.0.1″, “test”, “test”, “test”, 3306, NULL, 0))<br />
{<br />
fprintf(stderr, “Failed to connect to database: %s\n”, mysql_error(&amp;conn));<br />
exit(0);<br />
}<br />
else<br />
{<br />
fprintf(stdout, “Success to connect\n”);<br />
}</p>
<p>mysql_query(&amp;conn, “show variables like ‘%timeout%’”);<br />
result = mysql_use_result(&amp;conn);<br />
while(row=mysql_fetch_row(result))<br />
{<br />
fprintf(stdout, “%-10s: %s\n”, row[0], row[1]);<br />
}<br />
mysql_free_result(result);<br />
fprintf(stderr, “\n”);</p>
<p>mysql_query(&amp;conn, “select SQL_NO_CACHE * from test.test”);<br />
result = mysql_use_result(&amp;conn);<br />
while((row=mysql_fetch_row(result))!=NULL)<br />
{<br />
fprintf(stderr, “Error %d: %s\n”, mysql_errno(&amp;conn), mysql_error(&amp;conn));<br />
fprintf(stdout, “%s\n”, row[0]);<br />
sleep(100);<br />
}<br />
fprintf(stderr, “Error %d: %s\n”, mysql_errno(&amp;conn), mysql_error(&amp;conn));<br />
mysql_free_result(result);<br />
mysql_close(&amp;conn);<br />
return 1;<br />
}</p>
<p>在这段代码里，sleep函数用来模拟NFS的网络延迟和gzip的运算时间。执行一段时间之后，Lost connection to MySQL server during query出现了，程序意外终止。在数据处理足够快的情况下，又会是怎样的结果？</p>
<p>将sleep的时间改为1，重新编译后发现程序能够完整跑完。根据<a href="http://www.ourmysql.com/archives/810" target="_blank"><span style="color: #0082ff;">《MySQL Timeout解析》</span></a>上对net_write_timeout的解释，我们可以发现，mysqldump处理数据过慢（NFS、gzip引起）会导致MySQL主动断开连接，此时mysqldump就会报Lost connection to MySQL server during query错误。经过多次测试，确定这个错误是由于net_write_timeout设置过短引起。</p>
<p><!-- Generated by Simple Tags 1.2.4 - http://wordpress.org/extend/plugins/simple-tags --><br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2009-08-11 &#8212; <a href="http://www.ourmysql.com/archives/687" title="source sql文件报错">source sql文件报错</a></li>
<li>2009-06-07 &#8212; <a href="http://www.ourmysql.com/archives/570" title="mysqldump 导出触发器遇到的问题">mysqldump 导出触发器遇到的问题</a></li>
<li>2009-02-23 &#8212; <a href="http://www.ourmysql.com/archives/463" title="改良版本mysqldump来备份MYSQL数据库">改良版本mysqldump来备份MYSQL数据库</a></li>
<li>2008-10-24 &#8212; <a href="http://www.ourmysql.com/archives/181" title="mysqldump的几个主要选项探究">mysqldump的几个主要选项探究</a></li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/tag/mysqldump" title="mysqldump" rel="tag">mysqldump</a>, <a href="http://www.ourmysql.com/archives/category/debug" title="MySQL解错方案" rel="tag">MySQL解错方案</a>, <a href="http://www.ourmysql.com/archives/tag/net_write_timeout" title="net_write_timeout" rel="tag">net_write_timeout</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/813/feed</wfw:commentRss>
		</item>
		<item>
		<title>MySQL Timeout解析</title>
		<link>http://www.ourmysql.com/archives/810</link>
		<comments>http://www.ourmysql.com/archives/810#comments</comments>
		<pubDate>Sun, 07 Feb 2010 14:54:24 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL基础知识]]></category>

		<category><![CDATA[Timeout]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=810</guid>
		<description><![CDATA[“And God said, Let there be network: and there was timeout”
在使用MySQL的过程中，你是否遇到了众多让人百思不得其解的Timeout？
那么这些Timeout之后，到底是代码问题，还是不为人知的匠心独具？]]></description>
			<content:encoded><![CDATA[<p><strong>“And God said, Let there be network: and there was timeout”</strong><br />
在使用MySQL的过程中，你是否遇到了众多让人百思不得其解的Timeout？<br />
那么这些Timeout之后，到底是代码问题，还是不为人知的匠心独具？<br />
本期Out-man，讲述咱们MySQL DBA自己的Timeout。</p>
<p>先看一下比较常见的Timeout参数和相关解释：<br />
<strong>connect_timeout</strong><br />
The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake.<br />
<strong>interactive_timeout</strong><br />
The number of seconds the server waits for activity on an interactive connection before closing it.<br />
<strong>wait_timeout</strong><br />
The number of seconds the server waits for activity on a noninteractive connection before closing it.<br />
<strong>net_read_timeout</strong><br />
The number of seconds to wait for more data from a connection before aborting the read.<br />
<strong><a href="http://www.ourmysql.com/archives/tag/net_write_timeout" class="st_tag internal_tag" rel="tag" title="标签 net_write_timeout 下的日志">net_write_timeout</a></strong><br />
The number of seconds to wait for a block to be written to a connection before aborting the write.</p>
<p>从以上解释可以看出，connect_timeout在获取连接阶段（authenticate）起作用，interactive_timeout和wait_timeout在连接空闲阶段（sleep）起作用，而net_read_timeout和net_write_timeout则是在连接繁忙阶段（query）起作用。</p>
<p>获取MySQL连接是多次握手的结果，除了用户名和密码的匹配校验外，还有IP-&gt;HOST-&gt;DNS-&gt;IP验证，任何一步都可能因为网络问题导致线程阻塞。为了防止线程浪费在不必要的校验等待上，超过connect_timeout的连接请求将会被拒绝。</p>
<p>即使没有网络问题，也不能允许客户端一直占用连接。对于保持sleep状态超过了wait_timeout（或interactive_timeout，取决于CLIENT_INTERACTIVE标志）的客户端，MySQL会主动断开连接。</p>
<p>即使连接没有处于sleep状态，即客户端忙于计算或者存储数据，MySQL也选择了有条件的等待。在数据包的分发过程中，客户端可能来不及响应（发送、接收、或者处理数据包太慢）。为了保证连接不被浪费在无尽的等待中，MySQL也会选择有条件（net_read_timeout和net_write_timeout）地主动断开连接。</p>
<p>这么多Timeout足以证明MySQL是多么乐于断开连接。而乐于断开连接的背后，主要是为了防止服务端共享资源被某客户端（mysql、mysqldump、页面程序等）一直占用。</p>
<p><!-- Generated by Simple Tags 1.2.4 - http://wordpress.org/extend/plugins/simple-tags --><br />
<h3>相关文章</h3>
<ul class="related_post">
<li>目前没有相关的文章</li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/category/basic" title="MySQL基础知识" rel="tag">MySQL基础知识</a>, <a href="http://www.ourmysql.com/archives/tag/timeout" title="Timeout" rel="tag">Timeout</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/810/feed</wfw:commentRss>
		</item>
		<item>
		<title>MySQL库目录下db.opt文件的作用</title>
		<link>http://www.ourmysql.com/archives/808</link>
		<comments>http://www.ourmysql.com/archives/808#comments</comments>
		<pubDate>Sun, 07 Feb 2010 14:49:31 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL基础知识]]></category>

		<category><![CDATA[opt]]></category>

		<category><![CDATA[字符集]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=808</guid>
		<description><![CDATA[细心的朋友可能会发现有时候在某些库目录下有个 db.opt 文件，那这个文件是干什么用的呢？如果你用vi等编辑器打开看的话，内容很简单，是用来记录该库的默认字符集编码和字符集排序规则用的。也就是说如果你创建数据库指定默认字符集和排序规则，那么后续创建的表如果没有指定字符集和排序规则，那么该新建的表将采用db.opt文件中指定的属性。]]></description>
			<content:encoded><![CDATA[<p>　　细心的朋友可能会发现有时候在某些库目录下有个 db.<a href="http://www.ourmysql.com/archives/tag/opt" class="st_tag internal_tag" rel="tag" title="标签 opt 下的日志">opt</a> 文件，那这个文件是干什么用的呢？如果你用vi等编辑器打开看的话，内容很简单，是用来记录该库的默认<a href="http://www.ourmysql.com/archives/tag/%e5%ad%97%e7%ac%a6%e9%9b%86" class="st_tag internal_tag" rel="tag" title="标签 字符集 下的日志">字符集</a>编码和<a href="http://www.ourmysql.com/archives/tag/%e5%ad%97%e7%ac%a6%e9%9b%86" class="st_tag internal_tag" rel="tag" title="标签 字符集 下的日志">字符集</a>排序规则用的。也就是说如果你创建数据库指定默认<a href="http://www.ourmysql.com/archives/tag/%e5%ad%97%e7%ac%a6%e9%9b%86" class="st_tag internal_tag" rel="tag" title="标签 字符集 下的日志">字符集</a>和排序规则，那么后续创建的表如果没有指定<a href="http://www.ourmysql.com/archives/tag/%e5%ad%97%e7%ac%a6%e9%9b%86" class="st_tag internal_tag" rel="tag" title="标签 字符集 下的日志">字符集</a>和排序规则，那么该新建的表将采用db.opt文件中指定的属性。</p>
<div class="dean_ch">
<p><span class="coMULTI"><span style="color: #808080;">/*<br />
  Set table default charset, if not set</span></span></p>
<p>  SYNOPSIS<br />
    set_table_default_charset()<br />
    create_info        Table create information</p>
<p>  DESCRIPTION<br />
    If the table character set was not given explicitely,<br />
    let’s fetch the database default character set and<br />
    apply it to the table.<br />
*/</p>
<p><span class="kw4"><span style="color: #f63333;">static</span></span> <span class="kw4"><span style="color: #f63333;">void</span></span> set_table_default_charset<span class="br0"><span style="color: #66cc66;">(</span></span>THD *thd,<br />
                                      HA_CREATE_INFO *create_info, <span class="kw4"><span style="color: #f63333;">char</span></span> *db<span style="color: #66cc66;"><span class="br0">)</span><br />
<span class="br0">{</span><br />
</span>  <span style="color: #808080;"><span class="coMULTI">/*<br />
    If the table character set was not given explicitly,<br />
    let’s fetch the database default character set and<br />
    apply it to the table.<br />
  */</span><br />
</span>  <span class="kw1"><span style="color: #a1a100;">if</span></span> <span class="br0"><span style="color: #66cc66;">(</span></span>!create_info-&gt;default_table_charset<span style="color: #66cc66;"><span class="br0">)</span><br />
</span>  <span style="color: #66cc66;"><span class="br0">{</span><br />
</span>    HA_CREATE_INFO db_info;</p>
<p>    load_db_opt_by_name<span class="br0"><span style="color: #66cc66;">(</span></span>thd, db, &amp;db_info<span class="br0"><span style="color: #66cc66;">)</span></span>;</p>
<p>    create_info-&gt;default_table_charset= db_info.<span class="me1">default_table_charset</span>;<br />
  <span style="color: #66cc66;"><span class="br0">}</span><br />
<span class="br0">}</span></span></div>
<p>另外要说明的是，如果你是通过alter databases(schema) 命令更改的数据库默认属性，那么现有的表的默认<a href="http://www.ourmysql.com/archives/tag/%e5%ad%97%e7%ac%a6%e9%9b%86" class="st_tag internal_tag" rel="tag" title="标签 字符集 下的日志">字符集</a>和排序规则不受影响。</p>
<p>通过创建数据库指定数据库的默认<a href="http://www.ourmysql.com/archives/tag/%e5%ad%97%e7%ac%a6%e9%9b%86" class="st_tag internal_tag" rel="tag" title="标签 字符集 下的日志">字符集</a>和排序规则：</p>
<div class="dean_ch"><span class="kw1"><span style="color: #a1a100;">CREATE</span></span> <span class="br0"><span style="color: #66cc66;">{</span></span><span class="kw1"><span style="color: #a1a100;">DATABASE</span></span> | SCHEMA<span class="br0"><span style="color: #66cc66;">}</span></span> <span class="br0"><span style="color: #66cc66;">[</span></span><span class="kw1"><span style="color: #a1a100;">IF</span></span> <span class="kw1"><span style="color: #a1a100;">NOT</span></span> <span class="kw1"><span style="color: #a1a100;">EXISTS</span></span><span class="br0"><span style="color: #66cc66;">]</span></span> db_name<br />
    <span class="br0"><span style="color: #66cc66;">[</span></span>create_specification<span class="br0"><span style="color: #66cc66;">]</span></span> … </p>
<p>create_specification:<br />
    <span class="br0"><span style="color: #66cc66;">[</span></span><span class="kw1"><span style="color: #a1a100;">DEFAULT</span></span><span class="br0"><span style="color: #66cc66;">]</span></span> CHARACTER <span class="kw1"><span style="color: #a1a100;">SET</span></span> <span class="br0"><span style="color: #66cc66;">[</span></span>=<span class="br0"><span style="color: #66cc66;">]</span></span> charset_name<br />
  | <span class="br0"><span style="color: #66cc66;">[</span></span><span class="kw1"><span style="color: #a1a100;">DEFAULT</span></span><span class="br0"><span style="color: #66cc66;">]</span></span> COLLATE <span class="br0"><span style="color: #66cc66;">[</span></span>=<span class="br0"><span style="color: #66cc66;">]</span></span> collation_name</div>
<p>也可以通过alter database修改</p>
<div class="dean_ch"><span class="kw1"><span style="color: #a1a100;">ALTER</span></span> <span class="br0"><span style="color: #66cc66;">{</span></span><span class="kw1"><span style="color: #a1a100;">DATABASE</span></span> | SCHEMA<span class="br0"><span style="color: #66cc66;">}</span></span> <span class="br0"><span style="color: #66cc66;">[</span></span>db_name<span style="color: #66cc66;"><span class="br0">]</span><br />
</span>    alter_specification …<br />
<span class="kw1"><span style="color: #a1a100;">ALTER</span></span> <span class="br0"><span style="color: #66cc66;">{</span></span><span class="kw1"><span style="color: #a1a100;">DATABASE</span></span> | SCHEMA<span class="br0"><span style="color: #66cc66;">}</span></span> db_name<br />
    UPGRADE <span class="kw1"><span style="color: #a1a100;">DATA</span></span> DIRECTORY NAME </p>
<p>alter_specification:<br />
    <span class="br0"><span style="color: #66cc66;">[</span></span><span class="kw1"><span style="color: #a1a100;">DEFAULT</span></span><span class="br0"><span style="color: #66cc66;">]</span></span> CHARACTER <span class="kw1"><span style="color: #a1a100;">SET</span></span> <span class="br0"><span style="color: #66cc66;">[</span></span>=<span class="br0"><span style="color: #66cc66;">]</span></span> charset_name<br />
  | <span class="br0"><span style="color: #66cc66;">[</span></span><span class="kw1"><span style="color: #a1a100;">DEFAULT</span></span><span class="br0"><span style="color: #66cc66;">]</span></span> COLLATE <span class="br0"><span style="color: #66cc66;">[</span></span>=<span class="br0"><span style="color: #66cc66;">]</span></span> collation_name</div>
<h3>相关文章</h3>
<ul class="related_post">
<li>2009-07-15 &#8212; <a href="http://www.ourmysql.com/archives/625" title="数据库字符集修改">数据库字符集修改</a></li>
<li>2008-12-15 &#8212; <a href="http://www.ourmysql.com/archives/342" title="调用存储过程时报错:Illegal mix of collations">调用存储过程时报错:Illegal mix of collations</a></li>
<li>2008-12-03 &#8212; <a href="http://www.ourmysql.com/archives/314" title="深入Mysql字符集设置">深入Mysql字符集设置</a></li>
<li>2008-09-21 &#8212; <a href="http://www.ourmysql.com/archives/53" title="如何更改MySQL的默认字符集">如何更改MySQL的默认字符集</a></li>
<li>2008-09-21 &#8212; <a href="http://www.ourmysql.com/archives/49" title="小谈MySQL字符集">小谈MySQL字符集</a></li>
<li>2008-09-18 &#8212; <a href="http://www.ourmysql.com/archives/44" title="mysql连接通道中的字符集和校验规则">mysql连接通道中的字符集和校验规则</a></li>
<li>2008-09-18 &#8212; <a href="http://www.ourmysql.com/archives/41" title="mysql字符集与校验规则的设置">mysql字符集与校验规则的设置</a></li>
<li>2008-09-18 &#8212; <a href="http://www.ourmysql.com/archives/38" title="mysql的字符集与校验规则概念小介">mysql的字符集与校验规则概念小介</a></li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/category/basic" title="MySQL基础知识" rel="tag">MySQL基础知识</a>, <a href="http://www.ourmysql.com/archives/tag/opt" title="opt" rel="tag">opt</a>, <a href="http://www.ourmysql.com/archives/tag/%e5%ad%97%e7%ac%a6%e9%9b%86" title="字符集" rel="tag">字符集</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/808/feed</wfw:commentRss>
		</item>
		<item>
		<title>Innodb如何使用内存</title>
		<link>http://www.ourmysql.com/archives/805</link>
		<comments>http://www.ourmysql.com/archives/805#comments</comments>
		<pubDate>Sun, 20 Dec 2009 08:36:41 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL优化设计]]></category>

		<category><![CDATA[InnoDB]]></category>

		<category><![CDATA[内存]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=805</guid>
		<description><![CDATA[最近经常被问起Innodb是如何使用内存的。该问题早已被原MySQL公司的Vadim论证过。我这里译一下他的文章供大家参考。
]]></description>
			<content:encoded><![CDATA[<p>    来源：<a href="http://www.mysqlperformanceblog.com/2006/05/30/innodb-memory-usage/">http://www.mysqlperformanceblog.com/2006/05/30/innodb-memory-usage/</a></p>
<p>    译这个文章的目的：</p>
<p>    　　最近经常被问起Innodb是如何使用<a href="http://www.ourmysql.com/archives/tag/%e5%86%85%e5%ad%98" class="st_tag internal_tag" rel="tag" title="标签 内存 下的日志">内存</a>的。该问题早已被原MySQL公司的Vadim论证过。我这里译一下他的文章供大家参考。</p>
<p>    开始：</p>
<p>    　　这里有许多关于Innodb如何使用<a href="http://www.ourmysql.com/archives/tag/%e5%86%85%e5%ad%98" class="st_tag internal_tag" rel="tag" title="标签 内存 下的日志">内存</a>的问题。我这里将会以innodb启动时的分配情况做一个解释。一些重要的概念：</p>
<p>    　　NBLOCKS＝Innodb_buffer_pool有多个页(block)＝innodb_buffer_pool_size/16384(16k)</p>
<p>     　OS_THREADS= if ( innodb_buffer_pool_size &gt;= 1000Mb) = 50000</p>
<p>     　　else if (innodb_buffer_pool_size &gt;= 8Mb) = 10000</p>
<p>    　　 else = 1000 (该值只用在*nixes系统上，对于Windows有一点小的区别计算OS_THREADS)</p>
<p>    所以Innodb 使用的<a href="http://www.ourmysql.com/archives/tag/%e5%86%85%e5%ad%98" class="st_tag internal_tag" rel="tag" title="标签 内存 下的日志">内存</a>包括：</p>
<p>    　innodb_buffer_pool_size</p>
<p>     innodb_additional_mem_pool_size</p>
<p>     innodb_log_buffer_size</p>
<p>     adaptive index hash ,size (innodb buffer <a href="http://www.ourmysql.com/archives/tag/%e7%b4%a2%e5%bc%95" class="st_tag internal_tag" rel="tag" title="标签 索引 下的日志">索引</a>管理区)= innodb_buffer_pool_size/64</p>
<p>     system dictionary hash,size(innodb内部字典区) = 6 * innodb_buffer_pool_size/512</p>
<p>     memory for sync_array,size(用于Innodb内部syncronzation的开销)=OS_THREAD * 512</p>
<p>     memory for os_event,size(用于innodb内存的syncronzation的开销)=OS_THREAD * 216</p>
<p>     memory for locking system(<a href="http://www.ourmysql.com/archives/tag/%e5%86%85%e5%ad%98" class="st_tag internal_tag" rel="tag" title="标签 内存 下的日志">内存</a>的锁管理系统),size = 5 * 4 *NBBLOCKS</p>
<p>     最终得到innodb内存使用的计算公式为：</p>
<p>     Innodb_buffer_pool_size + innodb_log_buffer_size + innodb_additional_mem_pool_size + 812/16384 * innodb_buffer_pool_size + OS_THREADS * 368</p>
<p>     对于812/16384 * Innodb_buffer_pool_size 可以简单的用 innodb_buffer_pool_size / 20　计算，</p>
<p>    对于OS_THREADS * 368　　</p>
<p>     OS_THREADS * 368 = 17.5 MB if innodb_buffer_pool_size &gt; 1000MB</p>
<p>     OS_THREADS * 368 = 3.5 MB if innodb_buffer_pool_size &gt; 8MB</p>
<p>    举一个例子：</p>
<p>    　　 如果你的innodb_buffer_pool_size有1500MB,innodb_additional_mem_pool_size =20 MB,innodb_log_buffer_size = 8M,</p>
<p>     　　Innodb 将会向系统申请<a href="http://www.ourmysql.com/archives/tag/%e5%86%85%e5%ad%98" class="st_tag internal_tag" rel="tag" title="标签 内存 下的日志">内存</a>为= 1500M + 20M + 8M + 1500/20 M +17.5 = 1620.5M</p>
<p>    　　根据以上的条件可以算出Innodb最根本最需要多少<a href="http://www.ourmysql.com/archives/tag/%e5%86%85%e5%ad%98" class="st_tag internal_tag" rel="tag" title="标签 内存 下的日志">内存</a>，这样对于服务器的<a href="http://www.ourmysql.com/archives/tag/%e5%86%85%e5%ad%98" class="st_tag internal_tag" rel="tag" title="标签 内存 下的日志">内存</a>使用也可以有一个规划了。<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2010-03-09 &#8212; <a href="http://www.ourmysql.com/archives/817" title="Innodb 表和索引结构">Innodb 表和索引结构</a></li>
<li>2010-03-09 &#8212; <a href="http://www.ourmysql.com/archives/811" title="InnoDB线程并发检查机制">InnoDB线程并发检查机制</a></li>
<li>2009-12-20 &#8212; <a href="http://www.ourmysql.com/archives/801" title="Innodb文件表空间结构">Innodb文件表空间结构</a></li>
<li>2009-12-12 &#8212; <a href="http://www.ourmysql.com/archives/796" title="InnoDB的”替代品”：Percona XtraDB">InnoDB的”替代品”：Percona XtraDB</a></li>
<li>2009-09-25 &#8212; <a href="http://www.ourmysql.com/archives/743" title="Innodb表空间page size的选择">Innodb表空间page size的选择</a></li>
<li>2009-09-03 &#8212; <a href="http://www.ourmysql.com/archives/732" title="MySQL InnoDB性能调整的一点实践">MySQL InnoDB性能调整的一点实践</a></li>
<li>2009-08-18 &#8212; <a href="http://www.ourmysql.com/archives/711" title="随机主键对InnoDB插入性能的影响">随机主键对InnoDB插入性能的影响</a></li>
<li>2009-08-18 &#8212; <a href="http://www.ourmysql.com/archives/707" title="InnoDB之Dirty Page、Redo log">InnoDB之Dirty Page、Redo log</a></li>
<li>2009-08-04 &#8212; <a href="http://www.ourmysql.com/archives/666" title="innodb相关参数">innodb相关参数</a></li>
<li>2009-08-04 &#8212; <a href="http://www.ourmysql.com/archives/645" title="InnoDB insert性能拐点测试">InnoDB insert性能拐点测试</a></li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/tag/innodb" title="InnoDB" rel="tag">InnoDB</a>, <a href="http://www.ourmysql.com/archives/category/optimize" title="MySQL优化设计" rel="tag">MySQL优化设计</a>, <a href="http://www.ourmysql.com/archives/tag/%e5%86%85%e5%ad%98" title="内存" rel="tag">内存</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/805/feed</wfw:commentRss>
		</item>
		<item>
		<title>MySQL中的定时执行</title>
		<link>http://www.ourmysql.com/archives/803</link>
		<comments>http://www.ourmysql.com/archives/803#comments</comments>
		<pubDate>Sun, 20 Dec 2009 08:34:48 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL基础知识]]></category>

		<category><![CDATA[定时]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=803</guid>
		<description><![CDATA[MySQL中的定时执行]]></description>
			<content:encoded><![CDATA[<p>    查看event是否开启</p>
<p>    show variables like \&#8217;%sche%\&#8217;;</p>
<p>    将事件计划开启</p>
<p>    set global event_scheduler =1;</p>
<p>    创建存储过程test</p>
<p>     CREATE PROCEDURE test ()</p>
<p>     BEGIN</p>
<p>     update examinfo SET endtime = now() WHERE id = 14;</p>
<p>     END;</p>
<p>     创建event e_test</p>
<p>     create event if not exists e_test</p>
<p>     on schedule every 30 second</p>
<p>     on completion preserve</p>
<p>     do call test();</p>
<p>     每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.</p>
<p>    </p>
<p>     关闭事件任务</p>
<p>     alter event e_test ON</p>
<p>     COMPLETION PRESERVE DISABLE;</p>
<p>     开户事件任务</p>
<p>     alter event e_test ON</p>
<p>     COMPLETION PRESERVE ENABLE;</p>
<p>     以上测试均成功,测试环境为mysql 5.4.2-beta-community mysql community server(GPL)<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>目前没有相关的文章</li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/category/basic" title="MySQL基础知识" rel="tag">MySQL基础知识</a>, <a href="http://www.ourmysql.com/archives/tag/%e5%ae%9a%e6%97%b6" title="定时" rel="tag">定时</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/803/feed</wfw:commentRss>
		</item>
		<item>
		<title>Innodb文件表空间结构</title>
		<link>http://www.ourmysql.com/archives/801</link>
		<comments>http://www.ourmysql.com/archives/801#comments</comments>
		<pubDate>Sun, 20 Dec 2009 08:33:06 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL基础知识]]></category>

		<category><![CDATA[InnoDB]]></category>

		<category><![CDATA[表空间]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=801</guid>
		<description><![CDATA[表空间是在配置文件中定义的几个文件简单的耦合起来，在使用中互不可少（少一个就面临DB完蛋的危险）。对于共享表空间无法确定表所在的表空间上。]]></description>
			<content:encoded><![CDATA[<p>     Innodb的<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>是在配置文件中定义（说是<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>有时觉的有点羞愧，和Oracle比真的差太远了），这里简单列一下<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>里的基本概念及表的分配情况。</p>
<p>     <a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>是在配置文件中定义的几个文件简单的耦合起来，在使用中互不可少（少一个就面临DB完蛋的危险）。对于共享<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>无法确定表所在的<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>上。</p>
<p>     独立<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>可以做到每个表有自已的<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>（羞一下）。</p>
<p>     针对共享<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>，<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>中包括：回滚段,段（segment），区域（extent),数据页(page size)在<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>的体现为：</p>
<p>     <a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>由默认16k的数据页面（page)组成，每64个连续的页面组成一个区域（extent,Oracle里熟悉的一个东东）。对于<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>的“文件(file)”在Innodb中被称为段(segment)。 回滚段(rollback segment）是一个特殊的例子，实际上rollback segment包含了多个段。对于Innodb表的<a href="http://www.ourmysql.com/archives/tag/%e7%b4%a2%e5%bc%95" class="st_tag internal_tag" rel="tag" title="标签 索引 下的日志">索引</a>都被分配成两个段：一个是为了 B-tree 的无叶结点(non-leaf nodes)，另一个是为了叶结点(leaf nodes)。</p>
<p>     这是为了达到包含数据的叶结点的更好的顺序(sequentiality for the leaf nodes)。</p>
<p>     当<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>中的一个段增长时，<a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">InnoDB</a> 为它个别地分配最初的 32 个页面。之后 <a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">InnoDB</a> 再分配段的整个区域(extents)。<a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">InnoDB</a> 会以每次 4 个区域(extents)来增加一个大段以确保数据的良好顺序。</p>
<p>     <a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>中的某些页面包含其它页面的位图(bitmaps)，所以在 <a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">InnoDB</a> <a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>内的一些区域(extents)不能以一个整体分配给段，而只能作为个体页面。</p>
<p>     当发出一个查询 SHOW TABLE STATUS FROM … LIKE … 来询问<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>的剩余空间时，<a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">InnoDB</a> 将报告<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>中所有空闲区域(extents)中确实可用的部分。<a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">InnoDB</a> 通常会保留一些区域用于 clean-up 和其它的内部目的；这些保留的区域并不包含在剩余可用空间中。</p>
<p>     当从一个表中删除数据时，<a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">InnoDB</a> 将收缩 B-tree 中相应的<a href="http://www.ourmysql.com/archives/tag/%e7%b4%a2%e5%bc%95" class="st_tag internal_tag" rel="tag" title="标签 索引 下的日志">索引</a>。这是依赖于释放个别的页面或区域(extents)以让其他用户使用剩余空间的删除模式。 移除(drop)一个表或删除所有记录可以保证释放空间给其他用户，但是删除记录行只有在事务回滚或 consistent read 后并不需要时才会被物理的移除</p>
<p>     对于独立<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>也是存一样的概念和行为，唯一区别就是每个表的数据存到指定的<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>中，rollback segment不和数据的segment在一个竞争。使用独立<a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" class="st_tag internal_tag" rel="tag" title="标签 表空间 下的日志">表空间</a>的一个好处就是可以使数据分布相对于磁盘上更连续一点。<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2010-03-09 &#8212; <a href="http://www.ourmysql.com/archives/817" title="Innodb 表和索引结构">Innodb 表和索引结构</a></li>
<li>2010-03-09 &#8212; <a href="http://www.ourmysql.com/archives/811" title="InnoDB线程并发检查机制">InnoDB线程并发检查机制</a></li>
<li>2009-12-20 &#8212; <a href="http://www.ourmysql.com/archives/805" title="Innodb如何使用内存">Innodb如何使用内存</a></li>
<li>2009-12-12 &#8212; <a href="http://www.ourmysql.com/archives/796" title="InnoDB的”替代品”：Percona XtraDB">InnoDB的”替代品”：Percona XtraDB</a></li>
<li>2009-09-25 &#8212; <a href="http://www.ourmysql.com/archives/743" title="Innodb表空间page size的选择">Innodb表空间page size的选择</a></li>
<li>2009-09-03 &#8212; <a href="http://www.ourmysql.com/archives/732" title="MySQL InnoDB性能调整的一点实践">MySQL InnoDB性能调整的一点实践</a></li>
<li>2009-08-18 &#8212; <a href="http://www.ourmysql.com/archives/711" title="随机主键对InnoDB插入性能的影响">随机主键对InnoDB插入性能的影响</a></li>
<li>2009-08-18 &#8212; <a href="http://www.ourmysql.com/archives/707" title="InnoDB之Dirty Page、Redo log">InnoDB之Dirty Page、Redo log</a></li>
<li>2009-08-04 &#8212; <a href="http://www.ourmysql.com/archives/666" title="innodb相关参数">innodb相关参数</a></li>
<li>2009-08-04 &#8212; <a href="http://www.ourmysql.com/archives/645" title="InnoDB insert性能拐点测试">InnoDB insert性能拐点测试</a></li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/tag/innodb" title="InnoDB" rel="tag">InnoDB</a>, <a href="http://www.ourmysql.com/archives/category/basic" title="MySQL基础知识" rel="tag">MySQL基础知识</a>, <a href="http://www.ourmysql.com/archives/tag/%e8%a1%a8%e7%a9%ba%e9%97%b4" title="表空间" rel="tag">表空间</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/801/feed</wfw:commentRss>
		</item>
		<item>
		<title>MySQL修改库名</title>
		<link>http://www.ourmysql.com/archives/799</link>
		<comments>http://www.ourmysql.com/archives/799#comments</comments>
		<pubDate>Sat, 12 Dec 2009 15:29:53 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL初级应用]]></category>

		<category><![CDATA[库名]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=799</guid>
		<description><![CDATA[如果是MyISAM的话.只要修改DATA目录下面的那个库名的文件夹的名字就OK了
如果是INNODB的话.其实是无法修改库名的.网上瞎咧咧的什么RENAME DATABASE或者ALTER DATABASE都是不行的]]></description>
			<content:encoded><![CDATA[<p>    如果是MyISAM的话.只要修改DATA目录下面的那个库名的文件夹的名字就OK了</p>
<p>    如果是INNODB的话.其实是无法修改<a href="http://www.ourmysql.com/archives/tag/%e5%ba%93%e5%90%8d" class="st_tag internal_tag" rel="tag" title="标签 库名 下的日志">库名</a>的.网上瞎咧咧的什么RENAME DATABASE或者ALTER DATABASE都是不行的</p>
<p>    一种方法是比较保守的.直接把老库的内容mysqldump到新库里面</p>
<p>    还有一种类似上面方法.先alter table 的存储引擎到MyISAM,然后改了库目录的名字,然后再改回来<a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">INNODB</a>.</p>
<p>    最后一种方法还是比较好的.这边详细写一下.</p>
<p>    假设源<a href="http://www.ourmysql.com/archives/tag/%e5%ba%93%e5%90%8d" class="st_tag internal_tag" rel="tag" title="标签 库名 下的日志">库名</a>是’srcdb’,目标<a href="http://www.ourmysql.com/archives/tag/%e5%ba%93%e5%90%8d" class="st_tag internal_tag" rel="tag" title="标签 库名 下的日志">库名</a>是’trgdb’</p>
<p>    首先创建目标库</p>
<p>    create database trgdb;</p>
<p>    获取所有源库的表名</p>
<p>    use information_schema;</p>
<p>    select table_name from TABLES where TABLE_SCHEMA=’srcdb’;</p>
<p>    然后按照以下命令一个个修改</p>
<p>    rename table srcdb.[tablename] to trgdb.[tablename];</p>
<p>    一个个执行下来之后表就转到新的库里面了.<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>目前没有相关的文章</li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/category/primary" title="MySQL初级应用" rel="tag">MySQL初级应用</a>, <a href="http://www.ourmysql.com/archives/tag/%e5%ba%93%e5%90%8d" title="库名" rel="tag">库名</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/799/feed</wfw:commentRss>
		</item>
		<item>
		<title>InnoDB的”替代品”：Percona XtraDB</title>
		<link>http://www.ourmysql.com/archives/796</link>
		<comments>http://www.ourmysql.com/archives/796#comments</comments>
		<pubDate>Sat, 12 Dec 2009 15:27:39 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL优化设计]]></category>

		<category><![CDATA[InnoDB]]></category>

		<category><![CDATA[XtraDB]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=796</guid>
		<description><![CDATA[XtraDB是Percona Team在InnoDB的基础上开发出来的一个更加强大的存储引擎，它百分百的兼容InnoDB，我们可以用XtraDB来替代为MySQL的发展做出历史性贡献的InnoDB，新的XtraDB引擎将具有更加强大的性能优势，以及良好的扩展性和一些新特性。]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 14pt; line-height: 115%; font-family: SimSun; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';" lang="ZH-CN">关于</span></strong></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif';"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">是</span><span style="font-family: 'Arial','sans-serif';">Percona Team</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">在</span><span style="font-family: 'Arial','sans-serif';">InnoDB</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">的基础上开发出来的一个更加强大的存储引擎，它百分百的兼容</span><span style="font-family: 'Arial','sans-serif';">InnoDB</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">，我们可以用</span><span style="font-family: 'Arial','sans-serif';"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">来替代为</span><span style="font-family: 'Arial','sans-serif';">MySQL</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">的发展做出历史性贡献的</span><span style="font-family: 'Arial','sans-serif';">InnoDB</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">，新的</span><span style="font-family: 'Arial','sans-serif';"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">引擎将具有更加强大的性能优势，以及良好的扩展性和一些新特性。</span></span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif';">Percona</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">于</span><span style="font-family: 'Arial','sans-serif';">2008</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">年</span><span style="font-family: 'Arial','sans-serif';">12</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">月</span><span style="font-family: 'Arial','sans-serif';">16</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">日正式对外公布</span><span style="font-family: 'Arial','sans-serif';">Percona <a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">存储引擎，当时版本为</span><span style="font-family: 'Arial','sans-serif';">1.0.2-1</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">。在</span><span style="font-family: 'Arial','sans-serif';">09</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">年有相继发布了</span><span style="font-family: 'Arial','sans-serif';">release 3/4/5/8</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">，目前最新的版本为</span><span style="font-family: 'Arial','sans-serif';">Percona-<a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a> 1.0.4-8</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">。</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 14pt; line-height: 115%; font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="ZH-CN">安装</span></strong><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 14pt; line-height: 115%; font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a><span lang="ZH-CN"><span style="font-size: large; font-family: 宋体;">存储引擎</span></span></span></strong></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif';"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">的安装有这么几种：一是现成的</span><span style="font-family: 'Arial','sans-serif';"><a href="http://www.percona.com/mysql/5.1.30/RPM/"><strong><span style="color: #ff9900;"><span style="font-family: Arial;">RPMS</span></span></strong></a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">包安装，不过这些包仅限于</span><span style="font-family: 'Arial','sans-serif';">x86_64</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">位</span><span style="font-family: 'Arial','sans-serif';">RedHat/CentOS 4/5</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">系统下，而且</span><span style="font-family: 'Arial','sans-serif';">MySQL</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">的版本为</span><span style="font-family: 'Arial','sans-serif';">5.1.30</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">；还有就是通过整体编译MySQL源码包的安装,即将新的</span><span style="font-family: 'Arial','sans-serif';"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">引擎的代码整合到</span><span style="font-family: 'Arial','sans-serif';">MySQL</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">的源码中，进行重新编译。前面这两种都需要重新搭建</span><span style="font-family: 'Arial','sans-serif';">MySQL</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">数据库，例外还有一种，就是动态的将</span><span style="font-family: 'Arial','sans-serif';"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">加载进正在运行</span><span style="font-family: 'Arial','sans-serif';">MySQL</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">中，这个看上去很符合生产的要求。</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">下面我们就来介绍</span><span style="font-family: 'Arial','sans-serif';">Linux</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">系统下，源码包的安装方法，具体步骤如下：</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN"></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif';">1.</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">下载</span><span style="font-family: 'Arial','sans-serif';">MySQL</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">的源码安装包。</span><span style="font-family: 'Arial','sans-serif';"><a href="http://dev.mysql.com/downloads/mysql/5.1.html%23source"><span style="color: #0000ff;"><strong><span style="font-family: Arial;">http://dev.mysql.com/downloads/mysql/5.1.html#source</span></strong></span></a></span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif';">2.</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">下载</span><span style="font-family: 'Arial','sans-serif';">Percona <a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">的源码安装包。</span><span style="font-family: 'Arial','sans-serif';"><a href="https://launchpad.net/percona-xtradb/+download"><span style="color: #0000ff;"><strong><span style="font-family: Arial;">https://launchpad.net/percona-xtradb/+download</span></strong></span></a></span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif';">3.</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">编译安装</span><span style="font-family: 'Arial','sans-serif';">MySQL</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif';"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt;tar -xvf mysql-5.1.35.tar.gz</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif';"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt;cd mysql-5.1.35/storage</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif';"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt;tar -xvf percona-<a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">xtradb</a>-1.0.4-8.tar.gz</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif';"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt;rm -rf innobase</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif';"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt;mv percona-<a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">xtradb</a>-1.0.4-8 innobase</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif';"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt;cd ..</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif';"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt;./configure -prefix=/usr/local/mysql -with-plugins=innobase &amp;&amp; make &amp;&amp; make install</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt; cp support-files/my-medium.cnf /etc/my.cnf</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt; cd /usr/local/mysql</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt; chown -R mysql.mysql .</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt; bin/mysql_install_db -user=mysql</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt; chown -R root .</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt; chown -R mysql var</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">shell&gt; bin/mysqld_safe -user=mysql &amp;</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"></span> </p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN">4.</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-ansi-language: EN;" lang="ZH-CN">验证</span><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-ansi-language: EN;" lang="ZH-CN">引擎的</span><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN">100%</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-ansi-language: EN;" lang="ZH-CN">兼容</span><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN">Innodb</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-ansi-language: EN;" lang="ZH-CN">。</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN">shell&gt; mysql -uroot -p &lt; eiken_uat_backup.090803230101<span style="mso-spacerun: yes;"><span style="font-family: Arial;">  </span></span>(</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-ansi-language: EN;" lang="ZH-CN">将生产数据库导入新的</span><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN">MySQL)</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">mysql&gt; show create table user_role\G</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">*************************** 1. row ***************************</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: Arial;"><span style="mso-spacerun: yes;">       </span>Table: user_role</span></span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">Create Table: CREATE TABLE `user_role` (</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: Arial;"><span style="mso-spacerun: yes;">  </span>`user_name` varchar(100) NOT NULL,</span></span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: Arial;"><span style="mso-spacerun: yes;">  </span>`role_name` varchar(25) NOT NULL,</span></span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">…omit….</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">) ENGINE=InnoDB DEFAULT CHARSET=latin1</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">1 row in set (0.00 sec)</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN">(</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-ansi-language: EN;" lang="ZH-CN">经测试，所有应用一切正常。</span><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN">)</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN">mysql&gt; create table xtradb_tb(id int(3),engine_name char(120)) engine=innodb; </span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-ansi-language: EN;" lang="ZH-CN">（创建一个使用</span><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-ansi-language: EN;" lang="ZH-CN">引擎的表）</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">Query OK, 0 rows affected (0.00 sec)</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">mysql&gt; show create table xtradb_tb\G</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">*************************** 1. row ***************************</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: Arial;"><span style="mso-spacerun: yes;">       </span>Table: xtradb_tb</span></span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">Create Table: CREATE TABLE `xtradb_tb` (</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: Arial;"><span style="mso-spacerun: yes;">  </span>`id` int(3) DEFAULT NULL,</span></span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: Arial;"><span style="mso-spacerun: yes;">  </span>`engine_name` char(120) DEFAULT NULL</span></span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">) ENGINE=InnoDB DEFAULT CHARSET=latin1</span></span></span></p>
<p class="MsoNormal" style="background: #d9d9d9; margin: 0in 0in 10pt; mso-background-themecolor: background1; mso-background-themeshade: 217;"><span style="font-family: 'Arial','sans-serif'; mso-ansi-language: EN;" lang="EN"><span style="font-size: small;"><span style="font-size: x-small; font-family: Arial;">1 row in set (0.00 sec)</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="color: red; font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">（</span><span style="color: red; font-family: 'Arial','sans-serif';">NOTE</span><span style="color: red; font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">：如果你要使用</span><span style="color: red; font-family: 'Arial','sans-serif';"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="color: red; font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">这个引擎，</span><span style="color: red; font-family: 'Arial','sans-serif';">engine</span><span style="color: red; font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">的值依然要设置成</span><span style="color: red; font-family: 'Arial','sans-serif';">InnoDB</span><span style="color: red; font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">。）</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 14pt; line-height: 115%; font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">比较</span></strong><strong style="mso-bidi-font-weight: normal;"></strong></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">最后，我们简要比较一下</span><span style="font-family: 'Arial','sans-serif';"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">与</span><span style="font-family: 'Arial','sans-serif';">InnoDB</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">之间都有哪些变化。分别连上配有不同引擎的数据库服务。比较如下：</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif';">1.INFORMATION_SCHEMA</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">中的表数量发生明显变化。</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif';"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a> </span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">：</span><span style="font-family: 'Arial','sans-serif';">42</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">个（增加了</span><span style="font-family: 'Arial','sans-serif';">13</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">项</span><span style="font-family: 'Arial','sans-serif';">INNODB</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">开头的表和一个</span><span style="font-family: 'Arial','sans-serif';">XTRADB_ENHANCEMENTS</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">表，改表中记录逐一介绍了新的</span><span style="font-family: 'Arial','sans-serif';"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">对</span><span style="font-family: 'Arial','sans-serif';">InnoDB</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">所做的各项改进）</span></span></span></p>
<p class="MsoNormal" style="background: white; margin: 0in 0in 10pt; mso-background-themecolor: background1;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: 'Arial','sans-serif';">InnoDB </span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">：</span><span style="font-family: 'Arial','sans-serif';">28</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">个</span></span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: Calibri;">2. </span><span style="font-family: 'Arial','sans-serif';">SHOW INNODB STATUS</span><span style="font-family: SimSun; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN">命令的输出内容的增加。</span></span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: SimSun; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN">其中，</span><span style="font-family: 'Arial','sans-serif';">BUFFER POOL AND MEMORY</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">的内容变得更加丰富。</span></span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">同时，在输出中，我们还会发现，</span><span style="font-family: 'Arial','sans-serif';"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">在线程的投入上也有很大提高，在</span><span style="font-family: 'Arial','sans-serif';">InnoDB</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">中</span><span style="font-family: 'Arial','sans-serif';">FILE I/O</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">的线程仅为</span><span style="font-family: 'Arial','sans-serif';">4</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">个，而在</span><span style="font-family: 'Arial','sans-serif';"><a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">中你会发现为</span><span style="font-family: 'Arial','sans-serif';">10</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">个，分别是读、写的线程数都各自增加为</span><span style="font-family: 'Arial','sans-serif';">4</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">个，这对于性能会有很大提升。</span></span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-size: small;"><span style="font-size: x-small;"><strong style="mso-bidi-font-weight: normal;"><span style="color: #ffc000; font-family: 'Arial','sans-serif';">P.S.:</span></strong><span style="font-family: 'Arial','sans-serif';"> </span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">其实，第一次听到</span><span style="font-family: 'Arial','sans-serif';">InnoDB</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">的替代引擎，实在最近的一次面试的时候，当时，一听傻了，在想“</span><span style="font-family: 'Arial','sans-serif';">InnoDB</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">”什么时候除了替代品啦，我真的太孤陋寡闻了（</span><span style="font-family: 'Arial','sans-serif';">Hiro</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">听到后一定有要鄙视我了，</span><span style="font-family: 'Arial','sans-serif';">LOL:&gt;</span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">）。后来，查了一下，是真地——</span><span style="font-family: 'Arial','sans-serif';">Percona <a href="http://www.ourmysql.com/archives/tag/xtradb" class="st_tag internal_tag" rel="tag" title="标签 XtraDB 下的日志">XtraDB</a></span><span style="font-family: SimSun; mso-bidi-font-family: Arial; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial;" lang="ZH-CN">，出来了！</span></span></span></p>
<h3>相关文章</h3>
<ul class="related_post">
<li>2010-03-09 &#8212; <a href="http://www.ourmysql.com/archives/817" title="Innodb 表和索引结构">Innodb 表和索引结构</a></li>
<li>2010-03-09 &#8212; <a href="http://www.ourmysql.com/archives/811" title="InnoDB线程并发检查机制">InnoDB线程并发检查机制</a></li>
<li>2009-12-20 &#8212; <a href="http://www.ourmysql.com/archives/805" title="Innodb如何使用内存">Innodb如何使用内存</a></li>
<li>2009-12-20 &#8212; <a href="http://www.ourmysql.com/archives/801" title="Innodb文件表空间结构">Innodb文件表空间结构</a></li>
<li>2009-09-25 &#8212; <a href="http://www.ourmysql.com/archives/743" title="Innodb表空间page size的选择">Innodb表空间page size的选择</a></li>
<li>2009-09-03 &#8212; <a href="http://www.ourmysql.com/archives/732" title="MySQL InnoDB性能调整的一点实践">MySQL InnoDB性能调整的一点实践</a></li>
<li>2009-08-18 &#8212; <a href="http://www.ourmysql.com/archives/711" title="随机主键对InnoDB插入性能的影响">随机主键对InnoDB插入性能的影响</a></li>
<li>2009-08-18 &#8212; <a href="http://www.ourmysql.com/archives/707" title="InnoDB之Dirty Page、Redo log">InnoDB之Dirty Page、Redo log</a></li>
<li>2009-08-04 &#8212; <a href="http://www.ourmysql.com/archives/666" title="innodb相关参数">innodb相关参数</a></li>
<li>2009-08-04 &#8212; <a href="http://www.ourmysql.com/archives/645" title="InnoDB insert性能拐点测试">InnoDB insert性能拐点测试</a></li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/tag/innodb" title="InnoDB" rel="tag">InnoDB</a>, <a href="http://www.ourmysql.com/archives/category/optimize" title="MySQL优化设计" rel="tag">MySQL优化设计</a>, <a href="http://www.ourmysql.com/archives/tag/xtradb" title="XtraDB" rel="tag">XtraDB</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/796/feed</wfw:commentRss>
		</item>
		<item>
		<title>mysql的partition与auto_increment</title>
		<link>http://www.ourmysql.com/archives/794</link>
		<comments>http://www.ourmysql.com/archives/794#comments</comments>
		<pubDate>Sat, 12 Dec 2009 15:25:40 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL基础知识]]></category>

		<category><![CDATA[auto_increment]]></category>

		<category><![CDATA[partition]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=794</guid>
		<description><![CDATA[mysql 5.1之后，开始新增了partition功能，可以做到对代码透明的情况下进行数据分区。但是从实际使用中来看，限制颇多。]]></description>
			<content:encoded><![CDATA[<p>    <a href="http://www.ourmysql.com/?tag=mysql">mysql</a> 5.1之后，开始新增了partition功能，可以做到对代码透明的情况下进行数据分区。但是从实际使用中来看，限制颇多：</p>
<p>    如果用来分区的字段和主键不是同一个，则不能分区见很早前的一篇译文<a href="http://www.ooso.net/archives/217">mysql 5.1新功能 －－ 按日期分区</a>，如果查询条件中没有正确利用到分区的字段，那么partition的效果为零mysql 5.1.31之前的partition功能有较大的bug，会导致自增字段不能正常自增，怎么个不正常法？auto_increment值会非正常增长，突然比当前的最大id小很多，插入数据时导致duplicate key错误。</p>
<p>    这些问题都能凑合着对付过去，但是partition功能和auto_increment似乎是天生的敌人。从使用习惯上来说，我们会把auto_increment字段设置为主键，这个字段要是unique的才比较稳妥，这个情况下如果希望用其它字段来进行分区的话，几乎就成了不可能的任务。以这张表为例：</p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="font-weight: bold;">以下是代码片段：</span><br />
CREATE TABLE user (  <br />
  id int auto_increment PRIMARY KEY,<br />
  uid int,<br />
  foo varchar(32)<br />
) engine=myisam; </td>
</tr>
</tbody>
</table>
<p>    这个时候试图以uid进行分区会怎么样？是以怎样的惨淡结局收场？变通的办法是对自增字段做一些调整，从mysql的手册来看，自增字段不一定要设置成主键，仅仅是普通的index也可以，那么把表结构换成下面这个样子，就可以分区成功。</p>
<div class="igBar">
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="font-weight: bold;">以下是代码片段：</span><br />
CREATE TABLE user (  <br />
  id int <a href="http://www.ourmysql.com/archives/tag/auto_increment" class="st_tag internal_tag" rel="tag" title="标签 auto_increment 下的日志">auto_increment</a>,<br />
  uid int,<br />
  foo varchar(32),<br />
  index (id)<br />
) engine=innodb PARTITION BY HASH (uid) PARTITIONS 4; </td>
</tr>
</tbody>
</table>
</div>
<p>    我在实际环境中有一张表达到了几亿条数据，如果要用时下流行的sharding策略，必须在代码上做一些改动，当时偷了点懒直接使用partition功能，用了大半年倒也相安无事。只是分区表占用<a href="http://www.ourmysql.com/archives/tag/%e5%86%85%e5%ad%98" class="st_tag internal_tag" rel="tag" title="标签 内存 下的日志">内存</a>相当的大，如果有其它的表经常出现慢查询耗费服务器资源，那么雪崩效应就出现了，所有的查询都会堵塞变得非常慢。<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>目前没有相关的文章</li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/tag/auto_increment" title="auto_increment" rel="tag">auto_increment</a>, <a href="http://www.ourmysql.com/archives/category/basic" title="MySQL基础知识" rel="tag">MySQL基础知识</a>, <a href="http://www.ourmysql.com/archives/tag/partition" title="partition" rel="tag">partition</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/794/feed</wfw:commentRss>
		</item>
		<item>
		<title>PHP+MySQL环境下SQL Injection攻防总结</title>
		<link>http://www.ourmysql.com/archives/791</link>
		<comments>http://www.ourmysql.com/archives/791#comments</comments>
		<pubDate>Wed, 02 Dec 2009 14:49:21 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL高级应用]]></category>

		<category><![CDATA[Injection]]></category>

		<category><![CDATA[安全]]></category>

		<category><![CDATA[注入]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=791</guid>
		<description><![CDATA[程序员们写代码的时候讲究TDD（测试驱动开发）：在实现一个功能前，会先写一个测试用例，然后再编写代码使之运行通过。其实当黑客SQL Injection时，同样是一个TDD的过程：他们会先尝试着让程序报错，然后一点一点的修正参数内容，当程序再次运行成功之时，注入也就随之成功了。]]></description>
			<content:encoded><![CDATA[<p>程序员们写代码的时候讲究TDD（测试驱动开发）：在实现一个功能前，会先写一个测试用例，然后再编写代码使之运行通过。其实当黑客SQL Injection时，同样是一个TDD的过程：他们会先尝试着让程序报错，然后一点一点的修正参数内容，当程序再次运行成功之时，<a href="http://www.ourmysql.com/archives/tag/%e6%b3%a8%e5%85%a5" class="st_tag internal_tag" rel="tag" title="标签 注入 下的日志">注入</a>也就随之成功了。</p>
<p><strong>进攻：</strong></p>
<p>假设你的程序里有类似下面内容的脚本：</p>
<p>$sql = &#8220;SELECT id, title, content FROM articles WHERE id = {$_GET['id']}&#8221;;</p>
<p>正常访问时其URL如下：</p>
<p>/articles.php?id=123</p>
<p>当黑客想判断是否存在SQL Injection漏洞时，最常用的方式就是在整形ID后面加个单引号：</p>
<p>/articles.php?id=123&#8242;</p>
<p>由于我们没有过滤$_GET['id']参数，所以必然会报错，可能会是类似下面的信息：</p>
<p>supplied argument is not a valid MySQL result resource in &#8230;</p>
<p>这些信息就足以说明脚本存在漏洞了，我们可以再耍点手段：</p>
<p>/articles.php?id=0 union select 1,2,3</p>
<p>之所以select 1,2,3是因为union要求两边的字段数一致，前面是id,title,content三个字段，后面1,2,3也是三个，所以不会报语法错误，还有设置id=0是一条不存在的记录，那么查询的结果就是1,2,3，反映到网页上，原本显示id的地方会显示1，显示title的地方会显示2，显示content的地方会显示3。</p>
<p>至于如何继续利用，还要看magic_quotes_gpc的设置：</p>
<p><span style="text-decoration: underline;">当magic_quotes_gpc为off时</span>：</p>
<p>/articles.php?id=0 union select 1,2,load_file(&#8217;/etc/passwd&#8217;)</p>
<p>如此一来，/etc/passwd文件的内容就会显示在原本显示content的地方。</p>
<p><span style="text-decoration: underline;">当magic_quotes_gpc为on时</span>：</p>
<p>此时如果直接使用load_file(&#8217;/etc/passwd&#8217;)就无效了，因为单引号被转义了，但是还有办法：</p>
<p>/articles.php?id=0 union select 1,2,load_file(char(47,101,116,99,47,112,97,115,115,119,100))</p>
<p>其中的数字就是/etc/passwd字符串的ASCII，除此以为，还可以使用字符串的十六进制：</p>
<p>/articles.php?id=0 union select 1,2,load_file(0&#215;2f6574632f706173737764)</p>
<p>这里仅仅说了数字型参数的几种攻击手段，属于冰山一角，字符型参数等攻击看我文章后面的文档链接。</p>
<p><strong>防守：</strong></p>
<p>网络上有一些类似SQL <a href="http://www.ourmysql.com/archives/tag/injection" class="st_tag internal_tag" rel="tag" title="标签 Injection 下的日志">Injection</a> Firewall的软件可供使用，比如说<a href="http://www.greensql.net/" target="_blank">GreenSQL</a>，如果网站已经开始遭受SQL Injection攻击，那么使用这样的快捷工具往往会救你一命，不过这样的软件在架构上属于一个Proxy的角色，多半会影响网站并发性能，所以在选择与否这个问题上最好视客观条件来慎重决定。很多时候专业的软件并不是必须的，还有很多轻量级解决方案，下面演示一下如何使用awk来检测可能的漏洞。</p>
<p>创建detect_sql_injection.awk脚本，内容如下（如果要拷贝一下内容的话记得不要包括行号）：</p>
<p><span style="font-family: 宋体;">01 #!/bin/gawk -f<br />
02<br />
03 /\$_(GET|POST|COOKIE|REQUEST)\s*\[/ {<br />
04     IGNORECASE = 1<br />
05     if (match($0, /\$.*(sql|query)/)) {<br />
06         IGNORECASE = 0<br />
07         output()<br />
08         next<br />
09     }<br />
10 }<br />
11<br />
12 function output()<br />
13 {<br />
14     $1 = $1<br />
15     print "CRUD: " $0 "\nFILE: " FILENAME "\nLINE: " FNR "\n"<br />
16 }</span></p>
<p>此脚本可匹配出类似如下的问题代码，想要扩展匹配模式也容易，只要照猫画虎写if match语句即可。</p>
<p><span style="font-family: 宋体;">1：$sql = "SELECT * FROM users WHERE username = '{$_POST['username']}&#8217;&#8221;;<br />
2：$res = mysql_query(&#8221;SELECT * FROM users WHERE username = &#8216;{$_POST['username']}&#8217;&#8221;);</span></p>
<p>使用前别忘了先chmod +x detect_sql_injection.awk，有两种调用方法：</p>
<p><span style="font-family: 宋体;">1：./detect_sql_injection.awk /path/to/php/script/file<br />
2：find /path/to/php/script/directory -name &#8220;*.php&#8221; | xargs ./detect_sql_injection.awk</span></p>
<p>会把有问题的代码信息显示出来，样子如下：</p>
<p><span style="font-family: 宋体;">CRUD: $sql = &#8220;SELECT * FROM users WHERE username = &#8216;{$_POST['username']}&#8217;&#8221;;<br />
FILE: /path/to/file.php<br />
LINE: 123</span></p>
<p>现实环境中有很多应用这个脚本的方法，比如说通过CRON定期扫描程序源文件，或者在SVN提交时通过钩子方法自动匹配。</p>
<p>使用专业工具也好，检测脚本亦罢，都是被动的防守，问题的根本始终取决于在程序员头脑里是否有必要的安全意识，下面是一些必须要牢记的准则：</p>
<p>1：数字型参数使用类似intval，floatval这样的方法强制过滤。<br />
2：字符串型参数使用类似mysql_real_escape_string这样的方法强制过滤，并且要注意<a href="http://www.ourmysql.com/archives/tag/%e5%ad%97%e7%ac%a6%e9%9b%86" class="st_tag internal_tag" rel="tag" title="标签 字符集 下的日志">字符集</a>。<br />
3：最好抛弃mysql_query这样的拼接SQL查询方式，尽可能使用PDO的<a href="http://www.php.net/manual/en/pdo.prepare.php" target="_blank">prepare</a>绑定方式。<br />
4：使用rewrite技术隐藏真实脚本及参数的信息，通过rewrite正则也能过滤可疑的参数。<br />
5：关闭错误提示，不给攻击者提供敏感信息：display_errors=off。<br />
6：以<a href="http://www.ourmysql.com/archives/tag/%e6%97%a5%e5%bf%97" class="st_tag internal_tag" rel="tag" title="标签 日志 下的日志">日志</a>的方式记录错误信息：log_errors=on和error_log=filename，定期排查，Web日志最好也查。<br />
7：不要用具有FILE权限的账号（比如root）连接MySQL，这样就没有权限使用load_file等<a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>。<br />
8：&#8230;&#8230;</p>
<p>网站安全其实并不复杂，总结出来就是一句话：<strong>过滤输入，转义输出。</strong>其中，我们上面一直讨论的SQL Injection问题就属于过滤输入问题，至于转义输出问题，其代表是Cross-site scripting，但它不属于本文的范畴，就不多说了。</p>
<p><strong>文档：</strong></p>
<p><a href="http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string" target="_blank">addslashes() Versus mysql_real_escape_string()</a><br />
<a href="http://www.4ngel.net/article/36.htm" target="_blank">SQL Injection with MySQL</a><br />
<a href="http://hi.baidu.com/thinkinginlamp/blog/item/Advanced%20SQL%20Injection%20with%20MySQL" target="_blank">Advanced SQL Injection with MySQL</a><br />
<a href="http://www.4ngel.net/article/37.htm" target="_blank">MySQL注入中导出字段内容的研究——通过注入导出WebShell</a><br />
<h3>相关文章</h3>
<ul class="related_post">
<li>目前没有相关的文章</li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/tag/injection" title="Injection" rel="tag">Injection</a>, <a href="http://www.ourmysql.com/archives/category/advanced" title="MySQL高级应用" rel="tag">MySQL高级应用</a>, <a href="http://www.ourmysql.com/archives/tag/%e5%ae%89%e5%85%a8" title="安全" rel="tag">安全</a>, <a href="http://www.ourmysql.com/archives/tag/%e6%b3%a8%e5%85%a5" title="注入" rel="tag">注入</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/791/feed</wfw:commentRss>
		</item>
		<item>
		<title>mysql audit-访问日志记录</title>
		<link>http://www.ourmysql.com/archives/788</link>
		<comments>http://www.ourmysql.com/archives/788#comments</comments>
		<pubDate>Mon, 30 Nov 2009 08:35:11 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL高级应用]]></category>

		<category><![CDATA[audit]]></category>

		<category><![CDATA[binlog]]></category>

		<category><![CDATA[init—connect]]></category>

		<category><![CDATA[trigger]]></category>

		<category><![CDATA[日志]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=788</guid>
		<description><![CDATA[假设这么一个情况，你是某公司mysql-DBA，某日突然公司数据库中的所有被人为删了。
尽管有数据备份，但是因服务停止而造成的损失上千万，现在公司需要查出那个做删除操作的人。
但是拥有数据库操作权限的人很多，如何排查，证据又在哪？
是不是觉得无能为力？
mysql本身并没有操作审计的功能，那是不是意味着遇到这种情况只能自认倒霉呢？
本文就将讨论一种简单易行的，用于mysql访问审计的思路。]]></description>
			<content:encoded><![CDATA[<blockquote><p>背景：</p>
<p>假设这么一个情况，你是某公司mysql-DBA，某日突然公司数据库中的所有被人为删了。</p>
<p>尽管有数据备份，但是因服务停止而造成的损失上千万，现在公司需要查出那个做删除操作的人。</p>
<p>但是拥有数据库操作权限的人很多，如何排查，证据又在哪？</p>
<p>是不是觉得无能为力？</p>
<p>mysql本身并没有操作审计的功能，那是不是意味着遇到这种情况只能自认倒霉呢？</p>
<p>本文就将讨论一种简单易行的，用于mysql访问审计的思路。</p></blockquote>
<p> </p>
<p><strong>概述：</strong></p>
<p style="padding-left: 30px;"><span style="font-family: mceinline;"><span style="font-family: mceinline;">其实mysql本身已经提供了详细的sql执行记录–general log ，但是开启它有以下几个缺点</span></span></p>
<p style="padding-left: 30px;"><span style="font-family: mceinline;"><span style="font-family: mceinline;">无论sql有无语法错误，只要执行了就会记录，导致记录大量无用信息，后期的筛选有难度。</span></span></p>
<p style="padding-left: 30px;"><span style="font-family: mceinline;"><span style="font-family: mceinline;">sql并发量很大时，log的记录会对io造成一定的印象，是数据库效率降低。</span></span></p>
<p style="padding-left: 30px;"><span style="font-family: mceinline;"><span style="font-family: mceinline;">日志文件很容易快速膨胀，不妥善处理会对磁盘空间造成一定影响。</span></span></p>
<p><strong>本文观点：</strong></p>
<p style="padding-left: 30px;"><span style="font-size: x-small;"><span style="font-size: small;">使用</span><span style="font-size: small;">init-connect + <a href="http://www.ourmysql.com/archives/tag/binlog" class="st_tag internal_tag" rel="tag" title="标签 binlog 下的日志">binlog</a></span><span style="font-size: small;">的方法进行mysql的操作审计。</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">由于mysql binlog记录了所有对数据库长生实际修改的sql语句，及其执行时间，和connection_id但是却没有记录connection_id对应的详细用户信息。</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">因此本文将通过init-connect，在每次连接的初始化阶段，记录下这个连接的用户，和connection_id信息。</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">在后期审计进行行为追踪时，根据binlog记录的行为及对应的connection-id 结合 之前连接日志记录 进行分析，得出最后的结论。</span></span></p>
<p style="padding-left: 30px;"> </p>
<p style="padding-left: 30px;"> </p>
<h4><strong>正文：</strong></h4>
<p><strong>1. 设置init-connect</strong></p>
<p><strong>1.1 创建用于存放连接日志的数据库和表</strong></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">create database accesslog;</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">CREATE TABLE accesslog.accesslog (`id` int(11) primary key <a href="http://www.ourmysql.com/archives/tag/auto_increment" class="st_tag internal_tag" rel="tag" title="标签 auto_increment 下的日志">auto_increment</a>, `time` timestamp, `localname` varchar(30), `matchname` varchar(30))</span></span></p>
<p><strong>1.2 创建用户权限</strong></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">可用现成的root用户用于信息的读取</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">grant read on accesslog.* to root@localhost identified by ‘password’;</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">如果存在具有to *.* 权限的用户需要进行限制。</span></span></p>
<p><strong>1.3 设置init-connect</strong></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">在[mysqld]下添加以下设置：</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">init-connect=’insert into accesslog.accesslog values(connection_id(),user(),current_user(),now());’</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">log-bin</span></span></p>
<p><strong>1.4 重启数据库生效</strong></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">shell&gt; service mysqld restart</span></span></p>
<p style="padding-left: 30px;"> </p>
<h3>2. 记录追踪</h3>
<p><strong>2.1 thread_id确认</strong></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">假设想知道在2009年11月25日，上午9点多的时候，是谁吧test.dummy这个表给删了。可以用以下语句定位</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">mysqlbinlog –start-datetime=’2009-11-25 09:00:00′ –stop-datetime=’2009-11-25 09:00:00′  <a href="http://www.ourmysql.com/archives/tag/binlog" class="st_tag internal_tag" rel="tag" title="标签 binlog 下的日志">binlog</a>.xxxx | grep ‘dummy’ -B 5</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">会得到如下结果(可见thread_id为5)：</span></span></p>
<blockquote>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;"># at 300777</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">#091124 16:54:00 server id 10  end_log_pos 301396       Query   thread_id=5     exec_time=0     error_code=0</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">SET TIMESTAMP=1259052840;</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">drop table test.dummy;</span></span></p>
</blockquote>
<p><strong>2.2 用户确认</strong></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">thread_id 确认以后，找到元凶就只是一条sql语句的问题了。</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">select * from accesslog.accesslog where conn_id=5 ;</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">就能发现是testuser2@localhost干的了。</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><br />
</span>
</p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">+——+——————————-+——————————-+—————————–+</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">| id   | time                        | localname              | matchname          |</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">+——+——————————-+——————————-+—————————–+</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">|   5  | 2009-11-25 10:57:39 | testuser2@localhost | testuser2@%        |</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">+——+——————————-+——————————-+—————————–+</span></span></p>
<p style="padding-left: 30px;"> </p>
<h3>3. Q&amp;A</h3>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">Q：使用init-connect会影响服务器性能吗？</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">A：理论上，只会在用户每次连接时往数据库里插入一条记录，不会对数据库产生很大影响。除非连接频率非常高（当然，这个时候需要注意的就是如何进行连接复用和控制，而非是不是要用这种方法的问题了）</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">Q：access-log表如何维护?</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">A: 由于是一个log系统，推荐使用archive存储引擎，有利于数据厄压缩存放。如果数据库连接数量很大的话，建议一<a href="http://www.ourmysql.com/archives/tag/%e5%ae%9a%e6%97%b6" class="st_tag internal_tag" rel="tag" title="标签 定时 下的日志">定时</a>间做一次数据导出，然后清表。</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">Q：表有其他用途么？</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">A：有！access-log表当然不只用于审计，当然也可以用于对于数据库连接的情况进行数据分析，例如每日连接数分布图等等，只有想不到没有做不到。</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><br />
</span>
</p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">Q：会有遗漏的记录吗？</span></span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><span style="font-size: x-small;">A：会的，init-connect 是不会在super用户登录时执行的。所以access-log里不会有数据库超级用户的记录，这也是为什么我们不主张多个超级用户，并且多人使用的原因。</span></span></p>
<h3>相关文章</h3>
<ul class="related_post">
<li>2009-09-07 &#8212; <a href="http://www.ourmysql.com/archives/734" title="使用mysqldumpslow和mysqlsla分析mysql慢查询日志">使用mysqldumpslow和mysqlsla分析mysql慢查询日志</a></li>
<li>2009-08-05 &#8212; <a href="http://www.ourmysql.com/archives/668" title="MySQL的日志文件">MySQL的日志文件</a></li>
<li>2009-04-08 &#8212; <a href="http://www.ourmysql.com/archives/508" title="利用binlog来恢复数据库">利用binlog来恢复数据库</a></li>
<li>2009-02-26 &#8212; <a href="http://www.ourmysql.com/archives/473" title="mysql的日志">mysql的日志</a></li>
<li>2008-11-18 &#8212; <a href="http://www.ourmysql.com/archives/293" title="删除MYSQL BIN-LOG 日志">删除MYSQL BIN-LOG 日志</a></li>
<li>2008-11-12 &#8212; <a href="http://www.ourmysql.com/archives/281" title="MySQL在切换binlog时会阻塞更新">MySQL在切换binlog时会阻塞更新</a></li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/tag/audit" title="audit" rel="tag">audit</a>, <a href="http://www.ourmysql.com/archives/tag/binlog" title="binlog" rel="tag">binlog</a>, <a href="http://www.ourmysql.com/archives/tag/init%e2%80%94connect" title="init—connect" rel="tag">init—connect</a>, <a href="http://www.ourmysql.com/archives/category/advanced" title="MySQL高级应用" rel="tag">MySQL高级应用</a>, <a href="http://www.ourmysql.com/archives/tag/trigger" title="trigger" rel="tag">trigger</a>, <a href="http://www.ourmysql.com/archives/tag/%e6%97%a5%e5%bf%97" title="日志" rel="tag">日志</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/788/feed</wfw:commentRss>
		</item>
		<item>
		<title>MySQL: Unknown system variable &#8216;profiling&#8217;</title>
		<link>http://www.ourmysql.com/archives/785</link>
		<comments>http://www.ourmysql.com/archives/785#comments</comments>
		<pubDate>Wed, 18 Nov 2009 08:30:51 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL解错方案]]></category>

		<category><![CDATA[profiling]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=785</guid>
		<description><![CDATA[MySQL从5.0.37起，提供了profile的功能，对性能调试机器有用，不过今天在一台服务器上使用时却出了问题]]></description>
			<content:encoded><![CDATA[<p>MySQL从5.0.37起，提供了<a href="http://dev.mysql.com/doc/refman/5.0/en/show-profiles.html" target="_blank">profile</a>的功能，对性能调试机器有用，不过今天在一台服务器上使用时却出了问题：</p>
<p><strong># /usr/local/mysql/bin/mysqld -V</strong><br />
/usr/local/mysql/bin/mysqld  Ver 5.0.83-log for pc-linux-gnu on i686 (MySQL Community Server (GPL))</p>
<p>版本号是5.0.83，大于5.0.37，感觉应该可以使用profile功能，可是：</p>
<p><strong>mysql&gt; set <a href="http://www.ourmysql.com/archives/tag/profiling" class="st_tag internal_tag" rel="tag" title="标签 profiling 下的日志">profiling</a> = 1;</strong><br />
ERROR 1193 (HY000): Unknown system variable &#8216;<a href="http://www.ourmysql.com/archives/tag/profiling" class="st_tag internal_tag" rel="tag" title="标签 profiling 下的日志">profiling</a>&#8217;</p>
<p>出人意料，竟然无法使用profile功能。接着试试别的命令：</p>
<p><strong>mysql&gt; show profiles;</strong><br />
ERROR 1289 (HY000): The &#8216;SHOW PROFILES&#8217; feature is disabled; you need MySQL built with &#8216;enable-<a href="http://www.ourmysql.com/archives/tag/profiling" class="st_tag internal_tag" rel="tag" title="标签 profiling 下的日志">profiling</a>&#8217; to have it working</p>
<p>这次的错误信息相对而言更明确了，说编译时没有激活enable-profiling选项。确认一下目前的编译参数：</p>
<p><strong># cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE_LINE</strong><br />
CONFIGURE_LINE=&#8221;./configure  &#8216;&#8211;prefix=/usr/local/mysql&#8217; &#8216;&#8211;localstatedir=/usr/local/mysql/data&#8217; &#8216;&#8211;libexecdir=/usr/local/mysql/bin&#8217; &#8216;&#8211;with-comment=MySQL Community Server (GPL)&#8217; &#8216;&#8211;with-server-suffix=&#8217; &#8216;&#8211;enable-thread-safe-client&#8217; &#8216;&#8211;enable-local-infile&#8217; &#8216;&#8211;enable-assembler&#8217; &#8216;&#8211;with-pic&#8217; &#8216;&#8211;with-fast-mutexes&#8217; &#8216;&#8211;with-client-ldflags=-static&#8217; &#8216;&#8211;with-mysqld-ldflags=-static&#8217; &#8216;&#8211;with-zlib-dir=bundled&#8217; &#8216;&#8211;with-big-tables&#8217; &#8216;&#8211;with-yassl&#8217; &#8216;&#8211;with-readline&#8217; &#8216;&#8211;with-<a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">innodb</a>&#8217; &#8216;&#8211;with-ndbcluster&#8217; &#8216;&#8211;with-archive-storage-engine&#8217; &#8216;&#8211;with-blackhole-storage-engine&#8217; &#8216;&#8211;with-csv-storage-engine&#8217; &#8216;&#8211;without-example-storage-engine&#8217; &#8216;&#8211;with-federated-storage-engine&#8217; &#8216;&#8211;with-extra-charsets=all&#8217; &#8216;CC=ccache /usr/local/gcc-4.3.2/bin/gcc -static-libgcc&#8217; &#8216;CFLAGS=-g -O3 -march=i686&#8242; &#8216;CXX=ccache /usr/local/gcc-4.3.2/bin/gcc -static-libgcc&#8217; &#8216;CXXFLAGS=-g -O3 -march=i686&#8242;&#8221;</p>
<p>确实没enable-profiling选项，不过别以为简单加上这个选项之后重新编译一次就行了，实际上如果想编译成功，还得同时确保存在enable-community-features选项，可参阅<a href="http://dev.mysql.com/doc/refman/5.1/en/configure-options.html#option_configure_enable-profiling" target="_blank">官方文档</a>。如果觉得记这些编译命令太烦，那就使用新版的MySQL吧，从5.1.28版本开始，这些选项缺省就是激活的。</p>
<p><strong>补充点知识，查看nginx，apache，mysql，php的编译参数（假设都安装在/usr/local目录）：</strong></p>
<p>查看nginx编译参数：/usr/local/nginx/sbin/nginx -V<br />
查看apache编译参数：cat /usr/local/apache/build/config.nice<br />
查看mysql编译参数：cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE_LINE<br />
查看php编译参数：/usr/local/php/bin/php -i | grep configure<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2009-08-12 &#8212; <a href="http://www.ourmysql.com/archives/690" title="Unknown system variable ‘profiling’">Unknown system variable ‘profiling’</a></li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/category/debug" title="MySQL解错方案" rel="tag">MySQL解错方案</a>, <a href="http://www.ourmysql.com/archives/tag/profiling" title="profiling" rel="tag">profiling</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/785/feed</wfw:commentRss>
		</item>
		<item>
		<title>Memory &amp; MyISAM 引擎小注意！</title>
		<link>http://www.ourmysql.com/archives/783</link>
		<comments>http://www.ourmysql.com/archives/783#comments</comments>
		<pubDate>Wed, 18 Nov 2009 06:03:38 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL初级应用]]></category>

		<category><![CDATA[Memory]]></category>

		<category><![CDATA[MyISAM]]></category>

		<category><![CDATA[索引]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=783</guid>
		<description><![CDATA[今天有朋友问题，MEMORY 引擎的表查询速度竟然比MYISAM引擎慢！ 
熟读手册后，你就不用有这样的疑问了。]]></description>
			<content:encoded><![CDATA[<p>今天有朋友问题，MEMORY 引擎的表查询速度竟然比MYISAM引擎慢！<br />
熟读手册后，你就不用有这样的疑问了。</p>
<p>我们来小解决下。<br />
示例表结构：<br />
<span style="font-weight: bold; color: #0001ff;">create table t1_memory (</span><br />
<span style="font-weight: bold; color: #0001ff;">id int unsigned not null <a href="http://www.ourmysql.com/archives/tag/auto_increment" class="st_tag internal_tag" rel="tag" title="标签 auto_increment 下的日志">auto_increment</a> primary key, </span><br />
<span style="font-weight: bold; color: #0001ff;">a1 decimal(15,12), </span><br />
<span style="font-weight: bold; color: #0001ff;">a2 decimal(15,12), </span><br />
<span style="font-weight: bold; color: #0001ff;">remark varchar(200) not null, </span><br />
<span style="font-weight: bold; color: #0001ff;">key idx_u1 (a1,a2)</span><br />
<span style="font-weight: bold; color: #0001ff;">) engine memory;</span></p>
<p><span style="color: #0001ff;">create table t1_myisam (</span><br />
<span style="color: #0001ff;">id int unsigned not null <a href="http://www.ourmysql.com/archives/tag/auto_increment" class="st_tag internal_tag" rel="tag" title="标签 auto_increment 下的日志">auto_increment</a> primary key, </span><br />
<span style="color: #0001ff;">a1 decimal(15,12), </span><br />
<span style="color: #0001ff;">a2 decimal(15,12), </span><br />
<span style="color: #0001ff;">remark varchar(200) not null, </span><br />
<span style="color: #0001ff;">key idx_u1 (a1,a2)</span><br />
<span style="color: #0001ff;">) engine <a href="http://www.ourmysql.com/archives/tag/myisam" class="st_tag internal_tag" rel="tag" title="标签 MyISAM 下的日志">myisam</a>;</span><br />
<span style="font-weight: bold;">示例SQL语句：</span><br />
<span style="color: #0080ff;">select * from t1_memory where a1&gt;110 and a1&lt;111 and a2&gt;23 and a2&lt;24;</span><br />
<span style="color: #0080ff;">select * from t1_myisam where a1&gt;110 and a1&lt;111 and a2&gt;23 and a2&lt;24;</span></p>
<p><span style="font-weight: bold;">语句执行计划：</span><br />
<span style="color: #0080ff;">explain </span><br />
<span style="color: #0080ff;">select * from t1_memory where a1&gt;110 and a1&lt;111 and a2&gt;23 and a2&lt;24;</span></p>
<div id="art" style="margin: 15px;">
<h3>query result</h3>
<table border="1">
<tbody>
<tr>
<td class="medium" bgcolor="#c0c0c0">id</td>
<td class="medium" bgcolor="#c0c0c0">select_type</td>
<td class="medium" bgcolor="#c0c0c0">table</td>
<td class="medium" bgcolor="#c0c0c0">type</td>
<td class="medium" bgcolor="#c0c0c0">possible_keys</td>
<td class="medium" bgcolor="#c0c0c0">key</td>
<td class="medium" bgcolor="#c0c0c0">key_len</td>
<td class="medium" bgcolor="#c0c0c0">ref</td>
<td class="medium" bgcolor="#c0c0c0">rows</td>
<td class="medium" bgcolor="#c0c0c0">Extra</td>
</tr>
<tr>
<td class="normal" valign="top">1</td>
<td class="normal" valign="top">SIMPLE</td>
<td class="normal" valign="top">t1_memory</td>
<td class="normal" style="color: #ff0102;" valign="top">ALL</td>
<td class="normal" valign="top">idx_u1</td>
<td class="normal" valign="top">(NULL)</td>
<td class="normal" valign="top">(NULL)</td>
<td class="normal" valign="top">(NULL)</td>
<td class="normal" style="color: #ff0102;" valign="top">3000</td>
<td class="normal" valign="top">Using where</td>
</tr>
</tbody>
</table>
<p><span style="color: #0080ff;">explain </span><br />
<span style="color: #0080ff;">select * from t1_myisam where a1&gt;110 and a1&lt;111 and a2&gt;23 and a2&lt;24;</span></p>
<h3>query result</h3>
<table border="1">
<tbody>
<tr>
<td class="medium" bgcolor="#c0c0c0">id</td>
<td class="medium" bgcolor="#c0c0c0">select_type</td>
<td class="medium" bgcolor="#c0c0c0">table</td>
<td class="medium" bgcolor="#c0c0c0">type</td>
<td class="medium" bgcolor="#c0c0c0">possible_keys</td>
<td class="medium" bgcolor="#c0c0c0">key</td>
<td class="medium" bgcolor="#c0c0c0">key_len</td>
<td class="medium" bgcolor="#c0c0c0">ref</td>
<td class="medium" bgcolor="#c0c0c0">rows</td>
<td class="medium" bgcolor="#c0c0c0">Extra</td>
</tr>
<tr>
<td class="normal" valign="top">1</td>
<td class="normal" valign="top">SIMPLE</td>
<td class="normal" valign="top">t1_myisam</td>
<td class="normal" style="color: #ff0102;" valign="top">range</td>
<td class="normal" valign="top">idx_u1</td>
<td class="normal" valign="top">idx_u1</td>
<td class="normal" valign="top">9</td>
<td class="normal" valign="top">(NULL)</td>
<td class="normal" style="color: #ff0102;" valign="top">1</td>
<td class="normal" valign="top">Using where</td>
</tr>
</tbody>
</table>
<p><span style="color: #ff0102; font-style: italic;">根本原因就是默认MEMORY 引擎采用HASH索引， 所以对于RANGE INDEX 来说，我们要修改成BTREE索引。</span><br />
<span style="font-weight: bold;">解决办法：</span><br />
变化<a href="http://www.ourmysql.com/archives/tag/%e7%b4%a2%e5%bc%95" class="st_tag internal_tag" rel="tag" title="标签 索引 下的日志">索引</a>类型<br />
<span style="color: #0080ff;">alter table t1_memory drop key idx_u1, add key idx_u1 using btree (a1,a2);</span></p>
<p>优化后执行计划：<br />
<span style="color: #0080ff;">explain </span><br />
<span style="color: #0080ff;">select * from t1_memory where a1&gt;110 and a1&lt;111 and a2&gt;23 and a2&lt;24;</span></p>
<h3>query result</h3>
<table border="1">
<tbody>
<tr>
<td class="medium" bgcolor="#c0c0c0">id</td>
<td class="medium" bgcolor="#c0c0c0">select_type</td>
<td class="medium" bgcolor="#c0c0c0">table</td>
<td class="medium" bgcolor="#c0c0c0">type</td>
<td class="medium" bgcolor="#c0c0c0">possible_keys</td>
<td class="medium" bgcolor="#c0c0c0">key</td>
<td class="medium" bgcolor="#c0c0c0">key_len</td>
<td class="medium" bgcolor="#c0c0c0">ref</td>
<td class="medium" bgcolor="#c0c0c0">rows</td>
<td class="medium" bgcolor="#c0c0c0">Extra</td>
</tr>
<tr>
<td class="normal" valign="top">1</td>
<td class="normal" valign="top">SIMPLE</td>
<td class="normal" valign="top">t1_memory</td>
<td class="normal" style="color: #ff0102;" valign="top">range</td>
<td class="normal" valign="top">idx_u1</td>
<td class="normal" valign="top">idx_u1</td>
<td class="normal" valign="top">9</td>
<td class="normal" valign="top">(NULL)</td>
<td class="normal" style="color: #ff0102;" valign="top">2</td>
<td class="normal" valign="top">Using where</td>
</tr>
</tbody>
</table>
<p>看到了吧，咱也用上了<a href="http://www.ourmysql.com/archives/tag/%e7%b4%a2%e5%bc%95" class="st_tag internal_tag" rel="tag" title="标签 索引 下的日志">索引</a>。哈哈。</p></div>
<h3>相关文章</h3>
<ul class="related_post">
<li>2009-07-15 &#8212; <a href="http://www.ourmysql.com/archives/623" title="memory型表支持Hash索引">memory型表支持Hash索引</a></li>
<li>2008-11-18 &#8212; <a href="http://www.ourmysql.com/archives/287" title="MySQL MyIsam 存储引擎索引长度限制测试记录">MySQL MyIsam 存储引擎索引长度限制测试记录</a></li>
<li>2008-10-24 &#8212; <a href="http://www.ourmysql.com/archives/191" title="MySQL MyIsam 存储引擎索引长度限制测试记录">MySQL MyIsam 存储引擎索引长度限制测试记录</a></li>
<li>2010-03-09 &#8212; <a href="http://www.ourmysql.com/archives/817" title="Innodb 表和索引结构">Innodb 表和索引结构</a></li>
<li>2009-09-13 &#8212; <a href="http://www.ourmysql.com/archives/737" title="Mysql combine index">Mysql combine index</a></li>
<li>2009-07-17 &#8212; <a href="http://www.ourmysql.com/archives/631" title="查看索引使用情况">查看索引使用情况</a></li>
<li>2009-07-13 &#8212; <a href="http://www.ourmysql.com/archives/616" title="MyISAM和InnoDB的插入性能测试">MyISAM和InnoDB的插入性能测试</a></li>
<li>2009-07-13 &#8212; <a href="http://www.ourmysql.com/archives/614" title="Memory存储引擎表大小限制">Memory存储引擎表大小限制</a></li>
<li>2009-06-30 &#8212; <a href="http://www.ourmysql.com/archives/601" title="mysql索引简单介绍">mysql索引简单介绍</a></li>
<li>2009-05-01 &#8212; <a href="http://www.ourmysql.com/archives/551" title="mysql索引的一个技巧">mysql索引的一个技巧</a></li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/tag/memory" title="Memory" rel="tag">Memory</a>, <a href="http://www.ourmysql.com/archives/tag/myisam" title="MyISAM" rel="tag">MyISAM</a>, <a href="http://www.ourmysql.com/archives/category/primary" title="MySQL初级应用" rel="tag">MySQL初级应用</a>, <a href="http://www.ourmysql.com/archives/tag/%e7%b4%a2%e5%bc%95" title="索引" rel="tag">索引</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/783/feed</wfw:commentRss>
		</item>
		<item>
		<title>MySQL服务启动脚本完全解析</title>
		<link>http://www.ourmysql.com/archives/779</link>
		<comments>http://www.ourmysql.com/archives/779#comments</comments>
		<pubDate>Sun, 15 Nov 2009 10:26:29 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL基础知识]]></category>

		<category><![CDATA[启动]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=779</guid>
		<description><![CDATA[如何启动mysql服务器？相信很多人的第一反应是 service mysql start(根据启动脚本的名称而异，有些可能是mysqld)。
那这句命令到底做了什么？“调用了/etc/init.d/mysql 这么一个脚本！”SA和DBA们异口同声的回答。
那这个脚本到底做了什么？相信大多数人很难给出一个很详细的回答。本文就将为你详细解释这一条命令背后所隐藏的秘密。]]></description>
			<content:encoded><![CDATA[<p><strong>概述</strong><br />
<span><span><span style="color: #0000ff;">如何<a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" class="st_tag internal_tag" rel="tag" title="标签 启动 下的日志">启动</a>mysql服务器？</span>相信很多人的第一反应是 service mysql start(<em>根据<a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" class="st_tag internal_tag" rel="tag" title="标签 启动 下的日志">启动</a>脚本的名称而异，有些可能是mysqld</em>)。<br />
<span style="color: #0000ff;">那这句命令到底做了什么？</span>“调用了/etc/init.d/mysql 这么一个脚本！”SA和DBA们异口同声的回答。<br />
<span style="color: #0000ff;">那这个脚本到底做了什么？</span>相信大多数人很难给出一个很详细的回答。本文就将为你详细解释这一条命令背后所隐藏的秘密。</span></span></p>
<li><span><span>mysql启动脚本（后称mysql_server）是一个位于/etc/init.d下的用于mysql服务器<a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" class="st_tag internal_tag" rel="tag" title="标签 启动 下的日志">启动</a>，关闭，重启操作的shell脚本。由官方提供。</span></span></li>
<li><span><span>整个脚本<span style="text-decoration: underline;">共162行。包含5个函数，调用2个外部shel</span>l。属于一个轻量级的<a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" class="st_tag internal_tag" rel="tag" title="标签 启动 下的日志">启动</a>脚本。<br />
</span></span></p>
<blockquote><p><span><span><strong>脚本初始化部分</strong><br />
1个函数声明，2个外部shell调用，4个变量初始化<br />
<strong>外部shell的调用：</strong></span></span></p>
<p style="padding-left: 30px;"><span><span>/etc/rc.d/init.d/functions：linux提供的<a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" class="st_tag internal_tag" rel="tag" title="标签 启动 下的日志">启动</a>服务的一些函数<br />
/etc/sysconfig/network：主机的网络配置</span></span></p>
<p><span><strong><span><a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>get_mysql_option()（line25-44）：</span></strong></span>
</p>
<p style="padding-left: 30px;"><span><span><strong>用途：</strong><br />
获取VARNAME相应变量的设定值<br />
<strong>接受参数：</strong><br />
FILE my.cnf的路径<br />
VARNAME 需要获得的变量名<br />
DEFAULT 变量的默认值<br />
<strong>返回参数：</strong><br />
VARNAME对应的值<br />
<strong>行为：</strong><br />
line26：调用sed命令，搜索出现”var=xxx”的行，<span style="color: #ff0000;">返回最后一个VARNAME的值</span>，<br />
line27-30：如果cnf中没有设定，则返回DEFAUL值。<br />
line32-42：去除包裹在值外面的双引号，单引号，行尾的注释</span></span></p>
<p><span><strong><span>变量初始化：</span></strong></span>
</p>
<p style="padding-left: 30px;"><span><span>行为：<br />
line46-47：调用<a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>get_mysql_option获得datadir变量的值，<span style="color: #ff0000;">默认值为/var/lib/mysql</span><br />
line48-49：调用<a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>get_mysql_option获得socket变量的值，<span style="color: #ff0000;">默认值为$datadir/mysql.sock</span><br />
line50-51：调用<a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>get_mysql_option获得log-error变量的值，<span style="color: #ff0000;">默认值为/var/log/mysqld.log</span><br />
line52-53：调用<a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>get_mysql_option获得pid-file变量的值，<span style="color: #ff0000;">默认值为/var/run/mysqld/mysqld.pid</span></span></span></p>
</blockquote>
<blockquote><p><span><span><strong>start部分</strong><br />
用于<a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" class="st_tag internal_tag" rel="tag" title="标签 启动 下的日志">启动</a>mysql服务器</span></span></p>
<p style="padding-left: 30px;"><span><span>line56-69：初始化error-log<br />
line74： 用mysqld_safe 启动/usr/bin/mysqld_safe –defaults-file=/etc/my.cnf –pid-file=”$mypidfile” –log-error=”$errlogfile” &gt;/dev/null 2&gt;&amp;1 &amp;<br />
line79-95：<span style="color: #ff0000;">循环30次，每秒一次</span>，使用一个不存在用户调用mysqladmin ping，判断返回值是否是“Access denied”，是则说明服务器正常<a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" class="st_tag internal_tag" rel="tag" title="标签 启动 下的日志">启动</a>，用/bin/true通知用户<a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" class="st_tag internal_tag" rel="tag" title="标签 启动 下的日志">启动</a>成功。30次（30秒）尝试后仍不成功，则用/bin/false通知用户<a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" class="st_tag internal_tag" rel="tag" title="标签 启动 下的日志">启动</a>不成功。<br />
line96： 如果<a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" class="st_tag internal_tag" rel="tag" title="标签 启动 下的日志">启动</a>成功，创建一个/var/lock/subsys/mysqld锁文件。</span></span></p>
</blockquote>
<blockquote><p><span><span><strong>stop部分</strong><br />
用于关闭mysql服务器</span></span></p>
<p style="padding-left: 30px;"><span><span>line101：通过cat “$mypidfile”获得mysql-server的进程号。<br />
line102：如果正确得到进程号，跳转到line103，如果得不到调到<a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>结尾。<br />
line103：使用以下命令关闭服务器/bin/kill “$MYSQLPID” &gt;/dev/null 2&gt;&amp;1<br />
line105：<span style="color: #ff0000;">循环60次，每秒一次</span>，每次使用/bin/kill -0 “$MYSQLPID” &gt;/dev/null 2&gt;&amp;1 命令再次尝试关闭。如果关闭成功，<span style="color: #ff0000;">删除/var/lock/subsys/mysqld文件，socket文件</span>，用/bin/true通知用户<a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" class="st_tag internal_tag" rel="tag" title="标签 启动 下的日志">启动</a>成功。60次（60秒）尝试后仍不成功，则用/bin/false通知用户<a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" class="st_tag internal_tag" rel="tag" title="标签 启动 下的日志">启动</a>不成功。</span></span></p>
</blockquote>
<blockquote><p><span><span><strong>restart部分</strong><br />
重启mysql服务器</span></span></p>
<p style="padding-left: 30px;"><span><span>line131-134：依次调用stop和start函数</span></span></p>
</blockquote>
<blockquote><p><span><span><strong>condrestart部分</strong><br />
存在文件锁才进行重启，先判断是否存在/var/lock/subsys/mysqld，如果存在，重启mysql服务器</span></span></p></blockquote>
</li>
<h3>相关文章</h3>
<ul class="related_post">
<li>目前没有相关的文章</li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/category/basic" title="MySQL基础知识" rel="tag">MySQL基础知识</a>, <a href="http://www.ourmysql.com/archives/tag/%e5%90%af%e5%8a%a8" title="启动" rel="tag">启动</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/779/feed</wfw:commentRss>
		</item>
		<item>
		<title>教你写MySQL UDF</title>
		<link>http://www.ourmysql.com/archives/777</link>
		<comments>http://www.ourmysql.com/archives/777#comments</comments>
		<pubDate>Tue, 10 Nov 2009 14:54:07 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL高级应用]]></category>

		<category><![CDATA[UDF]]></category>

		<category><![CDATA[函数]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=777</guid>
		<description><![CDATA[从名字上可以得知UDF（user define function)为用户自定义函数。UDF在一定程度上可以使得普通用户定制自己的MySQL函数库，减少对内建函数的依赖。UDF 的功能还是非常强大的。]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: small;"><span style="font-size: x-small;">第一次听说UDF是，一片懵懂。还被一个半桶水的培训师忽悠说是存储<a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>即是UDF。现在想来真是匪夷所思，害人不浅。</span></span></p>
<p><span style="font-size: small;"><br />
</span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">从名字上可以得知UDF（user define function)为用户自定义<a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>。UDF在一定程度上可以使得普通用户定制自己的MySQL函数库，减少对内建函数的依赖。UDF 的功能还是非常强大的。</span></span></p>
<p><span style="font-size: small;"><br />
</span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">各类技术人员都可以开发相应的UDF。</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">管理员可以开发一些与系统交互的UDF。而开发人员可将常用功能用UDF替代存储<a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>，这样可以大幅提高执行速度和效率。</span></span></p>
<p><span style="font-size: small;"><br />
</span></p>
<p><span style="font-size: small;"><br />
</span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">这篇BLOG的目的想给希望编写UDF的读者提供一些帮助，但读者应该根据自己的需要添加某些具体<a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" class="st_tag internal_tag" rel="tag" title="标签 函数 下的日志">函数</a>。</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">现在直入话题，MySQL手册上确实提供了有关MySQL UDF的一些规则。读者可以参考</span><a href="http://www.mysqlsystems.com/manual/refman51zh/extending-mysql.html#adding-functions"><strong><span style="font-size: x-small; color: #666666;">链接</span></strong></a><span style="font-size: x-small;">。<br />
</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">咱们分4步骤创建一个UDF：</span></span></p>
<ol>
<li><span style="font-size: small;"><span style="font-size: x-small;">编写代码</span></span></li>
<li><span style="font-size: small;"><span style="font-size: x-small;">编译</span></span></li>
<li><span style="font-size: small;"><span style="font-size: x-small;">安装</span></span></li>
<li><span style="font-size: small;"><span style="font-size: x-small;">使用</span></span></li>
</ol>
<p><span style="font-size: small;"><span style="font-size: x-small;">下面给出一个简单的UDF。其作用就是往error日志里面写入语句。为了做这个实验，我们将使用如下平台：</span></span></p>
<ul>
<li><span style="font-size: small;"><span style="font-size: x-small;">OS：OpenSolaris，</span></span></li>
<li><span style="font-size: small;"><span style="font-size: x-small;">DB：MySQL 5.1.39</span></span></li>
<li><span style="font-size: small;"><span style="font-size: x-small;">C compiler: Sun C<br />
</span></span></li>
</ul>
<p><span style="font-size: small;"><span style="font-size: x-small;">实例代码如下：</span></span></p>
<table style="height: 1598px;" lang="c" border="0" width="906">
<tbody>
<tr class="alt">
<td>
<h2><span style="color: #ff6600;"><span style="font-size: small;"><span style="font-size: x-small;">/* You owed me when you copy this code without informing </span><a href="mailto:dingzezhu@gmail.com"><span style="font-size: x-small; color: #666666;">dingze.zhu@gmail.com</span></a></span></span></h2>
<h2><span style="color: #ff6600;">* It’s owned by mysqlsystems.com</span></h2>
<h2><span style="color: #ff6600;"><span style="font-size: small;"><span style="font-size: x-small;">*/ </span> </p>
<p> </p>
<p><span style="font-size: small;"><span style="font-size: x-small;">#if defined(_WIN32)</span></span></p>
<p><span style="font-size: small;"><br />
<span style="font-size: x-small;">#define DLLEXP __declspec(dllexport)<br />
#else<br />
#define DLLEXP<br />
#endif</span></span><span style="font-size: small;"><br />
</span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">#include &lt;stdlib.h&gt;<br />
#include &lt;string.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;mysql.h&gt;</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">#define LIBVERSION “mysqlsystems_udf_log version 0.1 beta”<br />
#define ERR_ARG “Hiro tells you: Exactly one argument expected!”<br />
#define ERR_MEM “Out of <a href="http://www.ourmysql.com/archives/tag/memory" class="st_tag internal_tag" rel="tag" title="标签 Memory 下的日志">memory</a>!”</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">#ifdef  __cplusplus<br />
extern “C” {<br />
#endif</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;"><span style="color: #ff6600;">/**<br />
* mysqlsystems_udf_log<br />
*/</span><br />
DLLEXP<br />
my_bool mysqlsystems_udf_log_init(<br />
UDF_INIT *initid<br />
,    UDF_ARGS *args<br />
,    char *message<br />
){<br />
return 0;<br />
}</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">DLLEXP<br />
void mysqlsystems_udf_log_deinit(<br />
UDF_INIT *initid<br />
){}</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">DLLEXP<br />
char* mysqlsystems_udf_log(<br />
UDF_INIT *initid<br />
,    UDF_ARGS *args<br />
,    char* result<br />
,    unsigned long* length<br />
,    char *is_null<br />
,    char *error<br />
){<br />
*length = strlen(LIBVERSION);<br />
return LIBVERSION;<br />
}</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;"><span style="color: #ff6600;">/**<br />
* another one : log2error<br />
*/</span><br />
DLLEXP<br />
my_bool log2error_init(<br />
UDF_INIT *initid<br />
,    UDF_ARGS *args<br />
,    char *message<br />
){<br />
if(args-&gt;arg_count==1){<br />
//alloc mem for format pattern:<br />
// “%s0.xxxx\n”<br />
// where xxxx is the max<br />
// 7 = length of %s0.\n + trailing \0<br />
if(!(initid-&gt;ptr = (char *)malloc(7 + 4))){<br />
strcpy(message, ERR_MEM);<br />
return 1;<br />
}<br />
args-&gt;arg_type[0] = STRING_RESULT;<br />
initid-&gt;maybe_null = 0;<br />
} else {<br />
strcpy(message, ERR_ARG);<br />
return 1;<br />
}<br />
return 0;<br />
}</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">DLLEXP<br />
void log2error_deinit(<br />
UDF_INIT *initid<br />
){<br />
if(initid-&gt;ptr)<br />
{<br />
fflush(stderr);<br />
free(initid-&gt;ptr);<br />
}<br />
}</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">DLLEXP<br />
my_ulonglong log2error(<br />
UDF_INIT *initid<br />
,    UDF_ARGS *args<br />
,    char *is_null<br />
,    char *error<br />
){<br />
int numDigits;<br />
char *fmt;<br />
*is_null = 0;<br />
if(args-&gt;args[0]==NULL){<br />
fprintf(stderr, “NULL\n”);<br />
} else {<br />
fmt = (char *)initid-&gt;ptr;<br />
memcpy(fmt, “%0.”, 3);<br />
sprintf(fmt+3, “%d”, args-&gt;lengths[0]&lt;=9998? args-&gt;lengths[0]: 9998);<br />
numDigits = strlen(fmt + 4);<br />
memcpy(fmt + 4 + numDigits, “s\n\0″, 3);<br />
fprintf(stderr, fmt, args-&gt;args[0]);<br />
}<br />
return 0;<br />
}</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">#ifdef  __cplusplus<br />
}<br />
#endif</span></span></p>
<p></span></span></h2>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: x-small;"><span style="font-size: small;">编写完毕代码后，需要将源代码编译成动态库.so文件。随后将动态库拷贝到</span><span style="font-size: small;">MySQL</span><span style="font-size: small;">安装目录的lib/plugin下。（在那里我们还可以找到Innodb的动态库文件）</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">根据你使用的OS、MySQL等环境。可能有所出入。在本实验中，使用如下<br />
</span></span></p>
<p><span style="font-size: small;"><span style="color: #ffcc00;"><span style="font-size: x-small;">cc -I/user/local/mysql/include -shared -o mysqlsystems_udf_log.so mysqlsystems_udf_log.c</span></span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">下图是安装和使用的过程：</span></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;"><img class="aligncenter size-full wp-image-1222" title="install_udf2" src="http://www.mysqlsystems.com/wp-content/uploads/2009/11/install_udf2.jpg" alt="install_udf2" width="666" height="414" /><br />
</span></span></p>
<p style="text-align: center;"> </p>
<p><span style="font-size: small;"><span style="font-size: x-small;">查看MySQL的error日志：</span></span></p>
<p><span style="font-size: small;"><a href="http://www.mysqlsystems.com/wp-content/uploads/2009/11/error_log.jpg"><span style="font-size: x-small;"><img class="aligncenter size-full wp-image-1212" title="error_log" src="http://www.mysqlsystems.com/wp-content/uploads/2009/11/error_log.jpg" alt="error_log" width="654" height="408" /></span></a></span></p>
<p><span style="font-size: small;"><span style="font-size: x-small;">网友可以看到，在error log第22号，出现了我们输入的 hello world字样。</span><br />
</span><br />
<h3>相关文章</h3>
<ul class="related_post">
<li>目前没有相关的文章</li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/category/advanced" title="MySQL高级应用" rel="tag">MySQL高级应用</a>, <a href="http://www.ourmysql.com/archives/tag/udf" title="UDF" rel="tag">UDF</a>, <a href="http://www.ourmysql.com/archives/tag/%e5%87%bd%e6%95%b0" title="函数" rel="tag">函数</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/777/feed</wfw:commentRss>
		</item>
		<item>
		<title>MySQL中LEFT JOIN的主表</title>
		<link>http://www.ourmysql.com/archives/775</link>
		<comments>http://www.ourmysql.com/archives/775#comments</comments>
		<pubDate>Sun, 08 Nov 2009 15:00:39 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL基础知识]]></category>

		<category><![CDATA[join]]></category>

		<category><![CDATA[主表]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=775</guid>
		<description><![CDATA[我这里所说的主表是指在连接查询里MySQL以哪个表为主进行查询。比如说在LEFT JOIN查询里，一般来说左表就是主表，但这只是经验之谈，很多时候经验主义是靠不住的]]></description>
			<content:encoded><![CDATA[<p>我这里所说的<a href="http://www.ourmysql.com/archives/tag/%e4%b8%bb%e8%a1%a8" class="st_tag internal_tag" rel="tag" title="标签 主表 下的日志">主表</a>是指在连接查询里MySQL以哪个表为主进行查询。比如说在LEFT JOIN查询里，一般来说左表就是<a href="http://www.ourmysql.com/archives/tag/%e4%b8%bb%e8%a1%a8" class="st_tag internal_tag" rel="tag" title="标签 主表 下的日志">主表</a>，但这只是经验之谈，很多时候经验主义是靠不住的，为了说明问题，先来个例子，建两个演示用的表categories和posts：</p>
<p><span style="font-family: 宋体;">CREATE TABLE IF NOT EXISTS `categories` (<br />
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,<br />
`name` varchar(15) NOT NULL,<br />
`created` datetime NOT NULL,<br />
PRIMARY KEY (`id`)<br />
);</p>
<p>CREATE TABLE IF NOT EXISTS `posts` (<br />
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,<br />
`category_id` int(10) unsigned NOT NULL,<br />
`title` varchar(100) NOT NULL,<br />
`content` varchar(200) NOT NULL,<br />
`created` datetime NOT NULL,<br />
PRIMARY KEY (`id`),<br />
KEY `category_id` (`category_id`)<br />
);</span></p>
<p>先注意一下每个表的索引情况，以后会用到，记得随便插入一点测试数据，不用太多，但怎么也得两行以上，然后执行以下SQL：</p>
<p><span style="font-family: 宋体;">EXPLAIN SELECT *<br />
FROM posts<br />
LEFT JOIN categories ON posts.category_id = categories.id<br />
WHERE categories.id = &#8216;一个已经存在的ID&#8217;<br />
ORDER BY posts.created DESC</span></p>
<p>结果如下所示：</p>
<p><span style="font-family: 宋体;">table      key         Extra<br />
categories PRIMARY     Using filesort<br />
posts      category_id Using where</span></p>
<p>在explain的结果中，第一行表示的表就是<a href="http://www.ourmysql.com/archives/tag/%e4%b8%bb%e8%a1%a8" class="st_tag internal_tag" rel="tag" title="标签 主表 下的日志">主表</a>，所以说在此查询里categories是<a href="http://www.ourmysql.com/archives/tag/%e4%b8%bb%e8%a1%a8" class="st_tag internal_tag" rel="tag" title="标签 主表 下的日志">主表</a>，而在我们的经验里，LEFT JOIN查询里，左表（posts表）才应该是<a href="http://www.ourmysql.com/archives/tag/%e4%b8%bb%e8%a1%a8" class="st_tag internal_tag" rel="tag" title="标签 主表 下的日志">主表</a>，这产生一个根本的矛盾，MySQL之所以这样处理，是因为在我们的WHERE部分，查询条件是按照categories表的字段来进行筛选的，而恰恰categories表存在合适的索引，所以在查询时把categories表作为主表更有利于缩小结果集。</p>
<p>那explain结果中的Using filesort又是为什么呢？这是因为主表是categories表，从表是posts表，而我们使用从表的字段去ORDER BY，这通常不是一个好选择，最好改成<a href="http://www.ourmysql.com/archives/tag/%e4%b8%bb%e8%a1%a8" class="st_tag internal_tag" rel="tag" title="标签 主表 下的日志">主表</a>字段，如果鉴于需求所限，无法改成<a href="http://www.ourmysql.com/archives/tag/%e4%b8%bb%e8%a1%a8" class="st_tag internal_tag" rel="tag" title="标签 主表 下的日志">主表</a>的字段，那么可以尝试添加如下索引：</p>
<p>ALTER TABLE `posts` ADD INDEX ( `category_id` , `created` );</p>
<p>再运行SQL时就不会有Using filesort了，这是因为主表categories在通过category_id连接从表posts时，可以进而通过索引直接得到排序后的posts结果。</p>
<p>主观上一旦搞错了<a href="http://www.ourmysql.com/archives/tag/%e4%b8%bb%e8%a1%a8" class="st_tag internal_tag" rel="tag" title="标签 主表 下的日志">主表</a>，可能怎么调整索引都得不到高效的SQL，所以在写SQL时，比如说在写LEFT JOIN查询时，如果希望左表是<a href="http://www.ourmysql.com/archives/tag/%e4%b8%bb%e8%a1%a8" class="st_tag internal_tag" rel="tag" title="标签 主表 下的日志">主表</a>，那么就要保证在WHERE语句里的查询条件尽可能多的使用左表字段，进而，一旦确定了<a href="http://www.ourmysql.com/archives/tag/%e4%b8%bb%e8%a1%a8" class="st_tag internal_tag" rel="tag" title="标签 主表 下的日志">主表</a>，也最好只通过<a href="http://www.ourmysql.com/archives/tag/%e4%b8%bb%e8%a1%a8" class="st_tag internal_tag" rel="tag" title="标签 主表 下的日志">主表</a>字段去ORDER BY。<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2009-04-14 &#8212; <a href="http://www.ourmysql.com/archives/524" title="MySql 随机读取数据">MySql 随机读取数据</a></li>
<li>2008-12-05 &#8212; <a href="http://www.ourmysql.com/archives/320" title="MySQL 中 Join 的基本实现原理">MySQL 中 Join 的基本实现原理</a></li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/tag/join" title="join" rel="tag">join</a>, <a href="http://www.ourmysql.com/archives/category/basic" title="MySQL基础知识" rel="tag">MySQL基础知识</a>, <a href="http://www.ourmysql.com/archives/tag/%e4%b8%bb%e8%a1%a8" title="主表" rel="tag">主表</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/775/feed</wfw:commentRss>
		</item>
		<item>
		<title>MySQL数据迁移测试</title>
		<link>http://www.ourmysql.com/archives/773</link>
		<comments>http://www.ourmysql.com/archives/773#comments</comments>
		<pubDate>Sat, 07 Nov 2009 08:01:43 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL初级应用]]></category>

		<category><![CDATA[迁移]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=773</guid>
		<description><![CDATA[早上在笔记本上测试了一下, 以生成Insert语句的方式, 从Oracle到MySQL迁移数据的速度. 对于MySQL来讲, 是不是绑定变量并不重要, 在MySQL的客户端编程中, 并没有绑定变量的概念, 这是因为MySQL并没有Oracle中类似的共享池, 而是由每个连接进程自行去解释SQL并执行. ]]></description>
			<content:encoded><![CDATA[<div class="post-content">
<p>    早上在笔记本上测试了一下, 以生成Insert语句的方式, 从Oracle到MySQL迁移数据的速度. 对于MySQL来讲, 是不是绑定变量并不重要, 在MySQL的客户端编程中, 并没有绑定变量的概念, 这是因为MySQL并没有Oracle中类似的共享池, 而是由每个连接进程自行去解释SQL并执行.</p>
<p>    写了一个Windows上的批处理脚本, 用SQLULDR2从Oracle中查询数据, 并生成MySQL的Insert脚本, 用管道输入到MySQL中去执行.</p>
<blockquote class="prefont"><p>@echo off<br />
echo %TIME%<br />
sqluldr2 &#8230; table=emp_his format=mysql quote=0&#215;27 escape=0&#215;53 null=null file=- | mysql test<br />
echo %TIME%</p></blockquote>
<p>    首先在MyISAM下测试, 先将表改成MyISAM方式存贮.</p>
<blockquote class="prefont"><p>mysql&gt; alter table emp_his engine= <a href="http://www.ourmysql.com/archives/tag/myisam" class="st_tag internal_tag" rel="tag" title="标签 MyISAM 下的日志">myisam</a>;<br />
Query OK, 0 rows affected (0.05 sec)<br />
Records: 0  Duplicates: 0  Warnings: 0</p></blockquote>
<p>    进行数据装载测试, 可以看出还是很快的.</p>
<blockquote class="prefont"><p>D:\mysql-5.0.84-win32\bin&gt;runload.bat<br />
7:12:28.10<br />
7:12:41.87</p></blockquote>
<p>    查一下总共迁移的记录数.</p>
<blockquote class="prefont"><p>mysql&gt; select count(*) from emp_his;<br />
+&#8212;&#8212;&#8212;-+<br />
| count(*) |<br />
+&#8212;&#8212;&#8212;-+<br />
|  951308 |<br />
+&#8212;&#8212;&#8212;-+<br />
1 row in set (0.00 sec)</p></blockquote>
<p>    接下来在Innodb下测试, 将表改成Innodb方式存贮.</p>
<blockquote class="prefont"><p>mysql&gt; alter table emp_his engine= <a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">innodb</a>;<br />
Query OK, 0 rows affected (0.06 sec)<br />
Records: 0  Duplicates: 0  Warnings: 0</p></blockquote>
<p>    进行数据装载测试, 可以看出比MyISAM要慢不少.</p>
<blockquote class="prefont"><p>D:\mysql-5.0.84-win32\bin&gt;runload.bat<br />
7:09:34.85<br />
7:10:06.15</p></blockquote>
<p>    查一下总共迁移的记录数.</p>
<blockquote class="prefont"><p>mysql&gt; select count(*) from emp_his;<br />
+&#8212;&#8212;&#8212;-+<br />
| count(*) |<br />
+&#8212;&#8212;&#8212;-+<br />
|  951308 |<br />
+&#8212;&#8212;&#8212;-+<br />
1 row in set (2.11 sec)</p></blockquote>
<p>    在MySQL中, 将同样的表从MyISAM转到<a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">Innodb</a>, 需要多少时间?</p>
<blockquote class="prefont"><p>mysql&gt; alter table emp_his engine= <a href="http://www.ourmysql.com/archives/tag/innodb" class="st_tag internal_tag" rel="tag" title="标签 InnoDB 下的日志">innodb</a>;<br />
Query OK, 951308 rows affected (16.67 sec)<br />
Records: 951308  Duplicates: 0  Warnings: 0</p></blockquote>
<p>    对于在笔记本上测试的这个结果, 个人是相当满意的, 测试的表有8个字段, 差不多等于平均数.</p></div>
<h3>相关文章</h3>
<ul class="related_post">
<li>2008-12-18 &#8212; <a href="http://www.ourmysql.com/archives/346" title="InnoDB数据表空间文件平滑迁移">InnoDB数据表空间文件平滑迁移</a></li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/category/primary" title="MySQL初级应用" rel="tag">MySQL初级应用</a>, <a href="http://www.ourmysql.com/archives/tag/%e8%bf%81%e7%a7%bb" title="迁移" rel="tag">迁移</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/773/feed</wfw:commentRss>
		</item>
		<item>
		<title>用Tcpdump抓取MySQL执行的SQL</title>
		<link>http://www.ourmysql.com/archives/771</link>
		<comments>http://www.ourmysql.com/archives/771#comments</comments>
		<pubDate>Wed, 04 Nov 2009 01:02:21 +0000</pubDate>
		<dc:creator>OurMySQL</dc:creator>
		
		<category><![CDATA[MySQL高级应用]]></category>

		<category><![CDATA[用Tcpdump]]></category>

		<guid isPermaLink="false">http://www.ourmysql.com/?p=771</guid>
		<description><![CDATA[用Tcpdump抓取MySQL执行的SQL]]></description>
			<content:encoded><![CDATA[<p>#!/bin/bash<br />
tcpdump -i eth0 -s 0 -l -w – dst port 3306 | strings | perl -e ‘<br />
#!/bin/bash<br />
while(&lt;&gt;) { chomp; next if /^[^ ]+[ ]*$/;<br />
if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL)/i) {<br />
if (defined $q) { print “$q\n”; }<br />
$q=$_;<br />
} else {<br />
$_ =~ s/^[ \t]+//; $q.=” $_”;<br />
}<br />
}’<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>目前没有相关的文章</li>
</ul>

	标签：<a href="http://www.ourmysql.com/archives/category/advanced" title="MySQL高级应用" rel="tag">MySQL高级应用</a>, <a href="http://www.ourmysql.com/archives/tag/%e7%94%a8tcpdump" title="用Tcpdump" rel="tag">用Tcpdump</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.ourmysql.com/archives/771/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
