浅谈我对Mysql高可用的理解

问题1:Mysql是如何保证不丢数据的?

众所周知,事务一旦提交,则对数据的改变将永久有效,这是数据库持久性的特性.那么Mysql是如何做到不丢数据的?什么是commit?事务commit时Mysql又做了什么?

数据的持久性机制依赖server层的binlog以及InnoDB存储引擎层的redolog.
事务的commit操作本身,包含两个阶段的处理:
准备阶段:
server调用InnoDB写入redolog

完成阶段:
1.server写入binlog
2.server调用InnoDB,写入commit标签(在redolog中)

其中,事务提交是否成功,以binlog是否成功落盘为准.
场景1:
准备阶段失败,redolog没有写入,则提交失败,且数据一致.

场景2:
准备阶段成功,redolog写入,完成阶段server写入binlog失败,则提交失败.此时数据不一致(存在redolog但不存在binlog).宕机恢复时,因为不存在binlog,因此需要对事务进行回滚.

场景3
完成阶段server写入binlog成功,server调用InnoDB,写入commit标签失败,则提交成功.此时数据不一致(redolog中缺少commit标志).宕机恢复时,补偿写入commit标签以及后续处理.

总结,提交时的两阶段处理,可以保证数据的持久性,以及binlog和redolog内部的一致性.

问题2:如何提高Mysql可用性?

Mysql的ACID的特性保证了其单机的可靠性,但是存在单点风险.
由此引出了主从架构和复制的概念.

所谓复制,就是slave负责从master读取binlog,并写入自己的relaylog中,之后通过relaylog进行重放,已达到数据同步的目的.

问题3:Mysql支持哪些复制以及对应的优缺点?

生产环境中常见的复制包含异步复制和半同步复制两种.

异步复制就是在master事务提交后,立即给客户端返回结果,将复制操作变为异步的.优点是不会影响客户端的响应时效,缺点是无法保证主从间的数据一致性.如果master宕机,则slave可能会丢失数据.

半同步复制就是在事务提交后,结果返回给客户端之前,增加了与slave见的复制和确认过程,只有接到slave的ack后,才会返回给客户端结果.相比异步复制,它增加了等待的时间,也即降低了客户端响应失效,但是保证了master与slave间的强一致性.

注意:如果master等待slave的ack时超时,则会降级为异步复制模式,所以生产中要将超时时间设置的足够大,来保证半同步的有效性.

问题4:Mysql5.7之前半同步存在的问题?

Mysql5.7之前,半同步的复制流程为:
prepare(写redolog)->写binlog->写commit标志->复制->确认.
这对应rpl_semi_sync_master_point=AFTER_COMMIT的配置.

复制发生在commit完成之后,因此在复制期间,客户端拿到结果之前,事务结果已经可见了.也就是说,其他会话会先于当前会话看到事务结果.

为了解决这一问题,Mysql5.7增加了rpl_semi_sync_master_point=AFTER_SYNC的配置,将复制流程变为:
prepare(写redolog)->写binlog->复制->确认->写commit标志.
也就是说复制和确认发生在binlog写入成功之后,InnoDBcommit之前,由此,在复制完成之前,其他会话不会看到当前事务的结果.

问题5:主从架构下,如何保证可用性的同时,确保数据一致性?

前文所述,事务的持久性是以binlog写入是否成功为准的.如果master在binlog写入成功之后,复制之前发生宕机,则slave没有拿到master的binlog.此时如果为了高可用而进行slave升主操作时,会导致丢数据.

通常的解决方案是:在升主之前进行主从之间的数据对比校验,以确保数据一致性.

问题6:数据校验期间Mysql不可写如何解决?

通常通过多主从组,加数据分片和路由解决.当某个master宕机时,将写入请求导入另外的master,并在此期间对故障master进行恢复和数据校验.

另外,为了对机房断电进行容灾,通常采用一机房双master-slave,外加多机房的部署架构.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352