问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql 如何解决数据一致性

发布网友 发布时间:2022-04-29 00:23

我来回答

2个回答

热心网友 时间:2022-04-07 22:10

MySQL主从复制

现在常用的MySQL高可用方案,十有*是基于 MySQL的主从复制(replication)来设计的,包括常规的一主一从、双主模式,或者半同步复制(semi-sync replication)。

我们常常把MySQL replication说成是MySQL同步(sync),但事实上这个过程是异步(async)的。大概过程是这样的:

在master上提交事务后,并且写入binlog,返回事务成功标记;

将binlog发送到slave,转储成relay log;

在slave上再将relay log读取出来应用。

步骤1和步骤3之间是异步进行的,无需等待确认各自的状态,所以说MySQL replication是异步的。

MySQL semi-sync replication在之前的基础上做了加强完善,整个流程变成了下面这样:

首先,master和至少一个slave都要启用semi-sync replication模式;

某个slave连接到master时,会主动告知当前自己是否处于semi-sync模式;

在master上提交事务后,写入binlog后,还需要通知至少一个slave收到该事务,等待写入relay log并成功刷新到磁盘后,向master发送“slave节点已完成该事务”确认通知;

master收到上述通知后,才可以真正完成该事务提交,返回事务成功标记;

在上述步骤中,当slave向master发送通知时间超过rpl_semi_sync_master_timeout设定值时,主从关系会从semi-sync模式自动调整成为传统的异步复制模式。

半同步复制看起来很美好有木有,但如果网络质量不高,是不是出现抖动,触发上述第5条的情况,会从半同步复制降级为普通复制;此外,采用半同步复制,会导致master上的tps性能下降非常严重,最严重的情况下可能会损失50%以上。

这样来看,除非需要非常严格保证数据一致性等迫不得已的场景,就不太建议使用半同步复制了。当然了,事实上我们也可以通过加强程序端的逻辑控制,来避免主从数据不一致时发生逻辑错误,比如说如果在从上读取到的数据和主不一致的话,那么就触发主从间的一次数据修复工作。或者,我们也可以用 pt-table-checksum & pt-table-sync 两个工具来校验并修复数据,只要运行频率适当,是可行的。

真想要提高多节点间的数据一致性,可以考虑采用PXC方案。现在已知用PXC规模较大的有qunar、sohu,如果团队里初期没有人能比较专注PXC的话,还是要谨慎些,毕竟和传统的主从复制差异很大,出现问题时需要花费更多精力去排查解决。

如何保证主从复制数据一致性

上面说完了异步复制、半同步复制、PXC,我们回到主题:在常规的主从复制场景里,如何能保证主从数据的一致性,不要出现数据丢失等问题呢?

在MySQL中,一次事务提交后,需要写undo、写redo、写binlog,写数据文件等等。在这个过程中,可能在某个步骤发生crash,就有可能导致主从数据的不一致。为了避免这种情况,我们需要调整主从上面相关选项配置,确保即便发生crash了,也不能发生主从复制的数据丢失。

1. 在master上修改配置

innodb_flush_log_at_trx_commit = 1
sync_binlog = 1

上述两个选项的作用是:保证每次事务提交后,都能实时刷新到磁盘中,尤其是确保每次事务对应的binlog都能及时刷新到磁盘中,只要有了binlog,InnoDB就有办法做数据恢复,不至于导致主从复制的数据丢失。

2. 在slave上修改配置

master_info_repository = "TABLE"
relay_log_info_repository = "TABLE"
relay_log_recovery = 1

上述前两个选项的作用是:确保在slave上和复制相关的元数据表也采用InnoDB引擎,受到InnoDB事务安全的保护,而后一个选项的作用是开启relay log自动修复机制,发生crash时,会自动判断哪些relay log需要重新从master上抓取回来再次应用,以此避免部分数据丢失的可能性。

通过上面几个选项的调整,就可以确保主从复制数据不会发生丢失了。但是,这并不能保证主从数据的绝对一致性,因为,有可能设置了ignore\do\rewrite等replication规则,或者某些SQL本身存在不确定因素,或者人为在slave上修改数据,最终导致主从数据不一致。这种情况下,可以采用pt-table-checksum 和 pt-table-sync 工具来进行数据的校验和修复。

热心网友 时间:2022-04-07 23:28

