#目录MySQL主从复制什么原因会造成不一致,如何预防及解决?

你为什么会决定进行分库分表,分库分表过程中遇到什么难题,如何解决的?

MySQL高可用架构应该考虑什么? 你认为应该如何设计?

MySQL备份,使用xtrabackup备份全实例数据时,会造成锁等待吗?那么如果使用mysqldump进行备份呢?

MySQL 5.7开始支持JSON,那还有必要使用MongoDB存JSON吗?请列出你的观点/理由。

当数据被误删除/误操作后造成数据丢失。你尝试过用什么手段来挽救数据/损失?

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自增列 主从不一致

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增强半同步避免数据丢失等

5、binlog row格式

6、必须引定期的数据校验机制

7、当使用延迟复制的时候,此时主从数据也是不一致的(计划内),但在切换中,不要把延迟从提升为主库哦~

8、mha在主从切换的过程中,因主库系统宕机,可能造成主从不一致(mha本身机制导致这个问题)

二、你为什么会决定进行分库分表,分库分表过程中遇到什么难题,如何解决的?

(一)为什么决定进行分库分表?

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.配合应用选择合适的分片键,并加上索引

4.配合应用,配合开发,对不兼容SQL的进行整改

三、MySQL高可用架构应该考虑什么? 你认为应该如何设计?

(一)MySQL高可用架构应该考虑什么?

1.对业务的了解,需要考虑业务对数据库一致性要求的敏感程度,切换过程中是否有事务会丢失

2.对于基础设施的了解,需要了解基础设施的高可用的架构。例如 单网线,单电源等情况

3.对于数据库故障时间掌握,业务方最多能容忍时间范围,因为高可用切换导致的应用不可用时间

4.需要了解主流的高可用的优缺点:例如 MHA/PXC/MGR 等。

5.考虑多IDC多副本分布,支持IDC级别节点全部掉线后,业务可以切到另一个机房

(二)你认为应该如何设计?

1.基础层 和基础运维部门配合,了解和避免网络/ 硬盘/ 电源等是否会出现单点故障

2.应用层 和应用开发同学配合,在关键业务中记录SQL日志,可以做到即使切换,出现丢事务的情况,也可以通过手工补的方式保证数据一致性,例如:交易型的业务引入状态机,事务状态,应对数据库切换后事务重做

3.业务层 了解自己的应用,根据不同的应用制定合理的高可用策略。

4.单机多实例 环境及基于虚拟机或容器的设计不能分布在同一台物理机上。

5.最终大招 在数据库不可用 ,可以把已提及的事务先存储到队列或者其他位置,等数据库恢复,重新应用

四、MySQL备份,使用xtrabackup备份全实例数据时,会造成锁等待吗?那么如果使用mysqldump进行备份呢?

(一)xtrabackup和mysqldump会造成锁等待吗?

1.xtrabackup会,它在备份时会产生短暂的全局读锁FTWL(flush table with read lock),用于拷贝frm/MYD/MYI等文件,以及记录binlog信息。如果MyISAM表的数据量非常大,则拷贝时间就越长,加锁的时间也越长

2.mysqldump有可能会。如果只是添加 --single-transacton 选项用于保证备份数据一致性,这时就不会产生FTWL锁了。但通常我们为了让备份文件和binlog保持一致,通常也会设置 --master-data 选项用于获得当前binlog信息,这种情况也会短暂加锁

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的运维的要求也会更上一层楼。

