MySQL高可用

server/2024/12/21 1:57:56/

MySQL主从复制的过程是怎么样的

分为3个阶段:

  • 写入binlog:主库修改数据后,会写入binlog日志,从库连接到主库后,主库会创建一个log dump线程,用于发送bin log的内容
  • 同步binlog:从库会专门创建一个I/O线程来连接主库的log dump线程,来接受主库的binlog日志,再把binlog信息写入relay log的中继日志里,再返回给主库“复制成功”的响应
  • 回放binlog:从库会专门创建一个用于回放binlog的SQL线程,去读relay log中继日志,然后回放binlog更新存储引擎的数据,实现主从的数据一致性

MySQL提高了哪些复制策略

主要有三种复制策略:同步复制、异步复制、半同步复制,MySQL默认的复制模型是异步复制

同步复制: 主库提交事务的线程要等待所有从库的复制成功响应,才返回客户端结果。性能最差,但是安全性最好。

异步复制:主库提交事务的线程不会等待binlog同步到从库,就返回客户端结果。性能最好但是安全性最差。

半同步复制:主库提交事务的线程不用等待所有的从库复制成功响应,只需要等待一部分复制成功响应回来就可以。优点是出现主库宕机,至少还有一个从库有最新的数据,不会出现数据丢失的风险。

MySQL主从复制的数据延迟怎么解决

  • 使用缓存解决:可以在写入数据主库的同时,把数据写到Redis中,这样其他线程再获取数据时会先到Redis中查,也可以保证数据的一致性,不过这种方式会带来缓存和数据库的一致性问题。
  • 直接查询主库:对于数据延迟铭感的业务,可以强制读取主库,但是查询数据量不能太大,不然会出现主库写请求锁行,影响读请求的执行。

MySQL主从架构中,读写分离怎么实现

  • 一种简单的做法:提前将所有数据源配置在工程中,每一个数据源对应一个主库或者从库,然后改造代码,将某一个SQL语句交给其中一个数据源来处理。但是SQL路由规则侵入代码逻辑,不利用代码的维护
  • 另一种做法:独立部署的代理中间件,如MyCat,这一类中间件独立部署在独立的服务器上,一般用标准的MySQL通信协议,可以代理多个数据库。优点是隔离底层数据库与上层应用访问的复杂度,比较适合有独立运维团队的公司;缺点是所有的SQL语句都要跨两次网络传输,有一点的性能损耗,再就是运维中间件是一个专业且复杂的工作,需要技术沉淀。

MySQL主库挂了怎么办

MySQL没有实现主服务器宕机和处理故障的功能,要实现自动主从故障迁移的功能,可以使用开源的MySQL高可用套件MHA,MHA可以在主数据库发生宕机的时候,剔除原有主机,选出新的主机,然后对外服务。

什么是分库分表,什么时候需要分库,什么时候需要分表

  • 分库分表是把原本存储于单个数据库上的数据拆分到多个数据库,把原来存储在单张表的数据拆分到多张表中。
  • 分库:当单台MySQL扛不住高并发流量的时候,就需要分库。
  • 分表:当单张表数据量太大的时候,经验值是500W以上的时候,就需要分表,通过减少每次查询数据总量来解决查询慢的问题。

分库分表后,会产生什么问题

  • 分布式事务问题: 对业务进行分库之后,一次大的操作由多个小操作组成,这些小的操作分布在不同的服务器上,分布式事务需要保证这些小操作要么全部成功,要么全部失败。金融类的服务,可以使用分布式中间件实现TCC事务模型;互联网业务通常对一致性要求比较低,可以用本地消息表来实现分布式事务。
  • 全局唯一性问题:在单库单表的情况下,业务ID可以依赖数据库的自增来实现。但在分库。分表后,如果还是这样,会导致主键重复。我们可以使用雪花算法或者美团leaf算法来生成全局唯一性主键ID
  • 跨库跨表关联问题:分库分表后,跨库和跨表的查询操作实现起来比较复杂。可以通过冗余额外字段避免跨库跨表。或者交给数据库分库分表中间件来实现,也可以将数据全量存到ES中,在ES中查询。
  • 跨库跨表COUNT查询问题:数据在不同的库不同的表,进行COUNT查询比较复杂。可以将计数的数据单独存到一张表中,或者将聚合查询的数据同步到ES中,交给ES去处理

http://www.ppmy.cn/server/151839.html

相关文章

uniapp地址类 方法

关于点击没反应 manifest.json 检查是否添加了对应的权限 /* 小程序特有相关 */"mp-weixin" : {"appid" : "wxc481f10754f1d9df","setting" : {"urlCheck" : false,"es6" : true,"postcss" : true,&qu…

王佩丰24节Excel学习笔记——第十二讲:match + index

【以 Excel2010 系列学习,用 Office LTSC 专业增强版 2021 实践】 【本章小技巧】 vlookup与match,index 相结合使用match,index 结合,快速取得引用的值扩展功能,使用match/index函数,结合照相机工具获取照片 一、回顾…

部署 Apache Samza 和 Apache Kafka

部署 Apache Samza 和 Apache Kafka 的流处理系统可以分为以下几个步骤,涵盖环境准备、部署细节和生产环境的优化。 1. 环境准备 硬件要求 Kafka Broker:至少 3 台服务器,建议每台服务器配备 4 核 CPU、16GB 内存和高速磁盘。Samza 部署节点:根据任务规模,至少准备 2 台…

【Golang】 Go 语言中的 Struct、JSON 和 Map 互转:详细指南

Go 语言中的 Struct、JSON 和 Map 互转:详细指南 在 Go 语言中,处理 JSON 数据、结构体类型和映射(map)是与 API、配置或数据库交互时非常常见的任务。理解如何在这些数据类型之间无缝转换对于高效的 Go 编程至关重要。以下是如何将 Go 结构体转换为 JSON、将 JSON 转换为…

企业内训|阅读行业产品运营实战训练营-某运营商数字娱乐公司

近日,TsingtaoAI公司为某运营商旗下数字娱乐公司组织的“阅读行业产品运营实战训练营”在杭州落下帷幕。此次训练营由TsingtaoAI资深互联网产品专家程靖主持。该公司的业务骨干——来自内容、市场、业务、产品与技术等跨部门核心岗位、拥有8-10年实战经验的中坚力量…

2024最新qrcode.min.js生成二维码Demo

找了一堆代码一堆GPT&#xff0c;终于给写对了&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

通过移除 -march=native 解决 Ubuntu 20.04 程序运行“段错误 (核心已转储)”问题的详解

通过移除 -marchnative 解决 Ubuntu 20.04 程序运行“段错误 (核心已转储)”问题的详解 在Ubuntu 20.04系统中&#xff0c;开发和编译C/C程序时&#xff0c;常见的编译选项可能会影响程序的稳定性和兼容性。特别是在使用CMake构建系统时&#xff0c;某些编译标志可能导致程序在…

Java 创建图形用户界面(GUI)组件详解之下拉式菜单(JMenu、JMenuItem)、弹出式菜单(JPopupMenu)等

文章目录 组件详解菜单组件JMenu、JMenuItem 等常用方法下拉式菜单&#xff1a;JMenu、JMenuItem弹出式菜单&#xff1a;JPopupMenu复选框和单选按钮菜单项键盘助记符和加速器启用和禁用菜单项 组件详解 菜单组件 JMenu、JMenuItem 等常用方法 javax.swing.JMenu&#xff1a;…