MySQL高可用

devtools/2024/12/22 12:32:52/

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/devtools/144372.html

相关文章

Flink CDC 生产环境常用参数总结

Flink CDC 生产环境常用参数总结 1.参数 1. 基本连接参数 这些参数用于定义如何连接到数据库,是配置的必需项。 参数名称说明示例connector数据库连接器类型,常用 mysql-cdc。connector mysql-cdchostname数据库主机名或 IP 地址。hostname 192.16…

理解支持向量机

支持向量机属于机器学习 支持向量机(Support Vector Machine,SVM)是一种典型的机器学习算法,属于监督学习范畴。它主要用于分类问题,也可以用于回归问题。在机器学习的众多算法中,SVM以其在小样本、高维空间…

[每周一更]-(第128期):CentOS源码安装PostgreSQL

文章目录 **1. 环境准备****安装必要的依赖****2. 下载 PostgreSQL 源码****3. 编译和安装****编译 PostgreSQL****4. 初始化数据库****5. 启动和管理 PostgreSQL 服务****手动启动 PostgreSQL****将 PostgreSQL 添加到环境变量****6. 创建用户和数据库****7. 配置远程访问**修…

HTTP常见异常状态码

HTTP状态码用于表示服务器对HTTP请求的响应。以下是常见的HTTP异常状态码及其详解: 一、1xx:信息性状态码 100 Continue:服务器已接收到请求的一部分,并且客户端应继续发送请求的其余部分。101 Switching Protocols:…

【AI系列】Paddle Speech安装指南

文章目录 环境依赖1. 安装Python1.1 下载Python安装包1.2 安装gcc1.3 安装依赖库1.4 编译和安装Python1.5 配置环境变量 2. 安装PaddlePaddle3. 安装PaddleSpeech4. 运行PaddleSpeech5. 解决常见问题5.1 错误:libssl.so.1.1解决方法: 5.2 错误&#xff1…

apache-tomcat-6.0.44.exe Win10

apache-tomcat-6.0.44.exe Win10

EasyExcel 动态设置表格的背景颜色和排列

项目中使用EasyExcel把数据以excel格式导出&#xff0c;其中设置某一行、某一列单元格的背景颜色、排列方式十分常用&#xff0c;记录下来方便以后查阅。 1. 导入maven依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easy…

Go语言zero框架中配置文件config加载与执行不同环境配置

在Go语言的开发中&#xff0c;应用程序通常需要根据不同的运行环境加载不同的配置文件。环境配置通常包括数据库连接、缓存配置、API密钥等内容&#xff0c;而不同的环境&#xff08;开发环境、测试环境、生产环境&#xff09;往往会有不同的配置需求。本文将探讨如何在Go语言中…