XtraBackup 在 MySQL 备份场景中被广泛使用,大家一定不陌生。我们也在之前的两篇文章中分享了其备份的原理。(详见 [原理解析] XtraBackup全量备份还原 & [原理解析] XtraBackup增量备份还原)本文想要描述的是 XtraBackup 恢复时参数 apply-log-only 的作用,不知道大家有没有注意到,这个参数如果不设置,可能会产生数据不一致的惨剧。
使用 XtraBackup 对数据库做备份,实际上就是拷贝 MySQL 的数据文件,为了保证备份数据的最终一致,也会同时拷贝备份过程中的 Redo log。
如图 1 所示,全备开始时,事务 2 尚未提交,Redo log 中仅有事务 2 的一部分数据(B->F),XtraBackup 于是将这一部分数据拷贝到全备文件中。如图 2 所示,增备开始时,事务 2 已经提交,Redo log 中有了事务 2 的完整数据。XtraBackup 于是将事务 2 的后一部分数据拷贝了下来。如图 3 所示,恢复时,首先恢复全备中的数据文件,然后回放全备中的 Redo log,回放过程中应用了一部分事务 2(B->F),如果没有设置 apply-log-only,XtraBackup 会在恢复最后一步应用 undo,将这一部分残缺的事务回滚(F->B),就此埋下了祸根。如图 4 所示,后续恢复增备文件时,继续回放了事务 2 的后一部分(E->G A->H),导致最终的数据文件中丢失了事务 2 第一部分的数据(B->F),惨剧就发生了。如图 5 所示,正确的做法应该是除了最后一个增备,所有的备份恢复都应该设置 apply-log-only 参数(only 指的就是只回放 redo log 阶段,跳过 undo 阶段),避免未完成事务的回滚。如图所示,此时全备恢复后的数据文件才是完整的(包含了B->F)。所有增备恢复完成后的数据也是完整的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
表格列求和公式怎么设置 求和函数公式怎么输入 北京注册成立一个公司需要多少钱 北京公司都是什么 手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 mysql的同步复制和异步复制有什么区别 春季吃海参会上火吗 春季男子禁欲时段可以大补吃海参吗 什么时期不能吃海参 春季吃海参好吗 注册表被修改,IE浏览器打不开。 春夏季宜吃海参吗?哪买的好? 苹果键盘在PC机上怎样驱动 Excel表格超链接打不开但是IE浏览器打开了就能打开怎么回事? 请教,我的电脑打开EXCEL2007的表格时,就不能打开IE浏览器。 windowsphone自带的ie浏览器显示不了表格 有解决的办法吗 在IE中联网打开Excel或word文档后关闭出错? 如何打开被windows防火墙阻止的程序 ie浏览器下载的word、ppt打不开,pdf可以打开,把文档到别的电脑能打开,用迅雷下能打开。求教。 电脑无法连接IPHONE,ITUNES没有反应,显示没有安装apple mobile device driver,但是多次安装ITUNES没用 神难题:通过浏览器下载的EXCEL和WORD等OFFICE文档都显示“文件已损坏,无法打开”,怎么破? 如何取消电脑自动阻止联网。(我已关闭防火墙) 求助,电脑不能识别iphone USB驱动 如何解除程序被防火墙或杀毒软件阻止访问网络 IE浏览器打不开一个网址(数据库报表)的图片, 与服务器有关吗 怎么解决? 其它网址都可以打开图片 坐月子黑鱼怎么做好吃 手机用秀米怎么做出动态背景- 问一问 黑鱼汤 放冷水还是开水 黑鱼汤和鲫鱼汤的区别 为什么秀米不显示标题 为什么秀米分享的时候不显示我的标题图和简述? 逆水寒gtx1060怎么设置 梦见偷青辣椒被主子不依不绕? 抖音极速版十一国庆抖嗯那个头条45000金币怎么挣 西瓜视频在哪里看会员到期时间- 问一问 梦见大便特地搞裤子里还和旁边人说话? 大米中为什么会有砷?有砷的大米如果吃了对人有什么影响? 大米有刺鼻味是什么原因 梦见大便整裤子和裤带上? 我老公梦见自己把大便弄到满裤子都是,是怎么回事? 高人指点,我昨晚梦见自己拉大便,把裤子弄脏了 免维护铅酸蓄电池充电的问题 我梦见我想大便,结果忍不住拉了很多在裤子里和地上,我怕被发现,用手装在袋子里,弄得好脏 汤浅启动用免维护铅酸蓄电池零下30度可否使用? 贝雷帽大了怎么办