目录:

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

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

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

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

MySQL 5.7的复制架构,在有异步复制、半同步、增强半同步、MGR等的生产中,该如何选择?


一、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数据丢失_当数据被误删除/误操作后造成数据丢失。你尝试过用什么手段来挽救数据/损失?...相关推荐

  1. mysql从挂了数据怎么恢复_详解MySQL误操作后怎样进行数据恢复

    一.开启binlog. 首先查看binlog是否开启 mysql> show variables like "log_bin"; +---------------+----- ...

  2. MySQL误操作后如何快速恢复数据

    基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,MySQL误操作后如何快速回滚?比如,delete一张表,忘加限制条件,整张表都没了.假如这还是线上环境核心业务数据,那这事就闹大 ...

  3. mysql 传统数据恢复_MySQL误操作后如何快速恢复数据 传统解法 利用binlog2sql快速闪回 常见问题 参考资料...

    MySQL误操作后如何快速恢复数据 摘要: 利用binlog闪回误操作数据. 基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,MySQL误操作后如何快速回滚?比如,不小心upda ...

  4. phpstudy mysql恢复数据_MySQL_详解MySQL误操作后怎样进行数据恢复,一、开启binlog。 首先查看binlo - phpStudy...

    详解MySQL误操作后怎样进行数据恢复 一.开启binlog. 首先查看binlog是否开启 mysql> show variables like "log_bin"; +- ...

  5. mysql 清除分区数据恢复_MySQL 误操作后数据恢复(update,delete忘加where条件)【转】...

    在数据库日常维护中,开发人员是最让人头痛的,很多时候都会由于SQL语句 写的有问题导致服务器出问题,导致资源耗尽.最危险的操作就是在做DML操作的时候忘加where条件,导致全表更新,这是作为运维或者 ...

  6. mysql回滚用法_Mysql误操作后利用binlog2sql快速回滚的方法详解

    前言 在日常工作或者学习中,操作数据库时候难免会因为"大意"而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2 ...

  7. MySQL中truncate误操作后的数据恢复案例

    MySQL中truncate误操作后的数据恢复案例 这篇文章主要介绍了MySQL中truncate误操作后的数据恢复案例,主要是要从日志中定位到truncate操作的地方然后备份之前丢失的数据,需要的 ...

  8. MySQL 5.7 update误操作后数据恢复详解

    墨墨导读:本文详述MySQL 5.7 模拟update误操作后进行数据恢复的全过程,希望对大家有帮助. 背景介绍 MySQL目前还没有像Oracle数据库那样强大有闪回的功能,MySQL只能通过挖去b ...

  9. mysql+误操作怎么恢复_MySQL 误操作后如何快速恢复数据

    传统解法 用全量备份重搭实例,再利用增量binlog备份,恢复到误操作之前的状态.然后跳过误操作的SQL,再继续应用binlog.此法费时费力,不值得再推荐. 利用binlog2sql快速闪回 首先, ...

最新文章

  1. Windows 终端神器 MobaXterm,免费版可以在公司环境下使用
  2. cocos2d-x 3.0 Loading界面实现
  3. 用AI“复制”一个网络主播,10亿羊毛构建小程序生态,这是虎牙AI的新动作
  4. 模拟jquery链式访问
  5. axture动画原型制作_Axure制作原型-基础操作
  6. dedeCMS修改文案:页眉rss文字、导航栏“首页”、页脚copyright等
  7. 9203 0427 随堂小结
  8. 【李宏毅2020 ML/DL】P52 Network Compression - Network Pruning
  9. c ++中哈希表如何访问_C / C ++中的哈希表–完整的实现
  10. [实战]MVC5+EF6+MySql企业网盘实战(12)——新建文件夹和上传文件
  11. 设置eclipse中的编辑区的背景颜色、注释文字的颜色、修改注释内作者名和时间...
  12. 第一章 FPGA数字信号处理_数字混频(NCO与DDS)
  13. rslinx连接linux教程,RSLinx Classic软件通讯配置教程
  14. 使用GreenSock插件轻松制作精美的Web动画
  15. 计算机机房岗位管理制度,机房管理规定-机房管理制度.doc
  16. “去中心化”和“分布式”的区别
  17. PhoneApplicationFrame以及设置Obscured/Unobscured的event handler
  18. 某我音乐网站JS逆向扣代码+Python一键下载
  19. plc通讯块FC5、FC6
  20. ​力扣解法汇总606-根据二叉树创建字符串

热门文章

  1. 无约束优化算法——牛顿法与拟牛顿法(DFP,BFGS,LBFGS)
  2. 【Matlab】怎么修改Excel单元格颜色?
  3. 国学早教视频 16G
  4. [云炬创业基础笔记]第十一章创业计划书测试3
  5. [云炬ThinkPython阅读笔记]3.4 增加新函数
  6. 《algorithm-note》算法笔记中文版正式发布!
  7. LeetCode 795. 区间子数组个数
  8. row间距 table 某一行_UITableview的一个section下的各行Row之间可以设置间隔一段距离吗?...
  9. c#中将对象序列化为xml(包括list)
  10. 系统地学学喝酒的技巧