<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[mysqldump意外终止的原因以及解决方法]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 22 Apr 2010 07:02:21 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<br/><br/>mysqldump是非常重要的MySQL备份工具。然而在长年累月的使用过程中，TAOBAO多次出现了因mysqldump意外终止而导致备份失败的情况。<br/>以下是我们经常遇到的问题：<br/><br/>1、Lost connection to MySQL server at ‘reading initial communication packet’：<br/>这个主要是因为DNS不稳定导致的。如果做了网络隔离，MySQL处于一个相对安全的网络环境，那么开启skip-name-resolve选项将会最大程度避免这个问题。<br/><br/>2、Lost connection to MySQL server at ‘reading authorization packet’：<br/>从MySQL获取一个可用的连接是多次握手的结果。在多次握手的过程中，网络波动会导致握手失败。增加connect_timeout可以解决这个问题；然而增加connect_timeout并不能防止网络故障的发生，反而会引起MySQL线程占用。最好的解决办法是让mysqldump重新发起连接请求。<br/><br/>3、Lost connection to MySQL server during query：<br/>这个问题具备随机性，而淘宝MySQL的应用场景决定了我们无法多次备份数据以便重现问题。<br/>然而我们注意到这个问题一般会在两种情况下会发生。一种是mysqldump **** &#124; gzip ****；另外一种是mysqldump **** &gt; /nfs-file<br/>注意，不管是gzip还是nfs都有一种特点，那就是它们影响了mysqldump的速度。从这个角度思考，是不是mysqldump从MySQL接受数据包的速度不够快导致Lost connection to MySQL server during query错误呢？<br/><br/>为了定位到问题，我搭建了一个测试环境：<br/>test@192.168.0.1：3306<br/>CREATE TABLE `test` (<br/>`id` bigint(20) NOT NULL auto_increment,<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=MyISAM DEFAULT CHARSET=utf8;<br/><br/>insert into test(b,c,d,e) values (lpad(’a&#039;,1900,’b&#039;), lpad(’a&#039;,1900,’b&#039;), lpad(’a&#039;,1900,’b&#039;), lpad(’a&#039;,1900,’b&#039;));<br/>多次复制数据使测试环境达到一定数据量。<br/><br/>192.168.0.2：<br/>编写一个c++程序<br/><br/><div class="code">#include &lt;stdio.h&gt;<br/>#include &lt;mysql.h&gt;<br/><br/>using namespace std;<br/><br/>int main()<br/>&#123;<br/>MYSQL conn;<br/>MYSQL_RES *result;<br/>MYSQL_ROW row;<br/>my_bool reconnect = 0;<br/><br/>mysql_init(&amp;conn);<br/>mysql_options(&amp;conn, MYSQL_OPT_RECONNECT, &amp;reconnect);<br/><br/>if(!mysql_real_connect(&amp;conn, “192.168.0.1″, “test”, “test”, “test”, 3306, NULL, 0))<br/>&#123;<br/>fprintf(stderr, “Failed to connect to database: %s&#92;n”, mysql_error(&amp;conn));<br/>exit(0);<br/>&#125;<br/>else<br/>&#123;<br/>fprintf(stdout, “Success to connect&#92;n”);<br/>&#125;<br/><br/>mysql_query(&amp;conn, “show variables like ‘%timeout%’”);<br/>result = mysql_use_result(&amp;conn);<br/>while(row=mysql_fetch_row(result))<br/>&#123;<br/>fprintf(stdout, “%-10s: %s&#92;n”, row&#91;0&#93;, row&#91;1&#93;);<br/>&#125;<br/>mysql_free_result(result);<br/>fprintf(stderr, “&#92;n”);<br/><br/>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/>&#123;<br/>fprintf(stderr, “Error %d: %s&#92;n”, mysql_errno(&amp;conn), mysql_error(&amp;conn));<br/>fprintf(stdout, “%s&#92;n”, row&#91;0&#93;);<br/>sleep(100);<br/>&#125;<br/>fprintf(stderr, “Error %d: %s&#92;n”, mysql_errno(&amp;conn), mysql_error(&amp;conn));<br/>mysql_free_result(result);<br/>mysql_close(&amp;conn);<br/>return 1;<br/>&#125;</div><br/><br/>在这段代码里，sleep函数用来模拟NFS的网络延迟和gzip的运算时间。执行一段时间之后，Lost connection to MySQL server during query出现了，程序意外终止。在数据处理足够快的情况下，又会是怎样的结果？<br/><br/>将sleep的时间改为1，重新编译后发现程序能够完整跑完。根据《MySQL Timeout解析》上对net_write_timeout的解释，我们可以发现，mysqldump处理数据过慢（NFS、gzip引起）会导致MySQL主动断开连接，此时mysqldump就会报Lost connection to MySQL server during query错误。经过多次测试，确定这个错误是由于net_write_timeout设置过短引起。<br/><br/><br/>作者：陶方 &#124; 【转载时请务必以超链接形式标明文章原始出处和作者信息及本声明】<br/>地址：http://rdc.taobao.com/blog/dba/html/435_mysqldump_error.html 
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] mysqldump意外终止的原因以及解决方法]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>