杭州云 图科技有限公司-Topo研发项 目管理软件系统:研发,文档,计划,需求,测试,知识,代码管理,缺陷跟踪,工作日 志整体解决方案

MySQL Replication, 主从和双主配置

2011-04-08

MySQL的Replication是一种多个MySQL的数据 库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可 靠性要求的场合。与之对 应的另一个技术是同步的MySQL Cluster,但因为比较复杂,使用者较少。

下图是MySQL官方给出了使用Replication的场景:

Replication原理

Mysql 的 Replication 是一个 异步的复制过程,从一个MySQL节点(称之为Master)复制到另一个MySQL节点(称之Slave)。在 Master 与 Slave 之间的 实现整个复制过程主要由三个线程来完成,其中两个线程(SQL 线程和 I/O 线程)在 Slave 端,另外一个线程(I/O 线程)在 Master 端。

要实现 MySQL 的 Replication ,首先必须打开 Master 端的 Binary Log,因为整 个复制过程实际上就是 Slave 从 Master 端获取 该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。

看上去MySQL的Replication原理非常简单,总结一下:

  • 每个从 仅可以设置一个主。
  • 主在执行sql之后,记录二进制log文件(bin-log)。
  • 从连接主,并从主获取binlog,存于本地relay-log,并从上 次记住的位置起执行sql,一旦遇 到错误则停止同步。

从这几条Replication原理来看,可以有这些推论:

  • 主从间 的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。
  • 如果主从的网络断开,从会在网络正常后,批量同步。
  • 如果对 从进行修改数据,那么很 可能从在执行主的bin-log时出现 错误而停止同步,这个是很危险的操作。所以一般情况下,非常小 心的修改从上的数据。
  • 一个衍 生的配置是双主,互为主从配置,只要双 方的修改不冲突,可以工作良好。
  • 如果需要多主的话,可以用环形配置,这样任 意一个节点的修改都可以同步到所有节点。

主从设置

因为原理比较简单,所以Replication从MySQL 3就支持,并在所 有平台下可以工作,多个MySQL节点甚 至可以不同平台,不同版本,不同局域网。做Replication配置包括用户和my.ini(linux下为my.cnf)两处设置。

首先在主MySQL节点上,为slave创建一个用户:

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ’slave’@'192.168.1.10′ IDENTIFIED BY ’slave’;

实际上,为支持主从动态同步,或者手动切换,一般都 是在所有主从节点上创建好这个用户。然后就是MySQL本身的配置了,这需要修改my.cnf或者my.ini文件。在mysqld这一节下面增加:

server-id=1 auto-increment-increment=2 auto-increment-offset=1 log-bin binlog-do-db=mstest binlog_format=mixed

master-host=192.168.1.62 master-user=slave master-password=slave replicate-do-db=mstest

上面这两段设置,前一段是为主而设置,后一段是为从设置的。也就是说在两个MySQL节点上,各加一段就好。binlog-do-db和replicate-do-db就是设 置相应的需要做同步的数据库了,auto-increment-increment和auto-increment-offset是为了 支持双主而设置的(参考下一节),在只做主从的时候,也可以不设置。

双主的设置

从原理论来看MySQL也支持双主的设置,即两个MySQL节点互为主备,不过虽然理论上,双主只 要数据不冲突就可以工作的很好,但实际 情况中还是很容发生数据冲突的,比如在同步完成之前,双方都 修改同一条记录。因此在实际中,最好不 要让两边同时修改。即逻辑 上仍按照主从的方式工作。但双主 的设置仍然是有意义的,因为这样做之后,切换主 备会变的很简单。因为在出现故障后,如果之前配置了双主,则直接 切换主备会很容易。

双主在设置时,只需将 上面的一段设置复制一份,分别写入两个MySQL节点的配置文件,但要修改相应的server-id,auto-increment-offset和master-host。auto-increment-offset就是为 了让双主同时在一张表中进行添加操作时不会出现id冲突,所以在两个节点上auto-increment-offset设置为不同的值就好。

另:不要忘了,在两个 节点上都为对方创建用户。

应用层的负载均衡

本文只介绍了MySQL自身的Repilication配置,在上面 的图中也可以看出,有了Replication,还需要应用层(或者中间件)做一个负载均衡,这样才 能最大程度发挥MySQL Replication的优势,这些将在以后探讨。

免费试用
产品咨询
置顶
友情链接:    竞速彩票-首页   全球彩票游戏平台   春秋彩票_玩高赔率   金祥彩票-首页   678彩票