<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[歌声与微笑]]></title> 
<link>http://www.gsywx.com/index.php</link> 
<description><![CDATA[歌声与微笑]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[歌声与微笑]]></copyright>
<item>
<link>http://www.gsywx.com/read.php/84.htm</link>
<title><![CDATA[MySQL数据库主从配置中需要注意的问题:]]></title> 
<author>admin &lt;admin@gsywx.com&gt;</author>
<category><![CDATA[转载]]></category>
<pubDate>Fri, 16 Jul 2010 04:39:28 +0000</pubDate> 
<guid>http://www.gsywx.com/read.php/84.htm</guid> 
<description>
<![CDATA[ 
	MySQL主从数据库配置注意问题:<br/><br/>&nbsp;&nbsp; 一般使用MySQL的时候，如果数据量不大，我们都使用一台MySQL服务器，备份的时候使用mysqldump工具就可以了，但是随着业务不断发展，问题出现了：&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先：数据量往往直线上升，单独一台数据库服务器开始出现性能的瓶颈，数据访问越来越慢。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其次：备份也变得困难了，因为mysqldump是导出一份文本文件，而数据量特别大的时候，这样的备份往往需要很长时间，可能有人会说，我们可以直接通过拷贝数据文件来备份数据库，这样很方便，快捷，不错，这样是比mysqldump方便快捷，但是，直接拷贝数据文件备份的方式要求我们必须先关闭mysql服务，然后再拷贝数据文件，否则，你拷贝的文件很可能是坏的。而实际运行的mysql服务往往要求在任何时候都不可以停止服务，所以这样的备份方式在此情况下不可行。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果你遇到了类似上面的问题，你就可以使用建立MySQL主从服务器的方式来解决，下面先来看看主从服务器的设置： <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前提：MySQL主从服务器最好使用相同的软件版本，以避免不不可预期的故障。 <br/>首先设置MySQL主服务器： <br/>在主服务器上为从服务器建立一个用户任意主机用户： <br/>grant replication slave on *.* to '用户名'@'主机' identified by '密码'; <br/>也可以使用phpmyadmin来管理建立用户和数据库<br/>编辑主服务器的配置文件：/etc/my.cnf的mysqld处<br/><br/>server-id = 1 <br/>log-bin <br/>binlog-do-db=需要备份的数据库名，如果备份多个数据库，重复设置这个选项即可 <br/>binlog-ignore-db=不需要备份的数据库苦命，如果备份多个数据库，重复设置这个选项即可 <br/>编辑从服务器的配置文件：/etc/my.cnf <br/>server-id=2 <br/>master-host=主机 <br/>master-user=用户名 <br/>master-password=密码 <br/>master-port=端口 <br/>replicate-do-db=需要备份的数据库名，如果备份多个数据库，重复设置这个选项即可 <br/>记得先手动同步一下主从服务器中要备份的数据库，然后重启主，从服务器。 <br/>要验证主从设置是否已经成功，可以登录从服务器输入如下命令： <br/>mysql> show slave status&#92;G <br/>会得到类似下面的列表： <br/>Slave_IO_Running: Yes <br/>Slave_SQL_Running: Yes <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果这两个选项不全是Yes，那就说明你前面某个步骤配置错了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你的设置是正确的，尝试在主服务器上插入若干条记录，然后你再转到从服务器，会发现相应的新记录已经自动同步过来了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果你的主从服务器已经配置好了，那么你在应用程序中，只要保证所有的insert/delete/update操作是在主服务器上进行的，那么相应的数据变化会自动同步到从服务器上，这样，我们就可以把select操作分担到多台从数据库上，从而降低服务器的载荷。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果你想使用复制数据文件的方式来备份数据库，只要在从服务器上的mysql命令行先键入slave stop;然后复制数据库文件，复制好了，再 在mysql命令行键入slave start;启动从服务器，这样就即备份了数据有保证了数据完整性，而且整个过程中主服务器的mysql无需停止。 <br/>----------------------------------------------------------------------------------- <br/>提示：如果修改了主服务器的配置，记得删除从服务器上的master.info文件。否则从服务器使用的还是老配置，可能会导致错误。 <br/>----------------------------------------------------------------------------------- <br/>注意：关于要复制多个数据库时，binlog-do-db和replicate-do-db选项的设置，网上很多人说是用半角逗号分隔，经过测试，这样的说法是错误的，MySQL官方文档也明确指出，如果要备份多个数据库，只要重复设置相应选项就可以了。 <br/>比如： <br/>binlog-do-db=a <br/>binlog-do-db=b <br/>replicate-do-db=a <br/>replicate-do-db=b <br/>----------------------------------------------------------------------------------- <br/>补充：从服务器上my.cnf中的master-*的设置仅在第一次生效，后保存在master.info文件里。 <br/>----------------------------------------------------------------------------------- <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/>----------------------------------------------------------------------------------- <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。可用从服务器的-- <br/>relay-log和--relay-log-index选项修改。在从服务器中还有一个relay-log.info中继信息文件，可用 <br/>--relay-log-info-file启动选项修改文件名。 <br/>双机互备则是两个mysql同时配置为master及slave <br/>----------------------------------------------------------------------------------- <br/>主服务器上的相关命令：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>show master status <br/>show slave hosts <br/>show &#123;master&#124;binary&#125; logs <br/>show binlog events <br/>purge &#123;master&#124;binary&#125; logs to 'log_name' <br/>purge &#123;master&#124;binary&#125; logs before 'date' <br/>reset master(老版本flush master) <br/>set sql_log_bin=&#123;0&#124;1&#125; <br/>----------------------------------------------------------------------------------- <br/>从服务器上的相关命令: <br/>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端已同步过的日志 <br/>----------------------------------------------------------------------------------- <br/>--read-only <br/>该选项让从服务器只允许来自从服务器线程或具有SUPER权限的用户的更新。可以确保从服务器不接受来自客户的更新。<br/><br/>Tags - <a href="http://www.gsywx.com/go.php/tags/mysql/" rel="tag">mysql</a> , <a href="http://www.gsywx.com/go.php/tags/mysql%25E4%25B8%25BB%25E4%25BB%258E%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">mysql主从配置</a>
]]>
</description>
</item><item>
<link>http://www.gsywx.com/read.php/83.htm</link>
<title><![CDATA[MySQL同步故障： Slave_SQL_Running:No 两种解决办法]]></title> 
<author>admin &lt;admin@gsywx.com&gt;</author>
<category><![CDATA[转载]]></category>
<pubDate>Fri, 16 Jul 2010 04:35:52 +0000</pubDate> 
<guid>http://www.gsywx.com/read.php/83.htm</guid> 
<description>
<![CDATA[ 
	在配置mysql主从同步的时候遇到了查看从服务器状态显示为:<br/>Slave_SQL_Running:No<br/><br/>搜索通过以下第一种方法解决.主服务器已有数据,而从服务器因为当时配置的数据库版本不一致导致没法同步,后安装同一数据库版本后,运行状态为Slave_SQL_Running:No<br/><br/>以下为转贴:<br/><br/>故障状态:<br/>进入slave服务器，运行：<br/><br/>mysql> show slave status&#92;G<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .......<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Relay_Log_File: localhost-relay-bin.000535<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Relay_Log_Pos: 21795072<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Relay_Master_Log_File: localhost-bin.000094<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Slave_IO_Running: Yes<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Slave_SQL_Running: No<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replicate_Do_DB: <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replicate_Ignore_DB: <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;......<br/><br/>解决办法一、<br/><br/>Slave_SQL_Running: No<br/>1.程序可能在slave上进行了写操作<br/><br/>2.也可能是slave机器重起后，事务回滚造成的.<br/><br/>一般是事务回滚造成的：<br/>解决办法：<br/>mysql> slave stop;<br/>mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;<br/>mysql> slave start;<br/><br/> <br/><br/>解决办法二、<br/><br/>首先停掉Slave服务：slave stop<br/>到主服务器上查看主机状态：<br/>记录File和Position对应的值<br/><br/>进入master<br/><br/>mysql> show master status;<br/>+----------------------+----------+--------------+------------------+<br/>&#124; File&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; Position &#124; Binlog_Do_DB &#124; Binlog_Ignore_DB &#124;<br/>+----------------------+----------+--------------+------------------+<br/>&#124; localhost-bin.000094 &#124; 33622483 &#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124; <br/>+----------------------+----------+--------------+------------------+<br/>1 row in set (0.00 sec)<br/><br/> <br/><br/>然后到slave服务器上执行手动同步：<br/><br/>mysql> change master to <br/>> master_host='master_ip',<br/>> master_user='user', <br/>> master_password='pwd', <br/>> master_port=3306, <br/>> master_log_file=localhost-bin.000094', <br/>> master_log_pos=33622483 ;<br/>1 row in set (0.00 sec)<br/>mysql> slave start;<br/>1 row in set (0.00 sec)<br/><br/> <br/><br/>mysql> show slave status&#92;G<br/>*************************** 1. row ***************************<br/>........<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Master_Log_File: localhost-bin.000094<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read_Master_Log_Pos: 33768775<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Relay_Log_File: localhost-relay-bin.000537<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Relay_Log_Pos: 1094034<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Relay_Master_Log_File: localhost-bin.000094<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Slave_IO_Running: Yes<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Slave_SQL_Running: Yes<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replicate_Do_DB: <br/><br/>手动同步需要停止master的写操作！ <br/>Tags - <a href="http://www.gsywx.com/go.php/tags/mysql/" rel="tag">mysql</a> , <a href="http://www.gsywx.com/go.php/tags/mysql%25E4%25B8%25BB%25E4%25BB%258E%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">mysql主从配置</a> , <a href="http://www.gsywx.com/go.php/tags/mysql%25E4%25B8%25BB%25E4%25BB%258E%25E5%2587%25BA%25E9%2594%2599/" rel="tag">mysql主从出错</a>
]]>
</description>
</item>
</channel>
</rss>