转自老叶茶馆:https://mp.weixin.qq.com/s/kPFUemQU6foGFNxIkhefsQ

2018年6月10日,周日

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本身机制导致这个问题)

2018年6月11日,周一

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

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

  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的进行整改

2018年6月12日,周二

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

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

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

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

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

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

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


二、你认为应该如何设计? 

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

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

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

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

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

2018年6月13日,周三

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 进程

2018年6月15日,周五

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

2018年6月17日,周日
当数据被误删除/误操作后造成数据丢失。你尝试过用什么手段来挽救数据/损失?

一、前提 
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来恢复

2018年6月19日,周二
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的运维的要求也会更上一层楼。

《叶问》第1期--知数堂技术小贴士相关推荐

  1. 知数堂MySQL DBA在线培训第八期招生中

    知数堂MySQL DBA在线培训班值得信赖吗 "知数堂培训"是由资深MySQL专家叶金荣.吴炳锡联合推出专业优质在线培训课程,目前主要有MySQL DBA实战优化和Python运维 ...

  2. 知数堂全网通缉这个人

    嘿,兄弟,我们好久不见,你在哪里? 嘿,朋友,如果真的是你,请打招呼! ...... 如果你热爱学习,如果你对自己有信心 如果你已经是或即将是知数堂的一员... 那么,或许我们要找的就是你 吴老板 老 ...

  3. 加入知数堂,成为专业MySQL DBA,就是这么简单!

    刚毕业就失业,怎么叩开名企大门? 骑驴找马,硬实力不够? 拿不到好的offer,高薪资永远都是"别人"的 屌丝一枚,怎么迎娶白富美? --------[神技能]------- My ...

  4. 年终盘点|知数堂2017年度好文

    因为加班.约会.加班.约会,错过了知数堂无数次的公开课和技术分享~ 早上还在懊恼遗憾,现在又齐齐整整地回来了~ 而幸福就是,这种失而复得的小确幸 这篇文章内涵满满,一年的技术分享都囤这了~ 年关将至, ...

  5. 知数堂mysql实战优化,成为专业MySQL DBA

    51cto mysql成为风哥一样的数据库大神,全套课程 欢迎v私聊,见水印找到我     知数堂MYSQL实战13期,业界最靠谱的mysql技术资源,通过这套课程的学习到目前学生平均工资15K+. ...

  6. 知数堂郑松华:MySQL 8.0 SQL优化之CTE 、窗口函数的应用

    特邀嘉宾 郑 松 华 知数堂<SQL优化>课程讲师 资深数据库工程师 对SQL优化有独到见解 7年SQL开发和调优经验 于韩国法院数据中心从事数据库技术支持 原SKC&CSheny ...

  7. 2021年知数堂公开课首秀

    本周知数堂为你准备了两个公开课主题: <MySQL8.0_SQL一些经验>2021#1,<知数堂邀你一起讨论MySQL DBA的成长规划>2021#2 下面分别介绍一下两个主题 ...

  8. 毋庸置疑,知数堂确实靠谱

    ① 讲师靠谱:资深MySQL专家叶金荣.吴炳锡老师亲自授课 ② 时间靠谱:一次交费,可多次听课,必有个属于您的档期 ③ 职业靠谱:互联网急需MySQL.Python人才,前(钱)景大好 ④ 课程靠谱: ...

  9. 知数堂培训在线免费分享《DBA神技之SQL Review》

    2016.7.28 知数堂培训推出免费在线分享<DBA神技之SQL Review> 1.分享主题 <DBA神技之SQL Review> 2.嘉宾介绍 吴炳锡,知数堂培训联合创始 ...

最新文章

  1. C语言控制结构程序设计,第3讲 C语言程序的基本控制结构_C语言程序设计(上)_pps_大学课件预览_高等教育资讯网...
  2. Symbian开发平台的搭建之VC++6.0Carbide C++ 2.0
  3. HTTPS 互联网世界的安全基础
  4. 案例:Oracle dul数据挖掘 没有数据库备份非常规恢复truncate删除的数据表
  5. 大数据与云计算期末复习
  6. 电影下载地址大集合,只要是电影就能找到
  7. KeilC51与MDK安装共存
  8. Windows7电脑自动断网的解决方法
  9. 如何在Mac上设置iCloud
  10. 友盟统计如何去掉“站长统计”
  11. chm电子书字体大小的调整
  12. 京东自营客服考试答案
  13. 全球顶级手游开发商向数据极客们发出赛事邀请,用数据分析玩家行为,赢取十万大奖!...
  14. 最全阿里架构师P系列解读:P5-P8的技能要求和薪资结构
  15. 以太坊数据库RocksDB报错:org.rocksdb.RocksDBException:Failed to create dir
  16. SpringBoot(5)响应式编程WebFlux
  17. idea设置主题皮肤(详细)
  18. ripro主题后台Jsdelivr CDN 加速服务挂了的临时解决方案。
  19. 首经贸电子信息复试《管理信息系统》
  20. python3.6安装环境_基于沙盒环境,安装python3.6

热门文章

  1. 专科段《财务管理》课程复习资料(1)——单项选择题
  2. html中显示桌面图片不显示不出来,电脑桌面图标出问题了怎么办? 电脑桌面图标不能显示是什么原因?...
  3. linux8怎么搭建本地yum仓库,CentOS8 创建本地YUM存储库
  4. 中国高智商协会(胜寒) 入会智商考试热身题答案
  5. CAD如何绘制叶轮?
  6. 乐鑫esp8266学习rtos3.0笔记第6篇:esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网之上增加dns域名解析!(附带demo)
  7. I2S,PCM,AC97 音频总线
  8. 外媒:HTML5取代不了Flash
  9. 大数据实验室作业总结
  10. 谁在害怕国产特斯拉?