资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
MySQL 同步概念及配置同步概念及配置同步功能在 MySQL 3.23.15 就开始引进了,它可以把一个 MySQL 服务器上的数据复制到另一个服务器上去。单向同步的好处是稳健,高速,系统易管理:有了 master/slave 机制后,就更稳健了。当 master 上发生问题时,可以把 slave 作为备用切换过去。可以在 slave 和 master 之间分担一些查询,这就能加速响应时间。SELECT 查询就可以在 slave 上执行以减少 master 的负载。更新数据的语句则要放在 mater 上执行以保持 master 和 slave 的同步。当非更新操作占多数时,负载均衡就很有效了,不过这只是普通情况而言。另一个好处是可以在 slave 上备份数据,无需干扰 master。备份数据时 master 照样继续运作。二、同步机制实现概念二、同步机制实现概念MySQL 同步机制基于 master 把所有对数据库的更新、删除等)都记录在二进制日志里。因此,想要启用同步机制,在 master 就必须启用二进制日志。每个 slave 接受来自 master上在二进制日志中记录的更新操作,因此在 slave 上执行了这个操作的一个拷贝。所有的 slave 必须在启用二进制日志时把 master 上已经存在的数据拷贝过来。如果运行同步时 slave 上的数据和 master 上启用二进制日志时的数据不一致的话,那么 slave 同步就会失败。 (拷贝方法见后面)slave 上已经完整拷贝 master 数据后,就可以连接到 master 上然后等待处理更新了。如果 master 当机或者 slave 连接断开,slave 会定期尝试连接到 master 上直到能重连并且等待更新。重试的时间间隔由-master-connect-retry 选项来控制,它的默认值是 60 秒。每个 slave 都记录了它关闭时的日志位置。msater 是不知道有多少个 slave 连接上来或者哪个 slave 从什么时候开始更新。注:启用同步后,所有要同步的更新操作都必须在 master 上执行。否则,必须注意不要造成用户在master 上的更新和在 slave 上的更新引起冲突。1 1、同步实现步骤、同步实现步骤步骤一:MySQL 同步功能由 3 个线程(master 上 1 个,slave 上 2 个)来实现。执行START SLAVE 语句后,SLAVE 就创建一个 I/O 线程。步骤二:I/O 线程连接到 master 上,并请求 master 发送二进制日志中的语句。步骤三:master 创建一个线程来把日志的内容发送到 slave 上。这个线程在 master 上执行 SHOW PROCESSLIST 语句后的结果中的 Binlog Dump 线程便是。步骤四:slave 上的 I/O 线程读取 master 的 Binlog Dump 线程发送的语句,并且把它们拷贝到其数据目录下的中继日志(relay logs)中。步骤五:第三个是 SQL 线程,salve 用它来读取中继日志,然后执行它们来更新数据。可参见下图图示:如上图所示:每个 master/slave 上都有三个进程,master 有多个线程,他为每个 slave 连接都创建一个线程,而每个 slave 只有 I/O 和 SQL 线程。slave 有 2 个线程的好处:把读日志和执行分开成 2 个独立的任务。执行任务如果慢的话,读日志任务不会跟着慢下来。如:slave 停止了一段时间,那么 I/O 线程可以在 slave 启动后很快地从 master 上读取全部日志,尽管 SQL 线程可能落后 I/O 线程好几的小时。如果 slave 在 SQL 线程没全部执行完就停止了,但 I/O 线程却已经把所有的更新日志都读取并且保存在本地的中继日志中了,因此在 slave 再次启动后就会继续执行它们了。这就允许在 master 上清除二进制日志,因为 slave 已经无需去 master 读取更新日志了。2 2、在、在 master/slave 查看状态查看状态在 master 上,执行下面的命令,可以看到运行状态Mysq SHOW PROCESSLISTG;Mysql show master statusG;在 slave 上,可以执行以下命令Mysql show slave statusG;3 3、中继日志及状态文件、中继日志及状态文件中继日志中继日志默认地,中继日志的名字格式为 host_name-relay-bin.nnn,host_name 是服务器的主机名,nnn 是序号,如:sumi2-relay-bin.000008。索引中继日志索引中继日志slave 上用一个索引文件来跟踪当前正在使用的中继日志,这个文件的文件名是 host_name-relay-bin.index,如:sumi2-relay-bin.index。在下列条件中会创建一个新的中继日志:(1)slave 启动后,I/O 线程第一次启动(在 MySQL 5.0 中,每次 I/O 线程启动后都会新建一个中继日志,而不只是第一次启动时)。(2)刷新日志时;例如,执行 flush logs 语句或运行 mysqladmin flush-logs 命令(从 MySQL 4.0.14 开始才会创建新中继日志)。(3)当前的中继日志大小太大了, “太大了”是这么判断的:max_relay_log_size, 如果 max_relay_log_size 0 的话max_binlog_size, 如果 max_relay_log_size = 0 或 MySQL 低于 4.0.14状态文件状态文件状态文件,名字默认为 master.info and relay-log.info。slave 关闭后,会保留他们。当下一次 slave 启动时,就会读取这两个文件来判断从 master 读取到二进制日志的什么位置了,处理中继日志到什么位置了。三、三、MySQL 同步的设置同步的设置1 1、准备服务器、准备服务器准备两台服务器 192.168.0.32(master)和 192.168.0.25(slave) 。两个 MySQL 的basedir 目录都是/usr/local/mysql,数据存放路径/usr/local/mysq/data/。创建数据库 sumi_test1 为同步数据库,添加用户 sum 为专用同步的用户。注:Master 的 MySQL 版本和 Slave 的版本相同或者更低,Master 的版本一定不能高于 Slave 版本。2 2、设置、设置 MASTER 服务器服务器创建一个 MySQL 帐号为同步专用:Mysql grant replication slave,reload,super, on *.* to sum192.168.0.25 identified by sum123 ;Mysql FLUSH PRIVILEGES ;修改 my.cnf 文件# cat /etc/my.cnfmysqld/在 mysqd 中添加以下配置log-bin = mysql-binserver-id = 1binlog-do-db = sumi_test1/需要同步的数据库binlog-ignore-db = mysql/忽略此数据库同步,若还有其他数据库不需要同步,在下binlog-ignore-db = otherdb面一一列出;然后,将 sumi_test1 数据库导出,并导入 slave 数据库中,在启动同步之前,两边的数据要一致。3 3、设置、设置 Slave 服务器服务器修改 my.cnf 文件# vi /etc/my.cnfmysqld/在 mysqd 中添加以下配置log-bin = mysql-binserver-id = 2master-host = 192.168.0.32master-user = summaster-password = sum123master-port = 3306replicate-ignore-db = mysql/需要同步的数据库replicate-do-db = sumi_test1/忽略此数据库同步,若还有其他数据库不需要同步,在下replicate-do-db = otherdb面一一列出4 4、查看同步状态、查看同步状态Master 服务器Mysql show master statusG;* 1. row *File: mysql-bin.000003Position: 111052Binlog_Do_DB: sumi_test1Binlog_Ignore_DB: mysql1 row in set (0.00 sec)ERROR: No query specifiedSlave 服务器Mysql show slave statusG;* 1. row *Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.0.32Master_User: sumMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000003Read_Master_Log_Pos: 111052Relay_Log_File: sumi2-relay-bin.000014Relay_Log_Pos: 251Relay_Master_Log_File: mysql-bin.000003Slave_IO_Running: Yes/如果都是 yes,那代表已经在同步Slave_SQL_Running: YesReplicate_Do_DB: sumi_test1Replicate_Ignore_DB: mysql四、同步数据方法四、同步数据方法终于学会了王总的方法,进行数据同步,网上的方法是将 master 数据库文件拿过来,势必要终止往主数据库写入,可以参考:http:/vps.15099.net/2009/01/mysql-replication-in-two-vps-hosting-546.html但是这样从数据库们也不能使用了,王总的方法,可以不影响主数据库写入,从一个从数据库中将数据表拷贝到新 slave 服务器或问题服务器上来。环境Slave1 数据库 IP:211.103.156.201 hostname:C2.xywy.comSlave2 数据库 IP:211.103.156.203 hostname:C6.xywy.com步骤1、先在新的 slave 上配置好 mysql配置方法见上面章节2、停止 slave 数据库 slave IP:211.103.156.201# /usr/local/mysq/bin/mysqladmin -uroot -p shutdown# cd /usr/local/mysql/var/3、只拷贝需要同步的数据库(club)及需要的日志文件# tar -zcvf club.tar.gz club需要备份的日志文件relay-log.info c2-relay-bin.index c2-relay-bin.000122 /当前执行到的日志master.info# tar -zcvf daillog.tar.gz relay-log.info c2-relay-bin.index c2-relay-bin.000122 master.info4、在 slave2 上解压数据库
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号