<?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>风叶 &#187; bin-log</title>
	<atom:link href="http://blog.myhnet.cn/tag/bin-log/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.myhnet.cn</link>
	<description>秋湍泻石髓 风叶聚云根</description>
	<lastBuildDate>Fri, 20 Aug 2010 15:05:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>关于Mysql主从数据库的设置［转］</title>
		<link>http://blog.myhnet.cn/2008/12/16/how-to-configure-replication-master-slave-databases-in-mysql/</link>
		<comments>http://blog.myhnet.cn/2008/12/16/how-to-configure-replication-master-slave-databases-in-mysql/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 09:20:52 +0000</pubDate>
		<dc:creator>myhnet</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[安装配置]]></category>
		<category><![CDATA[bin-log]]></category>
		<category><![CDATA[master]]></category>
		<category><![CDATA[mysqldump]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[slave]]></category>
		<category><![CDATA[数据备份]]></category>
		<category><![CDATA[主从数据库]]></category>

		<guid isPermaLink="false">http://blog.myhnet.cn/?p=189</guid>
		<description><![CDATA[来源：http://caiying0504.javaeye.com/blog/176432 一般使用MySQL的时候，如果数据量不大，我们都使用一台MySQL服务器，备份的时候使用mysqldump工具就可以了，但是随着业务不断发展，问题出现了： 首先：数据量往往直线上升，单独一台数据库服务器开始出现性能的瓶颈，数据访问越来越慢。 其次：备份也变得困难了，因为mysqldump是导出一份文本文件，而数据量特别大的时候，这样的备份往往需要很长时间，可能有人会说，我们可以直接通过拷贝数据文件来备份数据库，这样很方便，快捷，不错，这样是比mysqldump方便快捷，但是，直接拷贝数据文件备份的方式要求我们必须先关闭mysql服务，然后再拷贝数据文件，否则，你拷贝的文件很可能是坏的。而实际运行的mysql服务往往要求在任何时候都不可以停止服务，所以这样的备份方式在此情况下不可行。 如果你遇到了类似上面的问题，你就可以使用建立MySQL主从服务器的方式来解决，下面先来看看主从服务器的设置： 前提：MySQL主从服务器最好使用相同的软件版本，以避免不不可预期的故障。 首先设置MySQL主服务器： 在主服务器上为从服务器建立一个用户： grant replication slave on *.* to '用户名'@'主机' identified by '密码'; 编辑主服务器的配置文件：/etc/my.cnf的mysqld处 server-id = 1log-binbinlog-do-db=需要备份的数据库名，如果备份多个数据库，重复设置这个选项即可binlog-ignore-db=不需要备份的数据库苦命，如果备份多个数据库，重复设置这个选项即可 编辑从服务器的配置文件：/etc/my.cnf server-id=2master-host=主机master-user=用户名master-password=密码master-port=端口replicate-do-db=需要备份的数据库名，如果备份多个数据库，重复设置这个选项即可 记得先手动同步一下主从服务器中要备份的数据库，然后重启主，从服务器。 要验证主从设置是否已经成功，可以登录从服务器输入如下命令： mysql&#62; show slave status\G 会得到类似下面的列表： Slave_IO_Running: YesSlave_SQL_Running: Yes 如果这两个选项不全是Yes，那就说明你前面某个步骤配置错了。 如果你的设置是正确的，尝试在主服务器上插入若干条记录，然后你再转到从服务器，会发现相应的新记录已经自动同步过来了。 如果你的主从服务器已经配置好了，那么你在应用程序中，只要保证所有的insert/delete/update操作是在主服务器上进行的，那么相应的数据变化会自动同步到从服务器上，这样，我们就可以把select操作分担到多台从数据库上，从而降低服务器的载荷。 如果你想使用复制数据文件的方式来备份数据库，只要在从服务器上的mysql命令行先键入slave stop;然后复制数据库文件，复制好了，再 在mysql命令行键入slave start;启动从服务器，这样就即备份了数据有保证了数据完整性，而且整个过程中主服务器的mysql无需停止。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 提示：如果修改了主服务器的配置，记得删除从服务器上的master.info文件。否则从服务器使用的还是老配置，可能会导致错误。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 注意：关于要复制多个数据库时，binlog-do-db和replicate-do-db选项的设置，网上很多人说是用半角逗号分隔，经过测试，这样的说法是错误的，MySQL官方文档也明确指出，如果要备份多个数据库，只要重复设置相应选项就可以了。 比如： binlog-do-db=abinlog-do-db=breplicate-do-db=areplicate-do-db=b &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 补充：从服务器上my.cnf中的master-*的设置仅在第一次生效，后保存在master.info文件里。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 在从服务器上使用show slave status Slave_IO_Running,为No,则说明IO_THREAD没有启动，请执行slave start [...]]]></description>
			<content:encoded><![CDATA[<p>来源：http://caiying0504.javaeye.com/blog/176432</p>
<p>一般使用MySQL的时候，如果数据量不大，我们都使用一台MySQL服务器，备份的时候使用mysqldump工具就可以了，但是随着业务不断发展，问题出现了：<br />
首先：数据量往往直线上升，单独一台数据库服务器开始出现性能的瓶颈，数据访问越来越慢。<br />
其次：备份也变得困难了，因为mysqldump是导出一份文本文件，而数据量特别大的时候，这样的备份往往需要很长时间，可能有人会说，我们可以直接通过拷贝数据文件来备份数据库，这样很方便，快捷，不错，这样是比mysqldump方便快捷，但是，直接拷贝数据文件备份的方式要求我们必须先关闭mysql服务，然后再拷贝数据文件，否则，你拷贝的文件很可能是坏的。而实际运行的mysql服务往往要求在任何时候都不可以停止服务，所以这样的备份方式在此情况下不可行。<br />
如果你遇到了类似上面的问题，你就可以使用建立MySQL主从服务器的方式来解决，下面先来看看主从服务器的设置：<br />
前提：MySQL主从服务器最好使用相同的软件版本，以避免不不可预期的故障。</p>
<p><span id="more-189"></span><br />
首先设置MySQL主服务器：<br />
在主服务器上为从服务器建立一个用户：</p>
<div class="hl-surround"><div class="hl-main">grant replication slave on *.* to '用户名'@'主机' identified by '密码';</div></div>
<p>编辑主服务器的配置文件：/etc/my.cnf的mysqld处</p>
<div class="hl-surround"><div class="hl-main">server-id = 1<br />log-bin<br />binlog-do-db=需要备份的数据库名，如果备份多个数据库，重复设置这个选项即可<br />binlog-ignore-db=不需要备份的数据库苦命，如果备份多个数据库，重复设置这个选项即可</div></div>
<p>编辑从服务器的配置文件：/etc/my.cnf</p>
<div class="hl-surround"><div class="hl-main">server-id=2<br />master-host=主机<br />master-user=用户名<br />master-password=密码<br />master-port=端口<br />replicate-do-db=需要备份的数据库名，如果备份多个数据库，重复设置这个选项即可</div></div>
<p>记得先手动同步一下主从服务器中要备份的数据库，然后重启主，从服务器。<br />
要验证主从设置是否已经成功，可以登录从服务器输入如下命令：</p>
<div class="hl-surround"><div class="hl-main">mysql&gt; show slave status\G</div></div>
<p>会得到类似下面的列表：</p>
<div class="hl-surround"><div class="hl-main">Slave_IO_Running: Yes<br />Slave_SQL_Running: Yes</div></div>
<p>如果这两个选项不全是Yes，那就说明你前面某个步骤配置错了。<br />
如果你的设置是正确的，尝试在主服务器上插入若干条记录，然后你再转到从服务器，会发现相应的新记录已经自动同步过来了。<br />
如果你的主从服务器已经配置好了，那么你在应用程序中，只要保证所有的insert/delete/update操作是在主服务器上进行的，那么相应的数据变化会自动同步到从服务器上，这样，我们就可以把select操作分担到多台从数据库上，从而降低服务器的载荷。<br />
如果你想使用复制数据文件的方式来备份数据库，只要在从服务器上的mysql命令行先键入slave stop;然后复制数据库文件，复制好了，再 在mysql命令行键入slave start;启动从服务器，这样就即备份了数据有保证了数据完整性，而且整个过程中主服务器的mysql无需停止。<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
提示：如果修改了主服务器的配置，记得删除从服务器上的master.info文件。否则从服务器使用的还是老配置，可能会导致错误。<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
注意：关于要复制多个数据库时，binlog-do-db和replicate-do-db选项的设置，网上很多人说是用半角逗号分隔，经过测试，这样的说法是错误的，MySQL官方文档也明确指出，如果要备份多个数据库，只要重复设置相应选项就可以了。<br />
比如：</p>
<div class="hl-surround"><div class="hl-main">binlog-do-db=a<br />binlog-do-db=b<br />replicate-do-db=a<br />replicate-do-db=b</div></div>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
补充：从服务器上my.cnf中的master-*的设置仅在第一次生效，后保存在master.info文件里。<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
在从服务器上使用show slave status<br />
Slave_IO_Running,为No,则说明IO_THREAD没有启动，请执行slave start [IO_THREAD]<br />
Slave_SQL_Running为No则复制出错,查看Last_error字段排除错误后执行slave start [SQL_THREAD]<br />
查看Slave_IO_State字段<br />
空 //复制没有启动<br />
Connecting to master//没有连接上master<br />
Waiting for master to send event//已经连上<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
可以使用LOAD DATA FROM MASTER语句来建立slave。但有约束条件：<br />
数据表要全部是MyISAM表，必须有SUPER权限，master的复制用户必须具备RELOAD和SUPER权限。<br />
在master端执行RESET MASTER清除已有的日志变更，<br />
此时slave端会因为找不到master日志无法启动IO_THREAD，请清空data目录下<br />
relay-log.info,hosname-relay-bin*等文件重新启动mysql<br />
中继日志文件默认的文件为hostname-relay-bin.nnn和hostname-relay-bin.index。可用从服务器的&#8211;<br />
relay-log和&#8211;relay-log-index选项修改。在从服务器中还有一个relay-log.info中继信息文件，可用<br />
&#8211;relay-log-info-file启动选项修改文件名。<br />
双机互备则是两个mysql同时配置为master及slave<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
主服务器上的相关命令：</p>
<div class="hl-surround"><div class="hl-main">show master status<br />show slave hosts<br />show {master|binary} logs<br />show binlog events<br />purge {master|binary} logs to 'log_name'<br />purge {master|binary} logs before 'date'<br />reset master(老版本flush master)<br />set sql_log_bin={0|1}</div></div>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
从服务器上的相关命令:</p>
<div class="hl-surround"><div class="hl-main">slave start<br />slave stop<br />SLAVE STOP IO_THREAD //此线程把master段的日志写到本地<br />SLAVE start IO_THREAD<br />SLAVE STOP SQL_THREAD //此线程把写到本地的日志应用于数据库<br />SLAVE start SQL_THREAD<br />reset slave<br />SET GLOBAL SQL_SLAVE_SKIP_COUNTER<br />load data from master<br />show slave status(SUPER,REPLICATION CLIENT)<br />CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //动态改变master信息<br />PURGE MASTER [before 'date'] 删除master端已同步过的日志</div></div>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8211;read-only<br />
该选项让从服务器只允许来自从服务器线程或具有SUPER权限的用户的更新。可以确保从服务器不接受来自客户的更新。 </p>
<p>附加一些bin-log的方法<br />
With your mysql client :</p>
<div class="hl-surround"><div class="hl-main">mysql -u root -p<br />then<br />mysql&gt; flush logs;<br />will create a brand new mysql-bin.0000xy<br />mysql&gt; purge binary logs to 'mysql-bin.0000xy';<br />will purge all your logs files before the last.</div></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.myhnet.cn/2008/12/16/how-to-configure-replication-master-slave-databases-in-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
