mysql组复制不⼀致_MySQL主从复制什么原因会造成不⼀
致,如何预防及解决
#⽬录MySQL主从复制什么原因会造成不⼀致,如何预防及解决?
你为什么会决定进⾏分库分表,分库分表过程中遇到什么难题,如何解决的?
手机app编程用什么软件啊MySQL⾼可⽤架构应该考虑什么? 你认为应该如何设计?
MySQL备份,使⽤xtrabackup备份全实例数据时,会造成锁等待吗?那么如果使⽤mysqldump进⾏备份呢?
MySQL 5.7开始⽀持JSON,那还有必要使⽤MongoDB存JSON吗?请列出你的观点/理由。
当数据被误删除/误操作后造成数据丢失。你尝试过⽤什么⼿段来挽救数据/损失?绍兴cms建站模板
MySQL 5.7的复制架构,在有异步复制、半同步、增强半同步、MGR等的⽣产中,该如何选择?
⼀、MySQL主从复制什么原因会造成不⼀致,如何预防及解决?
(⼀)导致主从不⼀致的原因主要有:
1、⼈为原因导致从库与主库数据不⼀致(从库写⼊)
2、主从复制过程中,主库异常宕机
3、设置了ignore/do/rewrite等replication等规则
4、binlog⾮row格式
5、异步复制本⾝不保证,半同步存在提交读的问题,增强半同步起来⽐较完美。 但对于异常重启(Replication Crash Safe),从库写数据(GTID)的防范,还需要策略来保证。
6、从库中断很久,binlog应⽤不连续,监控并及时修复主从
7、从库启⽤了诸如存储过程,从库禁⽤存储过程等
8、数据库⼤⼩版本/分⽀版本导致数据不⼀致?,主从版本统⼀
9、备份的时候没有指定参数 例如mysqldump --master-data=2 等
10、主从sql_mode 不⼀致
11、⼀主⼆从环境,⼆从的server id⼀致
12、MySQL⾃增列 主从不⼀致
mysql是什么系统13、主从信息保存在⽂件⾥⾯,⽂件本⾝的刷新是⾮事务的,导致从库重启后开始执⾏点⼤于实际执⾏点
14、采⽤5.6的after_commit⽅式半同步,主库当机可能会引起主从不⼀致,要看binlog是否传到了从库
15、启⽤增强半同步了(5.7的after_sync⽅式),但是从库延迟超时⾃动切换成异步复制
(⼆)预防和解决的⽅案有:
1、master:innodb_flush_log_at_trx_commit=1&sync_binlog=1
2、slave:master_info_repository=“TABLE”&relay_log_info_repository=“TABLE”&relay_log_recovery=1
3、设置从库库为只读模式
4、可以使⽤5.7增强半同步避免数据丢失等
getsslpage
5、binlog row格式
6、必须引定期的数据校验机制
7、当使⽤延迟复制的时候,此时主从数据也是不⼀致的(计划内),但在切换中,不要把延迟从提升为主库哦~
8、mha在主从切换的过程中,因主库系统宕机,可能造成主从不⼀致(mha本⾝机制导致这个问题)
⼆、你为什么会决定进⾏分库分表,分库分表过程中遇到什么难题,如何解决的?
(⼀)为什么决定进⾏分库分表?
fscanf在c语言中什么意思1.根据业务类型,和业务容量的评估,来选择和判断是否使⽤分库分表
2.当前数据库本事具有的能⼒,压⼒的评估
3.数据库的物理隔离,例如减少锁的争⽤、资源的消耗和隔离等
4.热点表较多,并且数据量⼤,可能会导致锁争抢,性能下降
5.数据库的⾼并发,数据库的读写压⼒过⼤,可能会导致数据库或系统宕机
6.数据库(MySQL5.7以下)连接数过⾼,会增加系统压⼒
7.单表数据量⼤,如SQL使⽤不当,会导致io随机读写⽐例⾼。查询慢(⼤表上的B+树太⼤,扫描太慢,甚⾄可能需要4层B+树)
8.备份和恢复时间⽐较长
(⼆)都遇到什么问题?
1.全局pk(主键和唯⼀索引)的冲突检测不准确,全局的⾃增主键⽀持不够好
2.分⽚键的选择。如没有选择好,可能会影响SQL执⾏效率
3.分布式事务,中间价产品对分布式事务的⽀持⼒度
4.对于开发来说,需要进⾏业务的拆分
5.对于开发来说,部分SQL不兼容则需要代码重构,⼯作量的评估
6.对于开发来说,跨库join,跨库查询
(三)如何解决?
1.使⽤全局分号器。或者使⽤全局唯⼀id,(应⽤⽣成顺序唯⼀int类型做为全局主键)
2.应⽤层来判断唯⼀索引
3.配合应⽤选择合适的分⽚键,并加上索引
borderless game4.配合应⽤,配合开发,对不兼容SQL的进⾏整改
三、MySQL⾼可⽤架构应该考虑什么? 你认为应该如何设计?
(⼀)MySQL⾼可⽤架构应该考虑什么?
1.对业务的了解,需要考虑业务对数据库⼀致性要求的敏感程度,切换过程中是否有事务会丢失
2.对于基础设施的了解,需要了解基础设施的⾼可⽤的架构。例如 单⽹线,单电源等情况
3.对于数据库故障时间掌握,业务⽅最多能容忍时间范围,因为⾼可⽤切换导致的应⽤不可⽤时间
4.需要了解主流的⾼可⽤的优缺点:例如 MHA/PXC/MGR 等。
5.考虑多IDC多副本分布,⽀持IDC级别节点全部掉线后,业务可以切到另⼀个机房
(⼆)你认为应该如何设计?
1.基础层 和基础运维部门配合,了解和避免⽹络/ 硬盘/ 电源等是否会出现单点故障
2.应⽤层 和应⽤开发同学配合,在关键业务中记录SQL⽇志,可以做到即使切换,出现丢事务的情况,也可以通过⼿⼯补的⽅式保证数据⼀致性,例如:交易型的业务引⼊状态机,事务状态,应对数据库切换后事务重做
3.业务层 了解⾃⼰的应⽤,根据不同的应⽤制定合理的⾼可⽤策略。
4.单机多实例 环境及基于虚拟机或容器的设计不能分布在同⼀台物理机上。
5.最终⼤招 在数据库不可⽤ ,可以把已提及的事务先存储到队列或者其他位置,等数据库恢复,重新应⽤
四、MySQL备份,使⽤xtrabackup备份全实例数据时,会造成锁等待吗?那么如果使⽤mysqldump进⾏备份呢?
(⼀)xtrabackup和mysqldump会造成锁等待吗?
3.数据量特别⼤的话,建议优先⽤ xtrabackup,提⾼备份/恢复速度。⽽如果数据量不是太⼤或者想备份单表,则建议⽤mysqldump了,⽅便逻辑恢复。各有利弊,注意其适⽤场景
(⼆)xtrabackup冷知识
1.基于MySQL 5.6版本开发的xtrabackup,会在备份过程中⽣成内部通信⽂件 suspend file,⽤于 xtrabackup 和 innobackupex 的通信,备份结束后⽂件删除,默认⽂件位置 /tmp/xtrabackup_suspended
2.如果在备份过程中,修改了 /tmp 的访问权限或该⽂件的权限,则两个程序间直接不能通信,会造成 xtrabackup hang 住,正在备份的表不能正常释放锁,会造成锁等待,此时需要强制 kill 掉 xtrabackup 进程
五、MySQL 5.7开始⽀持JSON,那还有必要使⽤MongoDB存JSON吗?请列出你的观点/理由。
(⼀)观点A:⽀持MySQL存储JSON
1.MongoDB不⽀持事务,⽽MySQL⽀持事务
2.MySQL相对MongoDB⽽⾔,MySQL的稳定性要优于MongoDB
3.MySQL⽀持多种存储引擎
(⼆)观点B:⽀持MongoDB存储JSON
1.从性能的⾓度考虑,对于JSON读写效率MongoDB要优于MySQL
2.MongoDB相对MySQL⽽⾔,MongoDB的扩展性要优于MySQL
3.MongoDB⽀持更多的JSON函数
(三)总结
1.如果应⽤程序⽆事务要求,存储数据表结构复杂并且经常被修改, 例如游戏中装备等场景⽤MongoDB⽐较适合
2.如果应⽤程序有事务要求,存储数据的"表"之间相互有关联,例如有订单系统等场景⽤MySQL⽐较适合
3.整体来看相对看好MySQL的JSON功能,在未来官⽅的努⼒下MySQL的JSON功能有机会反超MongoDB
六、当数据被误删除/误操作后造成数据丢失。你尝试过⽤什么⼿段来挽救数据/损失?
(⼀)前提
1.当数据被误删除/误操作后,第⼀时间要关闭数据库。业务⽅需要紧急挂停机公告,避免数据⼆次污染,⽤于保护数据的⼀致性
2.BINLOG格式为ROW格式,不讨论其他格式的BINLOG
(⼆)数据被误操作(update/delete/drop)造成数据丢失,可以⽤哪些⼿段来恢复?
1.BINLOG恢复:可以使⽤逆向解析BINLOG⼯具来恢复。例如:binlog2SQL等
2.延迟从库: 可以通过解除延迟从库,并指定BINLOG结束位置点,可以实现数据恢复
⼩编提醒:如果有问题,请关注“恩墨学院”公主号,为您解答更多疑惑
(三)数据被误删除(rm/物理⽂件损坏)造成数据丢失,可以⽤哪些⼿段来恢复?
1.如果有备份,可以通过备份恢复 mysqldump/xtrabackup + binlog 来实现全量+增量恢复
2.如果⽆备份但是有从库,可以通过主从切换,提升从库为主库,从⽽实现数据恢复
3.如果⽆备份并且⽆从库,但MySQL没有重启,可以通过拷贝/proc/$pid/fd中的⽂件,来进⾏尝试恢复
4.如果⽆备份并且⽆从库,但MySQL有重启,可以通过extundelete或undrop-for-innodb来恢复
七、MySQL 5.7的复制架构,在有异步复制、半同步、增强半同步、MGR等的⽣产中,该如何选择?
(⼀)⽣产环境中:
⼏种复制场景都有存在的价值。下⾯分别描述⼀下:
1.从成熟度上来选择,推荐:异步复制(GTID+ROW)
2.从数据安全及更⾼性能上选择:增强半同步 (在这个结构下也可以把innodb_flush_log_trx_commit调整到⾮1, 从⽽获得更好的性能)
3.对于主从切换控制觉的不好管理,⼜对数据⼀致性要求特别⾼的场景,可以使⽤MGR
(⼆)理由:
1.异步复制,相对来讲⾮常成熟,对于环境运维也⽐较容易上⼿
2.增强半同步复制,可以安全的保证数据传输到从库上,对于单节点的配置上不⽤要求太严格,特别从库上也可以更宽松⼀点,⽽且在⼀致性和性能有较⾼的提升,但对运维上有⼀定的要求
3.MGR组复制。相对增强半同步复制,MGR更能确保数据的⼀致性,事务的提交,必须经过组内⼤多数节点(n/2+1)决议并通过,才能得以提交。MGR架构对运维难度要更⾼,不过它也更完美
总的来讲,从技术实现上来看:MGR> 增强半同步>异步复制。
未来可能见到更多的MGR在⽣产中使⽤,对于MySQL的运维的要求也会更上⼀层楼。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论