123
返回列表 发新帖
楼主: ono888

某知名电商的两道关于MYSQL主从的面试题

[复制链接]
论坛徽章:
3
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31
21#
 楼主| 发表于 2012-9-29 09:57 | 只看该作者
昨天搭建了两种情况研究了一下:
第一种情况实际先不考虑切换也是有问题的,虽然数据能正确复制到两个SLAVE但是日志会一直报错,现象就是slave连接到MASTER的IO进程不停的被重连,至于有朋友提出切换时因为都是servidid2会有麻烦个人认为是可以解决的,你可以调整serverid,然后根据你要切换成slave的那个机器的relay log的最后一个event的时间戳去找到相应的日志位置,再reset slave重新复制。至于为什么io进程要被重置只有看了源码才能确认原因了。

使用道具 举报

回复
论坛徽章:
1
ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00
22#
发表于 2012-9-29 11:34 | 只看该作者
pickup112 发表于 2012-9-29 08:48
1的问题是,slave的id都是2。如果master挂掉,那么slave之间可能要搭建复制,由于server-id相同,所以搭建复 ...

同意pickup的的说法,机子多了,还是有可能出现这种情况的。
1.是server-id为2的不是直接m-s,应该是可以正常运行,不过,当出现问题,把slave提为Master就有问题了,不过, server-id是动态参数,可以动态更新。

2问题:这个能运行,但第3个机子,数据一直不会更新。 IO thread会把写relay log. 但SQL thread不会执行relay log里的事件。 因为mysql事件对应server-id由第一个执行机子产生,所以当第二个机子写入binlog时,server-id还是1;但server-id与本机相同时,则不会执行。

使用道具 举报

回复
招聘 : 其它语言研发
论坛徽章:
7
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:222012新春纪念徽章
日期:2012-01-04 11:55:05ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:33蛋疼蛋
日期:2013-02-18 16:32:512013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
23#
发表于 2012-9-29 14:24 | 只看该作者
1.有问题。
master的负载比正常的配置,稍微高。两个slave主从同步稍微慢点。(不过这个一般看不出来)
【现象】:master负载稍微高点。从库同步稍微慢点。
【原因】:master不断响应2个slave的请求。在这2个slave中切换。slave不断重连master,每次io线程要获取binlog,都得重新认证一遍。
【解决】:通过一些算法,确保公司每个server-id随机,并且不重复,或者降低重复的概率。

2.有问题
【现象】:二级slave不会同步一级slave中,更新的master的事件。(知道主从同步原理的,这个就不用解释了,必然会这样,这么配置的人应该清楚)
其它正常。
【解决】:解决办法同上。

使用道具 举报

回复
招聘 : 其它语言研发
论坛徽章:
7
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:222012新春纪念徽章
日期:2012-01-04 11:55:05ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:33蛋疼蛋
日期:2013-02-18 16:32:512013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
24#
发表于 2012-9-29 14:26 | 只看该作者
补充下,正常情况下 master会为每个从库 io线程,开一个dump 线程.....,这些都是基本的.....

使用道具 举报

回复
论坛徽章:
0
25#
发表于 2012-10-1 09:45 | 只看该作者
第二个问题的答案同意18楼 pickup112
第一个问题需要熟悉MySQL的源码和实际测试过这种情况。具体的现象见21楼 ono888。它的原因是:两个Slave连接到master,master会有机制记录slave的信息,对应的为slave新建一个binlog dump的线程,用于将slave需要的binlog传送给备库。它采用一个类似于hash的结构保持,而hash的键值就是server_id,第二个server_id相同的slave注册上来的时候,MySQL认为之前的server id对应的binlog dump线程需要重新初始化,以便根据slave的需求定位到对应的binlog和position位置,然后从该位置获取binlog event,发送给新的slave。原来的binlog dump线程怎么办列?既然是同一个server_id发送过来的,它认为这个是有问题的,所以原binlog dump线程会在新binlog dump线程之前被释放掉。
slave线程会自动重连上来,结果老的slave稍等一下就会重连,把刚刚连上来的线程又断掉。所以看到的现象就是两个slave不断重连master。
另外,提供一个算server_id的办法:通过IP和实例号来计算得到server_id。IP在两个MySQL之间是不应该冲突的;但是一个IP上可能有多个实例,所以需要再加上实例号来区分各个MySQL。

使用道具 举报

回复
论坛徽章:
3
ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152013年新春福章
日期:2013-02-25 14:51:24茶鸡蛋
日期:2013-02-28 16:48:41
26#
发表于 2012-10-7 11:39 | 只看该作者
kerlion 发表于 2012-9-28 14:48
测试了下,1可以2不可以
2不可以的原因:log_slave_udpate的时候,它并没有吧源的server_id改成自己的serv ...

ID和MASTER不同的可以,相同的不行,相同的同步会停止,最初做MASTER,SLAVE的时候,就遇到这个问题了。

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
27#
发表于 2012-10-10 12:33 | 只看该作者
mark下
在于折腾~~

使用道具 举报

回复
论坛徽章:
0
28#
发表于 2012-10-11 17:42 | 只看该作者
第一个有问题的;
第二个还是可以的;

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表