<?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>baalchina &#187; replication</title>
	<atom:link href="http://www.baalchina.net/tag/replication/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.baalchina.net</link>
	<description>baalchina技术日志</description>
	<lastBuildDate>Tue, 27 Sep 2011 07:12:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>mysql的热备/Replication</title>
		<link>http://www.baalchina.net/2009/08/mysql-replication/</link>
		<comments>http://www.baalchina.net/2009/08/mysql-replication/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 10:36:27 +0000</pubDate>
		<dc:creator>baalchina</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[replication]]></category>

		<guid isPermaLink="false">http://www.baalchina.net/2009/08/mysql-replication/</guid>
		<description><![CDATA[mysql的双机热备机制其实比较简单。
几点注意的：

采用的是Master-Slave机制。Slave会从Master读取数据。 
Master必须打开二进制日志功能，通过my.cnf中的log-bin参数。 
需要Master上建立一个备份用户。 
通过Server-id来区别主/备。
第一次必须将数据完整同步，记得将Master锁定，导出，然后导入到备，设置好所有的Replication之后，unlock Master的表。 

&#160;
&#160;
下面是Master的my.cnf参数：
&#160;
server-id&#160;&#160;&#160;&#160;&#160;&#160; = 1      log-bin       binlog-do-db = ucenter       binlog-ignore-db = bbs

Server-id代表服务器编号。1是Master。Slave通过这个来同步。
需要启用二进制日志。log-bin可以指定log文件名称，也可以不写默认主机名。
下面是要备份和不要备份的database名称。
&#160;
查看状态：
mysql&#62; show master status\G;


如下：
&#160;
mysql&#62; show master status\G;     *************************** 1. row ***************************      &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; File: mysql-bin.000110  [...]]]></description>
			<content:encoded><![CDATA[<p>mysql的双机热备机制其实比较简单。</p>
<h3>几点注意的：</h3>
<ol>
<li>采用的是Master-Slave机制。Slave会从Master读取数据。 </li>
<li>Master必须打开二进制日志功能，通过my.cnf中的log-bin参数。 </li>
<li>需要Master上建立一个备份用户。 </li>
<li>通过Server-id来区别主/备。</li>
<li>第一次必须将数据完整同步，记得将Master锁定，导出，然后导入到备，设置好所有的Replication之后，unlock Master的表。 </li>
</ol>
<p>&#160;</p>
<p>&#160;</p>
<h3>下面是Master的my.cnf参数：</h3>
<p>&#160;</p>
<blockquote><p>server-id&#160;&#160;&#160;&#160;&#160;&#160; = 1      <br />log-bin       <br />binlog-do-db = ucenter       <br />binlog-ignore-db = bbs</p>
</blockquote>
<p>Server-id代表服务器编号。1是Master。Slave通过这个来同步。</p>
<p>需要启用二进制日志。log-bin可以指定log文件名称，也可以不写默认主机名。</p>
<p>下面是要备份和不要备份的database名称。</p>
<p>&#160;</p>
<p>查看状态：</p>
<blockquote><p>mysql&gt; show master status\G;</p>
</p>
</blockquote>
<p>如下：</p>
<p>&#160;</p>
<blockquote><p>mysql&gt; show master status\G;     <br />*************************** 1. row ***************************      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; File: mysql-bin.000110      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Position: 2602      <br />&#160;&#160;&#160; Binlog_Do_DB: ucenter      <br />Binlog_Ignore_DB: bx8,card,cmsware_plus2,cmsware_zone,comsenzcensor,d6,d61,d61new,d62,d63,discuz,discuzzone,disuczbackup,dz2,dzzone,mysql,nauzone,nauzone1,nauzone2,tzsc,uc,uch,uchome,wikidb,wp,xmjc      <br />1 row in set (0.00 sec) </p>
<p>ERROR:      <br />No query specified</p>
</blockquote>
<p> 记录下二进制日志以及Position。这里分别是<strong>mysql-bin.000110</strong>和<strong>2602</strong>，后面要用到。</p>
<p>&#160;</p>
<h3>下面是Slave的参数</h3>
<p>启动mysql，然后进入mysql命令行</p>
<blockquote><p>mysql&gt; change master to      <br />-&gt; master_host = 'ip_address',       <br />-&gt; master_user = 'username',       <br />-&gt; master_password = 'password',       <br />-&gt; master_log_file = 'mysql-bin.000110',       <br />-&gt; master_log_pos = 2602;</p>
</blockquote>
<p>&#160;</p>
<p>注意最后两个参数，是前面记下来的参数。</p>
<p>这时候在Master上会有这个进程：</p>
<p>&#160;</p>
<blockquote><p>*************************** 3. row ***************************     <br />&#160;&#160;&#160;&#160; Id: 939737      <br />&#160;&#160; User: replication      <br />&#160;&#160; Host: 210.28.92.215:56520      <br />&#160;&#160;&#160;&#160; db: NULL      <br />Command: Binlog Dump      <br />&#160;&#160; Time: 556      <br />&#160; State: Has sent all binlog to slave; waiting for binlog to be updated      <br />&#160;&#160; Info: NULL</p>
</blockquote>
<p>当然，Slave上也会有对应的进程：</p>
<blockquote><p>*************************** 2. row ***************************     <br />&#160;&#160;&#160;&#160; Id: 5      <br />&#160;&#160; User: system user      <br />&#160;&#160; Host:       <br />&#160;&#160;&#160;&#160; db: NULL      <br />Command: Connect      <br />&#160;&#160; Time: 609      <br />&#160; State: Waiting for master to send event      <br />&#160;&#160; Info: NULL      <br />*************************** 3. row ***************************      <br />&#160;&#160;&#160;&#160; Id: 6      <br />&#160;&#160; User: system user      <br />&#160;&#160; Host:       <br />&#160;&#160;&#160;&#160; db: NULL      <br />Command: Connect      <br />&#160;&#160; Time: -27246      <br />&#160; State: Has read all relay log; waiting for the slave I/O thread to update it      <br />&#160;&#160; Info: NULL      <br />3 rows in set (0.00 sec)</p>
</blockquote>
<h3>&#160;</h3>
<h3>Troubleshoot</h3>
<p>第一次做的时候show processlist，老是卡在<strong>Queueing master event to the relay log</strong>状态，当然也没法同步了。</p>
<p>[root@mysql-replication mysql]# <strong>tail /usr/local/mysql/var/mysql-replication.err</strong></p>
<p>错误提示如下：</p>
<blockquote><p>090802 10:01:07 [ERROR] Error reading packet from server: File './mysql-bin.000005' not found (Errcode: 2) ( server_errno=29)     <br />090802 10:01:07 [Note] Slave I/O thread: Failed reading log event, reconnecting to retry, log 'mysql-bin.000004' at postion 98</p>
</blockquote>
<p>好像是读取binlog错误。</p>
<p>然后看/usr/local/mysql/var下面无数的二进制文件..</p>
<p>参考这个：</p>
<p><a title="http://bbs.chinaunix.net/viewthread.php?tid=1311931&amp;extra=&amp;page=2" href="http://bbs.chinaunix.net/viewthread.php?tid=1311931&amp;extra=&amp;page=2">http://bbs.chinaunix.net/viewthread.php?tid=1311931&amp;extra=&amp;page=2</a></p>
<p>是由于数据不同步造成的。</p>
<p>&#160;</p>
<p>解决办法：</p>
<p>&#160;</p>
<p>首先，Master上</p>
<blockquote><p>mysql&gt; <strong>flush tables with read lock;</strong></p>
</blockquote>
<p>将表锁定。然后将需要备份的数据库打包移动到Slave数据库上。</p>
<p>Master上</p>
<p>启动Slave的MySQL，运行以下命令</p>
]]></content:encoded>
			<wfw:commentRss>http://www.baalchina.net/2009/08/mysql-replication/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