mysql 组复制 不一致_MySQL主从复制什么原因会造成不一致,如何预防及解决相关推荐

  1. mysql 组复制 不一致_使用MySQL组复制的限制和局限性

    本节列出和解释了组复制相关的要求和限制. 1.组复制的要求 要使用组复制,每个MySQL节点必须满足以下条件: 1.1 基本要求 InnoDB存储引擎:数据必须存储在事务型的InnoDB存储引擎中.事 ...

  2. Mysql组复制(MGR)——技术细节

    本文提供mysql组复制相关的更多技术细节. 一. 组复制插件架构 Mysql组复制是一个mysql插件,且其构建于已有mysql复制架构之上,其利用了类似二进制日志,基于行的日志及全局事务标识符等的 ...

  3. MySQL内部开发人员如何看待MySQL组复制?

    MySQL因为高性能.可扩展性和可用性被广泛应用于Web应用程序,成为支持高流量社交媒体.电商应用程序以及快速成长企业的IT平台基础.在MySQL 5.7.17版本中,MySQL Group Repl ...

  4. 使用MySQL组复制的限制和局限性

    本节列出和解释了组复制相关的要求和限制. 1.组复制的要求 要使用组复制,每个MySQL节点必须满足以下条件: 1.1 基本要求 InnoDB存储引擎:数据必须存储在事务型的InnoDB存储引擎中.事 ...

  5. Mysql组复制(MGR)——常问的问题

    本文提供常被问到问题的答案. 1.复制组中最多能有多少个mysql服务器? 复制组最多包含9个mysql服务器.尝试向已有9个服务器的组添加另外的服务器将被拒绝. 2.组内服务器间如何连接? 组内服务 ...

  6. Mysql组复制(MGR)——前提及限制

    本文将对组复制的前提条件和限制进行列举和解释. 一.组复制前提 想用组复制的服务器实例必须满足如下前提条件: 1.基础架构 1)InnoDB存储引擎.数据必须存储于InnoDB事务存储引擎.事务被乐观 ...

  7. mysql组复制(MGR)——部署

    mysql组复制作为插件提供给mysql服务器,组内的每个服务器都要求配置和安装该插件.本文提供创建一个至少3个服务器的复制组所需的详细步骤. 一.部署单主模式的组复制 组内的每个服务器实例能运行在独 ...

  8. Mysql组复制故障恢复测试

    在前面的两篇文章中,介绍了mysql组复制的特点及配置过程,本文演示mysql单组复制下的模拟故障测试. 一.组复制所有成员服务器宕机重启后的恢复 连接所有的mysql实例查询当前的组复制成员情况,状 ...

  9. mysql组复制(MGR)——背景

    本文提供mysql组复制相关的背景信息. 创建容错系统的最常用方式是采用组件冗余方式,换句话说,就是组件能被移除且系统应该继续如期操作.这产生了一系列将系统复杂度上升到不同等级的挑战.特别是,复制数据 ...

最新文章

  1. 无人驾驶中用到的八大坐标系
  2. SourceInsight-显示文件完整路径
  3. python右对齐格式化输出_Python中格式化输出的两种方法介绍
  4. java nio node_支撑 Java NIO 与 NodeJS 的底层技术
  5. 算法笔记_072:N皇后问题(Java)
  6. VXLAN详解(一)
  7. 安卓开发学习笔记—————《Anroid编程权威指南》第六章 Android编程与兼容性问题...
  8. 侧滑面板(对viewGroup的自定义)
  9. 计算机管理员绩效指标,网络管理员绩效kpi考核标准..doc
  10. Linux实验操作之使用LAMP系统架设一个Discuz论坛
  11. Java解析网页中的超链接批量下载用
  12. python运动学仿真的意义_运动学仿真和动力学仿真有什么区别和联系?
  13. 条码扫描器的安装方法与使用注意事项
  14. 「解决方案」预付费水电及宿舍预付费云平台解决方案
  15. 用inno Setup做应用程序安装包的示例脚本 .iss文件
  16. Oracle 11g 数据库 实验7 数据库安全管理
  17. C语言入门 -- 输出某个月有多少天(2020/12/9)
  18. hp服务器启动u盘装系统,hp惠普笔记本进入bios设置u盘启动装系统的方法步骤详细教程...
  19. 谷歌SwitchySharp SwitchyOmega插件
  20. android对图片提升清晰度,轻颜相机如何提升图片清晰度?

热门文章

  1. 错误:无法与 SFTP 服务器建立 FTP 连接
  2. few-shot learning, zero-shot learning, one-shot learning,any-shot learning, C-way K-shot,Meta-learn
  3. VS2017开发.net core 时默认发布路径文件夹多个BPC
  4. Highsoft.Highcharts 5.0.6439.38401 key
  5. UITableViewDataSource Protocol Reference
  6. 网络校时(非NTP)
  7. Spring注解标签详解@Autowired @Qualifier等 @Slf4j
  8. xunsearch全文检索初体验
  9. vi/vim文本编辑器的使用
  10. 无限滚动加载最佳实践