MySQL主从原理系统优化:假如现在用户反映系统太卡
1:如果是请求太多,判断web服务器压力过大,增加前端的web服务器,做负载均衡
2:如果请求静态页面不卡了,但是请求动态数据还是卡,说明MySQL处理的请求太多了,在应用层增加缓存
3:如果请求激增 , 还是有大量的查询到MySQL,想办法处理MySQL ,在一个应用中,大量的消耗MySQL的还是查询,就可以把MySQL拆开,就像公路分道 公交车道,小轿车道,把MySQL做成主从
1,就算MYSQL拆成了多个,也必须分出主和从,所有的写操作都必须要在主MYSQL 上完成;
2,所有的从MYSQL的数据都来自于(同步于)主MYSQL;
3,既然涉及到同步,那一定有延迟;有延迟,就一定可能在读的时候产生脏数据;所以,能够在从MYSQL上进行的读操作,一定对实时性和脏数据有一定容忍度的数据;比如,登陆日志,后台报表,首页统计信息来源;文章;资讯;SNS消息;
4,[注意]:在MYSQL主从时,如果一个业务(service中的一个方法)中,如果既有R操作,又有W操作,因为W操作一定要在主MYSQL上,所以在一个事务中所有的数据来源都只能来自于一个MYSQL
1,要完成主从同步,就必须让在Master上执行的所有的DML和DDL能够正确的在Salve上再执行一遍;MYSQL选择使用文件来记录SQL;
2,要完成主从同步,第一个事情就是把在主服务器上的bin-log(二进制文件)打开,bin-log文件就可以记录在MYSQL上执行的所有的DML DDL TCL;
3,MYSQL使用被动注册的方式来让从MYSQL请求同步主MYSQL的binlog;原因:被动请求的方式,主的MYSQL不需要知道有哪些从的MYSQL,我额外添加/去掉从MYSQL服务器,对主MYSQL服务器的正常运行没有任何影响;
4,第二步,从MYSQL后台一个线程发送一个请求,到主服务器请求更新数据;最重要的数据(我这次请求,请求你bin-log的哪一行数据之后的数据)
5,第三步,主MYSQL后台一个线程接收到从MYSQL发送的请求,然后读取bin-log文件中指定的内容,并放在从MYSQL的请求响应中;
6,第四步,从MYSQL的请求带回同步的数据,然后写在从MYSQL中的relay-log(重做日志)中;relay-log中记录的就是从主MYSQL中请求回来的哪些SQL数据;
7,第五步,从MYSQL后台一个线程专门用于从relay-log中读取同步回来的SQL,并写入到从MYSQL中,完成同步;
8,MYSQL的主从同步是经过高度优化的,性能非常高;
mysqlrouter能否判断主从切换MySQL的主从切换(数据库层面) 目录 不管如种数据库,在进行解决现场问题时,第一原则就是想到是否需要数据备份或停止数据库业务防止数据库丢失MySQL的主从切换(数据库层面) 目录 不管如种数据库,在进行解决现场问题时,第一原则就是想到是否需要数据备份或停止数据库业务防止数据库丢失MySQL的主从切换(数据库层面) 目录 不管如种数据库,在进行解决现场问题时,第一原则就是想到是否需要数据备份或停止数据库业务防止数据库丢失
MySQL 主从,5 分钟带你掌握MySQL 主从一直是面试常客,里面的知识点虽然基础,但是能回答全的同学不多 。
比如楼哥之前面试小米,就被问到过主从复制的原理,以及主从延迟的解决方案,因为回答的非常不错,给面试官留下非常好的印象 。你之前面试 , 有遇到过哪些 MySQL 主从的问题呢?
所谓 MySQL 主从,就是建立两个完全一样的数据库,一个是主库,一个是从库,主库对外提供读写的操作,从库对外提供读的操作 , 下面是一主一从模式:
对于数据库单机部署 , 在 4 核 8G 的机器上运行 MySQL 5.7 时,大概可以支撑 500 的 TPS 和 10000 的 QPS,当遇到一些活动时,查询流量骤然,就需要进行主从分离 。
大部分系统的访问模型是读多写少,读写请求量的差距可能达到几个数量级,所以我们可以通过一主多从的方式,主库只负责写入和部分核心逻辑的查询,多个从库只负责查询,提升查询性能,降低主库压力 。
MySQL 主从还能做到服务高可用,当主库宕机时,从库可以切成主库,保证服务的高可用,然后主库也可以做数据的容灾备份 。
整体场景总结如下:
MySQL 的主从复制是依赖于 binlog 的,也就是记录 MySQL 上的所有变化并以二进制形式保存在磁盘上二进制日志文件 。
主从复制就是将 binlog 中的数据从主库传输到从库上 , 一般这个过程是异步的,即主库上的操作不会等待 binlog 同步的完成 。
详细流程如下:
当主库和从库数据同步时,突然中断怎么办?因为主库与从库之间维持了一个长链接 , 主库内部有一个线程,专门服务于从库的这个长链接的 。
对于下面的情况,假如主库执行如下 SQL,其中 a 和 create_time 都是索引:
我们知道,数据选择了 a 索引和选择 create_time 索引 , 最后 limit 1 出来的数据一般是不一样的 。
所以就会存在这种情况:在 binlog = statement 格式时,主库在执行这条 SQL 时,使用的是索引 a , 而从库在执行这条 SQL 时,使用了索引 create_time,最后主从数据不一致了 。
那么我们改如何解决呢?
可以把 binlog 格式修改为 row , row 格式的 binlog 日志记录的不是 SQL 原文,而是两个 event:Table_map 和 Delete_rows 。
Table_map event 说明要操作的表,Delete_rows event用于定义要删除的行为,记录删除的具体行数 。row 格式的 binlog 记录的就是要删除的主键 ID 信息,因此不会出现主从不一致的问题 。
但是如果 SQL 删除 10 万行数据,使用 row 格式就会很占空间的 , 10 万条数据都在 binlog 里面,写 binlog 的时候也很耗 IO 。但是 statement 格式的 binlog 可能会导致数据不一致 。
设计 MySQL 的大叔想了一个折中的方案,mixed 格式的 binlog,其实就是 row 和 statement 格式混合使用,当 MySQL 判断可能数据不一致时,就用 row 格式,否则使用就用 statement 格式 。
有时候我们遇到从数据库中获取不到信息的诡异问题时,会纠结于代码中是否有一些逻辑会把之前写入的内容删除,但是你又会发现,过了一段时间再去查询时又可以读到数据了,这基本上就是主从延迟在作怪 。
主从延迟,其实就是“从库回放” 完成的时间 , 与 “主库写 binlog” 完成时间的差值,会导致从库查询的数据,和主库的不一致。
【mysql怎么确定主从 mysql主从是什么意思】谈到 MySQL 数据库主从同步延迟原理,得从 MySQL 的主从复制原理说起:
总结一下主从延迟的主要原因:主从延迟主要是出现在 “relay log 回放” 这一步,当主库的 TPS 并发较高,产生的 DDL 数量超过从库一个 SQL 线程所能承受的范围,那么延时就产生了 , 当然还有就是可能与从库的大型 query 语句产生了锁等待 。
我们一般会把从库落后的时间作为一个重点的数据库指标做监控和报警,正常的时间是在毫秒级别,一旦落后的时间达到了秒级别就需要告警了 。
解决该问题的方法,除了缩短主从延迟的时间,还有一些其它的方法,基本原理都是尽量不查询从库 。
具体解决方案如下:
在实际应用场景中,对于一些非常核心的场景,比如库存,支付订单等 , 需要直接查询从库,其它非核心场景,就不要去查主库了 。
两台机器 A 和 B,A 为主库,负责读写,B 为从库,负责读数据 。
如果 A 库发生故障,B 库成为主库负责读写,修复故障后,A 成为从库,主库 B 同步数据到从库 A 。
一台主库多台从库 , A 为主库,负责读写,B、C、D为从库,负责读数据 。
如果 A 库发生故障,B 库成为主库负责读写,C、D负责读,修复故障后 , A 也成为从库,主库 B 同步数据到从库 A 。
关于mysql怎么确定主从和mysql主从是什么意思的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- go语言处理图片,go语言 _
- 小白怎么开通视频号卖货的简单介绍
- 电视无网络无法投屏怎么办,电视无网络能投屏吗
- 关于linux的met命令的信息
- ft是什么cpu,cpu ft20004
- 电脑unity怎么安装,怎么安装unity2018
- 网络足球游戏耳机,网络足球游戏耳机推荐
- linux报错命令未找到 linux bash未找到命令
- oracle查看当前表及注释,oracle查看当前用户的表