免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6223 | 回复: 11
打印 上一主题 下一主题

MySQL Replication, 主从和双主配置 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-08 10:47 |只看该作者 |倒序浏览
本帖最后由 cloudtopo 于 2011-04-08 10:56 编辑

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的优势,这些将在以后探讨。
更多信息,请访问项目管理资料库

论坛徽章:
0
2 [报告]
发表于 2011-04-09 14:17 |只看该作者
图挺漂亮

论坛徽章:
0
3 [报告]
发表于 2011-04-11 17:46 |只看该作者
mysql master-slave基本每人都会配置,维护起来,那叫一个够呛
oracle dg那是配起来基本不用管了

论坛徽章:
6
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:582015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2011-04-13 13:47 |只看该作者
单纯replication failover很麻烦, 正在考虑MMM方案

论坛徽章:
1
金牛座
日期:2013-10-09 00:50:40
5 [报告]
发表于 2013-05-22 02:27 |只看该作者
请问你能贴出一个配置mysql master-slave的详细步骤吗?

希望是MySQL Community Server (GPL) 5.6.11 版本的。
  

谢谢!


yanyp 发表于 2011-04-11 17:46
mysql master-slave基本每人都会配置,维护起来,那叫一个够呛
oracle dg那是配起来基本不用管了

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
6 [报告]
发表于 2013-05-22 09:19 |只看该作者
回复 1# cloudtopo


    双主master需要一点实践技巧,
一台mysql负责业务key=2n,另外一台负责业务key=2n+1,然后复制就没问题了

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
7 [报告]
发表于 2013-05-22 09:20 |只看该作者
补充一下,其实我也没实际的工作经验,不过以前看过高手的分享,
就是个大致意思。。

论坛徽章:
1
金牛座
日期:2013-10-09 00:50:40
8 [报告]
发表于 2013-05-22 13:21 |只看该作者
MySQL Replication与MySQL Cluster适用的场合有什么不同?

cloudtopo 发表于 2011-04-08 10:47
MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能 ...

论坛徽章:
0
9 [报告]
发表于 2013-05-24 14:22 |只看该作者
这只能解决写入数据ID不冲突的问题,解决不了修改冲突的问题回复 6# action08

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
10 [报告]
发表于 2013-05-27 15:50 |只看该作者
回复 9# ihisee


    要学会想办法规避问题,而不是出现问题然后再解决问题



资本家在中关村租个写字楼开公司,搭平台是给你机会表现英雄主义的啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP