<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>一个故事@MySQL DBA &#187; Replication</title>
	<atom:link href="http://www.orczhou.com/index.php/tag/replication/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.orczhou.com</link>
	<description>一个故事@MySQL DBA</description>
	<lastBuildDate>Tue, 20 Dec 2011 15:51:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>MySQL如何传输二进制日志</title>
		<link>http://www.orczhou.com/index.php/2011/11/how-mysql-send-the-binary-log/</link>
		<comments>http://www.orczhou.com/index.php/2011/11/how-mysql-send-the-binary-log/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 15:53:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Replication]]></category>
		<category><![CDATA[图解]]></category>

		<guid isPermaLink="false">http://www.orczhou.com/?p=3279</guid>
		<description><![CDATA[<p>MySQL Replication可以很方便的用来做应用的读扩展，也可以帮MySQL实现一定程度的HA方案。MySQL通过<a href="http://www.orczhou.com/index.php/2009/04/how-mysql-replication-works/">向备库传送二进制日志来实现Replication</a>，本文将通过二进制日志相关源代码的主要接口来解释：“<strong>MySQL如何传输二进制日志，是主库推，还是备库拉？MySQL日志传输的实时性如何？</strong>”。</p>
<p>在MySQL Replication结构中，备库端初次通过<a href="http://dev.mysql.com/doc/refman/5.1/en/change-master-to.html">CHANGE MASTER TO</a>完成Replication配置，再使用start slave命令开始复制。更细致的，备库通过IO Thread向主库发起读取binlog的请求（COM_BINLOG_DUMP命令），主库收到COM_BINLOG_DUMP请求后，使用单独线程（dump thread）不断向备库IO Thread发送Binlog。示意图(<a href="http://farm7.staticflickr.com/6237/6369693149_49d43db964_b.jpg">大图</a>)：<br />
<a href="http://www.orczhou.com/wp-content/uploads/2011/11/how_mysql_send_binary_log.jpg"><img src="http://www.orczhou.com/wp-content/uploads/2011/11/how_mysql_send_binary_log.jpg" alt="" title="how_mysql_send_binary_log" width="686" height="369" class="alignleft size-full wp-image-3292" /></a></p>
<p>[......]</p><p class='read-more'><a href='http://www.orczhou.com/index.php/2011/11/how-mysql-send-the-binary-log/'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>MySQL Replication可以很方便的用来做应用的读扩展，也可以帮MySQL实现一定程度的HA方案。MySQL通过<a href="http://www.orczhou.com/index.php/2009/04/how-mysql-replication-works/">向备库传送二进制日志来实现Replication</a>，本文将通过二进制日志相关源代码的主要接口来解释：“<strong>MySQL如何传输二进制日志，是主库推，还是备库拉？MySQL日志传输的实时性如何？</strong>”。</p>
<p>在MySQL Replication结构中，备库端初次通过<a href="http://dev.mysql.com/doc/refman/5.1/en/change-master-to.html">CHANGE MASTER TO</a>完成Replication配置，再使用start slave命令开始复制。更细致的，备库通过IO Thread向主库发起读取binlog的请求（COM_BINLOG_DUMP命令），主库收到COM_BINLOG_DUMP请求后，使用单独线程（dump thread）不断向备库IO Thread发送Binlog。示意图(<a href="http://farm7.staticflickr.com/6237/6369693149_49d43db964_b.jpg">大图</a>)：<br />
<a href="http://www.orczhou.com/wp-content/uploads/2011/11/how_mysql_send_binary_log.jpg"><img src="http://www.orczhou.com/wp-content/uploads/2011/11/how_mysql_send_binary_log.jpg" alt="" title="how_mysql_send_binary_log" width="686" height="369" class="alignleft size-full wp-image-3292" /></a></p>
<p><span id="more-3279"></span></p>
<p>在主库端一旦有新的日志产生后，立刻会发送一次广播，dump线程在收到广播后，则会读取二进制日志并通过网络向备库传输日志，所以这是一个主库向备库不断推送的过程；</p>
<p>新日志在产生后，只需一次广播和网络就会立刻（<1ms）向发送到备库，如果主备之间网络较好的话（例如RTT<1ms），备库端的日志也就小于2ms了。所以，一般的（依赖于RTT），备库的实时性都非常好。</p>
<p>参考：</p>
<p>1. <a href="http://dev.mysql.com/doc/refman/5.1/en/replication.html">MySQL Replication Manual</a></p>
<p>2. <a href="http://www.orczhou.com/index.php/2009/04/how-mysql-replication-works/">图解"How MySQL Replication Works" </a></p>
<p>Have fun!</p>
<p><embed src="http://www.xiami.com/widget/0_1025147/singlePlayer.swf" type="application/x-shockwave-flash" width="257" height="33" wmode="transparent"></embed></p>
<p>广告：<a href="http://www.orczhou.com/index.php/projects/we-are-hunting-mysql-hacker/">我们寻找靠谱的人</a> | <a href="http://www.orczhou.com/index.php/wish-list/">感谢作者</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.orczhou.com/index.php/2011/11/how-mysql-send-the-binary-log/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MySQL 5.5 Semi Sync Replication</title>
		<link>http://www.orczhou.com/index.php/2009/12/mysql-55-semi-sync-replication/</link>
		<comments>http://www.orczhou.com/index.php/2009/12/mysql-55-semi-sync-replication/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 15:48:29 +0000</pubDate>
		<dc:creator>orczhou</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[MySQL5.5]]></category>
		<category><![CDATA[Replication]]></category>
		<category><![CDATA[semi-sync]]></category>
		<category><![CDATA[semi-sync replication]]></category>

		<guid isPermaLink="false">http://www.orczhou.com/?p=1099</guid>
		<description><![CDATA[<p>今天看到MySQL5.5放出了第一个版本<a href="http://dev.mysql.com/downloads/mysql/5.5.html">MySQL 5.5 Community Edition - Milestone Release</a>，最大的增强莫过于加入了<a href="http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html">Semi Sync Replication</a>的支持（虽然仍不完善）。</p>
<p>这里做一个科普，简单介绍一下Semisynchronous Replication：[......]</p><p class='read-more'><a href='http://www.orczhou.com/index.php/2009/12/mysql-55-semi-sync-replication/'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>今天看到MySQL5.5放出了第一个版本<a href="http://dev.mysql.com/downloads/mysql/5.5.html">MySQL 5.5 Community Edition - Milestone Release</a>，最大的增强莫过于加入了<a href="http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html">Semi Sync Replication</a>的支持（虽然仍不完善）。</p>
<p>这里做一个科普，简单介绍一下Semisynchronous Replication：<span id="more-1099"></span></p>
<p><font color="red">1. Why Semisynchronous Replication?</font></p>
<p>之前版本的MySQL Replication都是异步（asynchronous）的，主库在执行完一些事务后，是不会管备库的进度的。如果备库不幸落后，而更不幸的是主库此时又出现Crash（例如宕机），这时备库中的数据就是不完整的。简而言之，在主库发生故障的时候，我们无法使用备库来继续提供数据一致的服务了。</p>
<p>Semisynchronous Replication则一定程度上保证提交的事务已经传给了至少一个备库。</p>
<p><font color="red">2. 为什么是Semi synchronous而不是Full synchronous？</font></p>
<p>Semi synchronous中，仅仅保证事务的已经传递到备库上，但是并不确保已经在备库上执行完成了。</p>
<p>此外，还有一种情况会导致主备数据不一致。在某个session中，主库上提交一个事务后，会等待事务传递给至少一个备库，如果在这个等待过程中主库Crash，那么也可能备库和主库不一致，这是<strong>很致命</strong>的。（在主库恢复后，可以通过参数Rpl_semi_sync_master_no_tx观察）</p>
<p><font color="red">3. 如果主备之间连接出现故障，主库是否会一直等待？</font></p>
<p>如果主备网络故障或者备库挂了，主库在事务提交后等待10秒（rpl_semi_sync_master_timeout的默认值）后，就会继续。这时，主库就会变回原来的异步状态。</p>
<p><font color="red">4. 最后</font></p>
<p>且不论5.5是否稳定，现在的Semi synchronous Replication也还是很不完善的，希望能够继续健壮直至稳定。</p>
<p>嗨，谁知道呢？</p>
<p><!--worked by orczhou@gmail.com Under http://creativecommons.org/licenses/by-nc-sa/2.5/cn/--!></p>
]]></content:encoded>
			<wfw:commentRss>http://www.orczhou.com/index.php/2009/12/mysql-55-semi-sync-replication/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>图解&quot;How MySQL Replication Works&quot;</title>
		<link>http://www.orczhou.com/index.php/2009/04/how-mysql-replication-works/</link>
		<comments>http://www.orczhou.com/index.php/2009/04/how-mysql-replication-works/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 10:10:13 +0000</pubDate>
		<dc:creator>orczhou</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Replication]]></category>
		<category><![CDATA[图解]]></category>

		<guid isPermaLink="false">http://orczhou.com/?p=192</guid>
		<description><![CDATA[<p>上图先：<br />
<a href="http://www.flickr.com/photos/26825745@N06/3455232156/" title="replication by orczhou, on Flickr"><img src="http://farm4.static.flickr.com/3660/3455232156_dc09e11b22_o.jpg" width="616" height="610" alt="replication" /></a>[......]</p><p class='read-more'><a href='http://www.orczhou.com/index.php/2009/04/how-mysql-replication-works/'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>上图先：<br />
<a href="http://www.flickr.com/photos/26825745@N06/3455232156/" title="replication by orczhou, on Flickr"><img src="http://farm4.static.flickr.com/3660/3455232156_dc09e11b22_o.jpg" width="616" height="610" alt="replication" /></a><span id="more-192"></span></p>
<p><a href="http://farm4.static.flickr.com/3660/3455232156_c16f2f1d66.jpg?v=0" target="_blank"></a>在使用MySQL的应用中，如果你的MySQL Server压力逐渐增大，在应用层优化已经到了一定瓶颈时，那么你应该首先考虑<a href="http://dev.mysql.com/doc/refman/5.0/en/replication.html" target="_blank">MySQL_Replication</a>。本文将利用图示的方式简单的描述出MySQL Replication是如何工作的。</p>
<p><span style="color: #0000ff;"><strong>如何同步</strong></span></p>
<ol>
<li>主库将所有的更新操作，写入二进制日志。</li>
<li>从库运行"IO线程"（Slave IO Thread）读取主库的二进制日志。</li>
<li>从库运行"SQL线程"（Slave SQL Thread）执行IO线程（Slave IO Thread）读取的日志中的SQL,从而保持和主库的一致。</li>
</ol>
<p><strong><span style="color: #0000ff;">如何分配请求</span></strong></p>
<ol>
<li>目前，这部分需要在应用层实现。</li>
<li>执行更新SQL(UPDATE，INSERT，DELETE)时，请求主库。</li>
<li>执行查询SQL(SELECT)时，请求从库。</li>
</ol>
<p>所以，当你的应用(Application)SELECT请求所占的比率越大，那么Relication就会越有效。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orczhou.com/index.php/2009/04/how-mysql-replication-works/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

