﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-flyonok-文章分类-mysql</title><link>http://www.cppblog.com/flyonok/category/6249.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 15 Jul 2008 04:10:33 GMT</lastBuildDate><pubDate>Tue, 15 Jul 2008 04:10:33 GMT</pubDate><ttl>60</ttl><item><title>MySQL中MyISAM引擎与InnoDB引擎性能简单测试</title><link>http://www.cppblog.com/flyonok/articles/54587.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Wed, 25 Jun 2008 12:35:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/articles/54587.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/54587.html</wfw:comment><comments>http://www.cppblog.com/flyonok/articles/54587.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/54587.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/54587.html</trackback:ping><description><![CDATA[<br><span style="font-weight: bold;">[硬件配置]</span><br>CPU : AMD2500+ (1.8G)<br>内存: 1G/现代<br>硬盘: 80G/IDE<br><br><span style="font-weight: bold;">[软件配置]</span><br>OS : Windows XP SP2<br>SE : PHP5.2.1<br>DB : MySQL5.0.37<br>Web: IIS6<br><br><span style="font-weight: bold;">[MySQL表结构]</span><br>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #000000;"><br></span><span style="color: #0000ff;">CREATE</span><span style="color: #000000;"> </span><span style="color: #0000ff;">TABLE</span><span style="color: #000000;"> `myisam` (<br>&nbsp;&nbsp; `id` </span><span style="font-weight: bold; color: #000000;">int</span><span style="color: #000000;">(</span><span style="font-weight: bold; color: #800000;">11</span><span style="color: #000000;">) </span><span style="color: #808080;">NOT</span><span style="color: #000000;"> </span><span style="color: #0000ff;">NULL</span><span style="color: #000000;"> auto_increment,<br>&nbsp;&nbsp; `name` </span><span style="font-weight: bold; color: #000000;">varchar</span><span style="color: #000000;">(</span><span style="font-weight: bold; color: #800000;">100</span><span style="color: #000000;">) </span><span style="color: #0000ff;">default</span><span style="color: #000000;"> </span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br>&nbsp;&nbsp; `content` </span><span style="font-weight: bold; color: #000000;">text</span><span style="color: #000000;">,<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;"> </span><span style="color: #0000ff;">KEY</span><span style="color: #000000;">&nbsp;&nbsp; (`id`)<br>) ENGINE</span><span style="color: #808080;">=</span><span style="color: #000000;">MyISAM </span><span style="color: #0000ff;">DEFAULT</span><span style="color: #000000;"> CHARSET</span><span style="color: #808080;">=</span><span style="color: #000000;">gbk;<br><br></span><span style="color: #0000ff;">CREATE</span><span style="color: #000000;"> </span><span style="color: #0000ff;">TABLE</span><span style="color: #000000;"> `innodb` (<br>&nbsp;&nbsp; `id` </span><span style="font-weight: bold; color: #000000;">int</span><span style="color: #000000;">(</span><span style="font-weight: bold; color: #800000;">11</span><span style="color: #000000;">) </span><span style="color: #808080;">NOT</span><span style="color: #000000;"> </span><span style="color: #0000ff;">NULL</span><span style="color: #000000;"> auto_increment,<br>&nbsp;&nbsp; `name` </span><span style="font-weight: bold; color: #000000;">varchar</span><span style="color: #000000;">(</span><span style="font-weight: bold; color: #800000;">100</span><span style="color: #000000;">) </span><span style="color: #0000ff;">default</span><span style="color: #000000;"> </span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br>&nbsp;&nbsp; `content` </span><span style="font-weight: bold; color: #000000;">text</span><span style="color: #000000;">,<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;"> </span><span style="color: #0000ff;">KEY</span><span style="color: #000000;">&nbsp;&nbsp; (`id`)<br>) ENGINE</span><span style="color: #808080;">=</span><span style="color: #000000;">InnoDB </span><span style="color: #0000ff;">DEFAULT</span><span style="color: #000000;"> CHARSET</span><span style="color: #808080;">=</span><span style="color: #000000;">gbk;</span></div>
</div>
<span style="font-weight: bold;">[数据内容]</span><br><br>$name = "heiyeluren";<br>$content
= "MySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎：&#183;
MyISAM管理非事务表。它提供高速存储和检索，以及全文搜索能力。MyISAM在所有MySQL配置里被支持，它是默认的存储引擎，除非你配置
MySQL默认使用另外一个引擎。
&#183;MEMORY存储引擎提供&#8220;内存中&#8221;表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样，
MEMORY和MERGE存储引擎处理非事务表，这两个引擎也都被默认包含在MySQL中。 释：MEMORY存储引擎正式地被确定为HEAP引擎。&#183;
InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。InnoDB也默认被包括在所
有MySQL
5.1二进制分发版里，你可以按照喜好通过配置MySQL来允许或禁止任一引擎。&#183;EXAMPLE存储引擎是一个&#8220;存根&#8221;引擎，它不做什么。你可以用这个
引擎创建表，但没有数据被存储于其中或从其中检索。这个引擎的目的是服务，在MySQL源代码中的一个例子，它演示说明如何开始编写新存储引擎。同样，它
的主要兴趣是对开发者。";<br><br><br><span style="font-weight: bold;">[插入数据-1] (innodb_flush_log_at_trx_commit=1)</span><br>MyISAM 1W：3/s<br>InnoDB 1W：219/s<br><br>MyISAM 10W：29/s<br>InnoDB 10W：2092/s<br><br>MyISAM 100W：287/s<br>InnoDB 100W：没敢测试<br><br style="font-weight: bold;"><span style="font-weight: bold;">[插入数据-2] (innodb_flush_log_at_trx_commit=0)</span><br>MyISAM 1W：3/s<br>InnoDB 1W：3/s<br><br>MyISAM 10W：30/s<br>InnoDB 10W：29/s<br><br>MyISAM 100W：273/s<br>InnoDB 100W：423/s<br><br><span style="font-weight: bold;">[插入数据3] (innodb_buffer_pool_size=1024M)</span><br>InnoDB 1W：3/s<br>InnoDB 10W：33/s<br>InnoDB 100W：607/s<br><br><span style="font-weight: bold;">[插入数据4] (innodb_buffer_pool_size=256M, innodb_flush_log_at_trx_commit=1, set autocommit=0)</span><br><br>InnoDB 1W：3/s<br>InnoDB 10W：26/s<br>InnoDB 100W：379/s<br><br><br><br><span style="font-weight: bold;">[MySQL 配置文件] (缺省配置)</span><br><br>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #000000;"># MySQL Server Instance Configuration File<br></span><span style="font-weight: bold; color: #800000;">[</span><span style="color: #800000;">client</span><span style="font-weight: bold; color: #800000;">]</span><span style="color: #000000;"><br>port</span><span style="color: #000000;">=</span><span style="color: #000000;">3306</span><span style="color: #000000;"><br><br></span><span style="font-weight: bold; color: #800000;">[</span><span style="color: #800000;">mysql</span><span style="font-weight: bold; color: #800000;">]</span><span style="color: #000000;"><br>default-character-set</span><span style="color: #000000;">=</span><span style="color: #000000;">gbk<br><br></span><span style="font-weight: bold; color: #800000;">[</span><span style="color: #800000;">mysqld</span><span style="font-weight: bold; color: #800000;">]</span><span style="color: #000000;"><br>port</span><span style="color: #000000;">=</span><span style="color: #000000;">3306</span><span style="color: #000000;"><br>basedir</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">C:/mysql50/</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>datadir</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">C:/mysql50/Data/</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>default-character-set</span><span style="color: #000000;">=</span><span style="color: #000000;">gbk<br>default-storage-engine</span><span style="color: #000000;">=</span><span style="color: #000000;">INNODB<br>sql-mode</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>max_connections</span><span style="color: #000000;">=</span><span style="color: #000000;">100</span><span style="color: #000000;"><br><br>query_cache_size</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;"><br>table_cache</span><span style="color: #000000;">=</span><span style="color: #000000;">256</span><span style="color: #000000;"><br>tmp_table_size</span><span style="color: #000000;">=</span><span style="color: #000000;">50M<br>thread_cache_size</span><span style="color: #000000;">=</span><span style="color: #000000;">8</span><span style="color: #000000;"><br>myisam_max_sort_file_size</span><span style="color: #000000;">=</span><span style="color: #000000;">100G<br>myisam_max_extra_sort_file_size</span><span style="color: #000000;">=</span><span style="color: #000000;">100G<br>myisam_sort_buffer_size</span><span style="color: #000000;">=</span><span style="color: #000000;">100M<br>key_buffer_size</span><span style="color: #000000;">=</span><span style="color: #000000;">82M<br>read_buffer_size</span><span style="color: #000000;">=</span><span style="color: #000000;">64K<br>read_rnd_buffer_size</span><span style="color: #000000;">=</span><span style="color: #000000;">256K<br>sort_buffer_size</span><span style="color: #000000;">=</span><span style="color: #000000;">256K<br><br>innodb_additional_mem_pool_size</span><span style="color: #000000;">=</span><span style="color: #000000;">4M<br>innodb_flush_log_at_trx_commit</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;"><br>innodb_log_buffer_size</span><span style="color: #000000;">=</span><span style="color: #000000;">2M<br>innodb_buffer_pool_size</span><span style="color: #000000;">=</span><span style="color: #000000;">159M<br>innodb_log_file_size</span><span style="color: #000000;">=</span><span style="color: #000000;">80M<br>innodb_thread_concurrency</span><span style="color: #000000;">=</span><span style="color: #000000;">8</span></div>
</div>
<span style="font-weight: bold;">【总结】</span><br><br>可以看出在MySQL
5.0里面，MyISAM和InnoDB存储引擎性能差别并不是很大，针对InnoDB来说，影响性能的主要是
innodb_flush_log_at_trx_commit
这个选项，如果设置为1的话，那么每次插入数据的时候都会自动提交，导致性能急剧下降，应该是跟刷新日志有关系，设置为0效率能够看到明显提升，当然，同
样你可以SQL中提交&#8220;SET AUTOCOMMIT =
0&#8221;来设置达到好的性能。另外，还听说通过设置innodb_buffer_pool_size能够提升InnoDB的性能，但是我测试发现没有特别明显
的提升。<br><br>基本上我们可以考虑使用InnoDB来替代我们的MyISAM引擎了，因为InnoDB自身很多良好的特点，比如事务支持、存储
过程、视图、行级锁定等等，在并发很多的情况下，相信InnoDB的表现肯定要比MyISAM强很多，当然，相应的在my.cnf中的配置也是比较关键
的，良好的配置，能够有效的加速你的应用。<br><br>如果不是很复杂的Web应用，非关键应用，还是可以继续考虑MyISAM的，这个具体情况可以自己斟酌。<br><br style="font-style: italic;"><br style="font-style: italic;"><span style="font-style: italic;">参考URL：</span><br style="font-style: italic;"><span style="font-style: italic;">http://dev.mysql.com/doc/refman/5.1/zh/index.html</span><br style="font-style: italic;"><span style="font-style: italic;">http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#innodb</span><br style="font-style: italic;"><img src ="http://www.cppblog.com/flyonok/aggbug/54587.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2008-06-25 20:35 <a href="http://www.cppblog.com/flyonok/articles/54587.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL常见问题解答及技巧</title><link>http://www.cppblog.com/flyonok/articles/mysql.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Fri, 20 Jun 2008 02:47:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/articles/mysql.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/54092.html</wfw:comment><comments>http://www.cppblog.com/flyonok/articles/mysql.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/54092.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/54092.html</trackback:ping><description><![CDATA[　首先你应该试着找出问题mysqld守护<a href="http://www.qqread.com/z/windows/process/index.html" target="_blank">进程</a><clk>是否死掉或你的问题是否与你的客户有关。你可以用mysqladmin version检查你的mysqld服务器<nobr id="clickeyekey2" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc(event,2)" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,2, this);" onmouseout="kwL(event,this)" onmousemove="kwM(2);">正常</nobr>执行了多长时间，如果mysqld死了，你可以在文件&#8220;mysql-data-directory/'hostname'.err&#8221;中找到其原因。<br></clk>使用MySQL时的一些常见错误
<p>　　MySQL <a href="http://www.qqread.com/tag/2798/index.html" target="_blank">server</a> has gone away</p>
<p>　　常见的原因是服务器超时了并且关闭了连接。缺省地，如果没有事情发生，服务器在 8个小时后关闭连接。你可在启动mysqld时通过设置wait_timeout变量改变时间限制。</p>
<p><clk>&nbsp;如果mysqld得到一个太大或不正常的包，它认为<nobr id="clickeyekey6" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc(event,6)" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,6, this);" onmouseout="kwL(event,this)" onmousemove="kwM(6);">客户</nobr>出错了并关闭连接。</clk></p>
<p><br><clk></clk></p>
<p><strong>常见问题集锦</strong></p>
<p>　MySQL总是崩溃 </p>
<p><clk>&nbsp;首先你应该试着找出问题mysqld守护进程是否死掉或你的问题是否与你的客户有关。你可以用mysqladmin version<nobr id="clickeyekey3" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc(event,3)" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,3, this);" onmouseout="kwL(event,this)" onmousemove="kwM(3);">检查</nobr>你的mysqld服务器正常执行了多长时间，如果mysqld死了，你可以在文件&#8220;mysql-data-directory/'hostname'.err&#8221;中找到其原因。</clk></p>
<p><br>　　使用MySQL时的一些常见错误 </p>
<p>　　</p>
如果mysqld得到一个太大或不正常的包，它认为客户出错了并关闭连接。
<p><br>　　Can't connect to [local] MySQL server</p>
<p>　　通常意味着没有一个MySQL服务器运行在系统上或当试图连接mysqld服务器时，你正在使用一个错误的套接字文件或<a href="http://www.qqread.com/z/tcp_ip/index.html" target="_blank">TCP/IP</a>端口。 </p>
<p>　　检查(使用ps)服务器上是否有一个名为mysqld的进程启动</p>
<p>　　如果一个mysqld进程正在运行，可以通过尝试这些不同的连接来检查服务器</p>
<p>shell&gt; mysqladmin version</p>
<p>shell&gt; mysqladmin variables</p>
<p>shell&gt; mysqladmin -h `hostname` version variables</p>
<p>shell&gt; mysqladmin -h `hostname` --port=3306 version</p>
<p>shell&gt; mysqladmin -h 'ip for your host' version</p>
<p>shell&gt; mysqladmin --socket=/tmp/mysql.sock version</p>
<p><clk>&nbsp;注意hostname<nobr id="clickeyekey1" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc(event,1)" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,1, this);" onmouseout="kwL(event,this)" onmousemove="kwM(1);">命令</nobr>使用反引号&#8220;`&#8221;而非正引号&#8220;'&#8221;；这些导致hostname输出（即，当前主机名）被代替进mysqladmin命令中。</clk></p>
<p><br>　　Host '...' is blocked错误</p>
<p>Host 'hostname' is blocked because of many connection errors.</p>
<p>Unblock with 'mysqladmin flush-hosts'</p>
<p>
这意味着，mysqld已经得到了大量(max_connect_errors)的主机'hostname'的在中途被中断了的连接请求。在
max_connect_errors次失败请求后，mysqld认定出错了(象来字一个黑客的攻击)，并且阻止该站点进一步的连接，直到某人执行命令
mysqladmin flush-hosts。</p>
<p>缺省地，mysqld在10个连接错误后阻塞一台主机。你可以通过象这样启动服务器很容易地调整它：</p>
<p>shell&gt; safe_mysqld -O max_connect_errors=10000 &amp;</p>
<p><br>　　Too many connections错误</p>
<p>意味着已经有max_connections个客户连接了mysqld服务器。</p>
<p>如果你需要比缺省(100)更多的连接，那么你应该重启mysqld，用更大的 max_connections 变量值。</p>
<p><br>　　Out of memory错误</p>
<p>mysql: Out of memory at line 42, 'malloc.c'</p>
<p>mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k)</p>
<p>ERROR 2008: MySQL client ran out of memory</p>
<p>　　注意，错误指向了MySQL客户mysql。这个错误的原因很简单，客户没有足够的内存存储全部结果。</p>
<p><clk>&nbsp;首先检查你的<nobr id="clickeyekey5" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc(event,5)" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,5, this);" onmouseout="kwL(event,this)" onmousemove="kwM(5);">查询</nobr>是否正确</clk><br></p>
<p>　<em>Packet too large错误</em> </p>
<p>　　一个MySQL客户或mysqld服务器得到一个比max_allowed_packet个字节长的包</p>
<p>　　可以通过用mysql --set-variable=max_allowed_packet=8M指定一个更大的缓冲区来启动客户程序。</p>
<p><br>　　<em>The table is full错误</em></p>
<p>　　这个错误发生在内存临时表变得比tmp_table_size字节大时。</p>
<p><br>　　<em>Commands out of sync in client错误</em></p>
<p>　　正在以错误的次序调用客户函数！</p>
<p><br>　　<em>Ignoring user错误</em></p>
<p>Found wrong password for user: 'some_user@some_host'; Ignoring user</p>
<p>　　这意味着在mysqld启动时或在它再次装载权限表时，它在user表中找到了一个有一个无效口令的条目。结果，条目简单地被权限系统忽略。</p>
<p><br>　　<em>Table 'xxx' doesn't exist错误</em></p>
<p>　　<a href="http://www.qqread.com/keys/shujuku/index.html" target="_blank">数据库</a>和表名件是区分大小写的！可以用SHOW TABLES检查你在当前数据库中有哪个表。</p>
<p>&nbsp;</p>
<p>　　从一个文本文件运行SQL命令 </p>
<p>　　可以把SQL命令放在一个文件中并且告诉mysql从该文件读取其输入：创造一个文本文件&#8220;text_file&#8221;，它包含要执行的命令。然后如下调用mysql：</p>
<p>shell&gt; mysql database &lt; text_file</p>
<p>　　或</p>
<p>shell&gt; mysql &lt; text_file</p>
<p>　　启动有USE db_name语句的文本文件。</p>
<p>&nbsp;</p>
<p>　　<em>怎样重新设置一个忘记的口令</em> </p>
<p>　　如果忘记了MySQL的root用户的口令，可以使用如下方法恢复： </p>
<p>　　通过发送一个kill（不是kill -9)到mysqld服务器来关闭mysqld服务器。pid 被保存在一个.pid文件中，通常在<a href="http://www.qqread.com/z/mysql/backup/index.html" target="_blank">MySQL数据</a><clk>库<nobr id="clickeyekey0" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc(event,0)" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,0, this);" onmouseout="kwL(event,this)" onmousemove="kwM(0);">目录</nobr>中：</clk></p>
<p>　　kill `cat /mysql-data-directory/hostname.pid`</p>
<p>　　你必须是一个<a href="http://www.qqread.com/keys/unix/index.html" target="_blank">UNIX</a> root用户或运行服务器的相同用户做这个。</p>
<p>　　使用--skip-grant-tables选项重启mysqld。 </p>
<p>
用mysql -h hostname mysql连接mysqld服务器并且用一条GRANT命令改变口令。见7.26
GRANT和REVOKE句法。也可以用mysqladmin -h hostname -u user password 'new
password' 进行。 </p>
<p>　　用mysqladmin -h hostname flush-privileges或用SQL命令FLUSH PRIVILEGES来装载权限表。 </p>
<p>&nbsp;</p>
<p>　　<em>使用DATE列的问题 </em></p>
<p>　　DATE值的格式是'YYYY-MM-DD'。</p>
<p>&nbsp;</p>
<p>　　<em>改变一张表中列的顺序</em> </p>
<p>　　在一个应用程序中，应该决不基于他们的位置使用SELECT * 检索列，因为被返回的列的顺序永远不能保证；对数据库的一个简单改变可能导致应用程序相当有戏剧性地失败。</p>
<p>　　可以使用如下方法改变：</p>
<p>　　以正确的列顺序创建一张新表。 </p>
<p>　　执行INSERT INTO new_table SELECT fields-in-new_table-order FROM old_table. </p>
<p>　　删除或改名old_table。 </p>
<p>　　ALTER TABLE new_table RENAME old_table。 </p>
<p>&nbsp;</p>
<p>　　<em>数据库复制</em> </p>
<p><clk>&nbsp;MySQL(至今)没有数据库复制，但是有一些如何实现的<nobr id="clickeyekey4" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc(event,4)" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,4, this);" onmouseout="kwL(event,this)" onmousemove="kwM(4);">信息</nobr>。</clk></p>
<p>　　复制一个数据库最一般的方法是使用更新日志。</p>
<br>
<h1 id="w_tt">char与varchar的区别</h1>
<br>
<p>对于MyISAM表，尽量使用Char，对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此</p>
<p>对于MyISAM表，尽量使用Char，对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此，它的缺点就是占用<a  href="http://www.qqread.com/tag/1222/index.html" target="_blank">磁盘空间</a>；</p>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<clk>对于InnoDB表，因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分（所有数据行共用一个表头部
分，这个标头部分存放着指向各有关数据列的指针），所以使用char类型不见得会比使用varchar类型好。事实上，因为char类型通常要比
varchar类型占用更多的空间，所以从<nobr id="clickeyekey0" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc(event,0)" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,0, this);" onmouseout="kwL(event,this)" onmousemove="kwM(0);">减少</nobr>空间占用量和减少磁盘i/o的角度，使用varchar类型反而更有利</clk> <img src ="http://www.cppblog.com/flyonok/aggbug/54092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2008-06-20 10:47 <a href="http://www.cppblog.com/flyonok/articles/mysql.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql -- event</title><link>http://www.cppblog.com/flyonok/articles/53732.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Tue, 17 Jun 2008 09:36:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/articles/53732.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/53732.html</wfw:comment><comments>http://www.cppblog.com/flyonok/articles/53732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/53732.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/53732.html</trackback:ping><description><![CDATA[create event call_proc_audit_alert<br>on schedule at timestamp('2008-06-18 2:00:00') + interval 1 day<br>do call PROCESS_AUDIT_AND_ALERT; <br><br><br>show variables like '%scheduler%';<br><br>看看时间调度开关有没有打开,如果是OFF,就要打开<br>set global event_scheduler = on;<br><br>最好是当mysql启动的时候就打开<br><br><br><br><img src ="http://www.cppblog.com/flyonok/aggbug/53732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2008-06-17 17:36 <a href="http://www.cppblog.com/flyonok/articles/53732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql--预处理函数</title><link>http://www.cppblog.com/flyonok/articles/53155.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Fri, 13 Jun 2008 09:23:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/articles/53155.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/53155.html</wfw:comment><comments>http://www.cppblog.com/flyonok/articles/53155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/53155.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/53155.html</trackback:ping><description><![CDATA[在程序中使用了mysql_stmt系列预处理函数，发现mysql_stmt_execute出现错误，但错误号为0；<br>调整参数<br>show global status like "open%";<br><br>show global variables like '%open%';<br><br>flush tables;<br><br>SHOW GLOBAL STATUS LIKE 'Opened_tables'<br><br>set global table_open_cache = 200;(table_cache)<br><br>set global max_connections = 100;<br><br>open_files = 2048<br>ulimit -n 2048<br><br>wait_timeout = 600<br><br>察看mysql的进程数<br>show processlist;<br>察看sleep进程的信息<br>netstat -ntp | grep :端口号<br>根据以上命令可以查到与mysql连接的程序的名称<br>netstat -ntp | grep 进程号<br><br>调试程序:strace -p <br><br>重新运行程序，发现没有了。晕。。。<br><br>总结：mysql中有个超时重连机制，由参数wait_timeout决定，缺省时28800秒；如果这个参数设置太小，就会导致客户端老是重连，从而预处理句柄实效，数据无法处理。解决方法，使用缺省值，客户端不使用重连机制。<br><br>     <img src ="http://www.cppblog.com/flyonok/aggbug/53155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2008-06-13 17:23 <a href="http://www.cppblog.com/flyonok/articles/53155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql root password</title><link>http://www.cppblog.com/flyonok/articles/51349.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Tue, 27 May 2008 18:26:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/articles/51349.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/51349.html</wfw:comment><comments>http://www.cppblog.com/flyonok/articles/51349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/51349.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/51349.html</trackback:ping><description><![CDATA[如果 MySQL 正在运行，首先杀之： killall -TERM mysqld。 <br>启动 MySQL ：bin/safe_mysqld --skip-grant-tables &amp; <br>就可以不需要密码就进入 MySQL 了。 <br>然后就是 <br>&gt;use mysql <br>&gt;update user set password=password("new_pass") where user="root"; <br>&gt;flush privileges; <br>重新杀 MySQL ，用正常方法启动 MySQL <br>一定注意：很多新手没有用password=password("...")，而是直接password="..."所以改掉密码不好使<img src ="http://www.cppblog.com/flyonok/aggbug/51349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2008-05-28 02:26 <a href="http://www.cppblog.com/flyonok/articles/51349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql dump</title><link>http://www.cppblog.com/flyonok/articles/49639.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Mon, 12 May 2008 06:08:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/articles/49639.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/49639.html</wfw:comment><comments>http://www.cppblog.com/flyonok/articles/49639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/49639.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/49639.html</trackback:ping><description><![CDATA[使用mysql的时候，经常遇到要导入导出数据库结构的情况<br>使用mysqldump和mysql能够比较方便的达到目的：<br>1、使用mysqldump导出<br>mysqldump --add-drop-database&nbsp; --add-drop-table&nbsp;&nbsp;&nbsp; --create-option&nbsp; --default-character-set=utf8&nbsp; --extended-insert --routines -u suntang -p customdb_new &gt; customdb_new.sql
<br><br>--no-data 指明不需要数据，只需要数据库结构<br><br>如果数据库太大，可以启用压缩，mysqldump dbname -h hostname&nbsp; | gzip &gt; dbname.sql.gz -u username -p<br><br>2、使用mysql导入<br>./mysql -e "source /root/audit/customdb0512.sql" customdb -h localhost -u root -p <br><br>another way:<br>mysql -p <br>password:<br>./path/name.sql<br><br>  <img src ="http://www.cppblog.com/flyonok/aggbug/49639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2008-05-12 14:08 <a href="http://www.cppblog.com/flyonok/articles/49639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>