MySQL分布式主从库读写测试与主从复制基础

一、主从库读写测试步骤
1. 环境准备:
- 搭建主从架构(1主1从或多从),确保主从复制正常(可通过 SHOW SLAVE STATUS 查看IO和SQL线程状态)。
- 主库配置 server-id=1 ,从库配置 server-id=2 ,主库开启二进制日志( log-bin )。
2. 读写测试核心操作:
- 写操作测试:在主库执行增删改(如 INSERT/UPDATE/DELETE ),观察从库数据是否同步(可通过定时查询或触发器验证)。
- 读操作测试:在从库执行查询(如 SELECT ),确认数据与主库一致,同时测试从库负载能力(可通过压测工具如 sysbench 模拟并发读)。
- 异常场景测试:
- 主库宕机:验证从库是否可切换为读写模式(需手动或通过中间件如MHA自动切换)。
- 网络延迟:模拟主从网络波动,观察数据同步延迟( Seconds_Behind_Master 参数)。
3. 关键指标记录:
- 同步延迟时间、读写性能差异、高并发下的一致性表现。
二、主从复制原理
1. 核心机制(基于二进制日志):
- 主库(Master):将数据变更记录到二进制日志(Binlog),包括DDL和DML操作。
- 从库(Slave):通过两个线程实现复制:
- IO线程:连接主库,读取Binlog并写入本地中继日志(Relay Log)。
- SQL线程:解析中继日志,在从库执行相同操作,实现数据同步。
2. 复制模式(3种):
- 异步复制:主库写入Binlog后立即返回,不等待从库确认(性能高,一致性差)。
- 半同步复制:主库等待至少一个从库确认接收Binlog后返回(性能和一致性平衡)。
- 全同步复制:主库等待所有从库确认后返回(一致性高,性能低)。
3. 常见问题与面试考点:
- 主从延迟:高并发下从库同步慢,解决方案:升级硬件、读写分离、分库分表。
- 数据一致性:异步复制可能丢失数据,可通过半同步或中间件(如Canal)弥补。
- 切换与故障恢复:手动切换主从时需锁定主库( FLUSH TABLES WITH READ LOCK ),避免数据不一致。
三、面试场景
- 结合场景说优势:主从架构用于读写分离,减轻主库压力,适合读多写少场景(如电商商品页查询)。
- 提扩展知识:主从是分布式基础,可延伸到集群架构(如MGR、InnoDB Cluster)或中间件(MyCat、ShardingSphere)。
全部评论
只会点点点可以嘛?
点赞 回复 分享
发布于 06-17 10:58 广东
必须爆赞
点赞 回复 分享
发布于 06-17 09:52 山东

相关推荐

发个面筋攒攒人品一面实习项目是什么?分布式锁 你都用过哪些? 你设置过期时间么? 如果抛出异常了 你的锁 还能删么?你说的redisson 和setnx 有什么区别?主线程 等待后面十个并发请求的完成之后 再处理主线程?你会怎么实现?你的分布式锁过期了 然后业务还没处理完 会产生什么情况?Redis持久化策略? 内存淘汰策略的呢?你都用过什么数据结构?线程中的wait 和 sleep的话有什么区别?创建线程都有哪些方式?线程池的核心参数? 最大线程数 指的是什么? 我现在没有工作队列 然后 10核心线程数 30最大线程数 现在15个线程进来 会怎么执行?集合的set元素可以重复么?key能重复么? 为什么不能重复?sql优化有什么思路?现在又100条数据 要你去进行修改 然后涉及三个表 如果有一个表修改失败你需要去回滚 你会怎么做?你说的tcc 本地事务不是也会影响到么 怎么解决?二面实习公司是干什么的 业务说一说针对项目难点或者说 遇到的不会的地方?Rocket的消息模型都知道那些?Rocketmq的 无序 顺序 事务 消息都说一下吧?泛型你怎么看Stream流循环和for循环 你怎么看JVM结构?双亲委派机制?垃圾回收器?@Transaction事务 的 传递方式? 失效场景? 为什么会失效?Inodb存储引擎么 你知道他是B+树 那么他和b树 和红黑树之间 优点在那里?ArrayList 和 LinkedList 的区别 适用场景?为什么会适用这样的场景?HashMap ConcurrentHashMap?你说了锁 那你说下锁升级 锁是怎么实现的?CAS你刚才也说了  他会有什么问题 怎么解决?线程池的话你用过哪些? 然后 参数都有什么 你会怎么设置? 为什么这样设置?Java io模型 你都知道什么? Nio怎么实现的?Mysql一条select语句的查询顺序MVC的处理流程?Java的异常? 运行时异常 和 非运行时异常呢?手撕sql一面完秒约二面 二面完约hr面
点赞 评论 收藏
分享
07-30 20:12
福州大学 Java
1、缓存穿透的概念,布隆过滤器如何实现(底层逻辑)2、如何实现登录的逻辑,如何存储数据保证原子性?3、JWT具体是怎么实现的,你的项目中如何保证登录的一致性,就是如何防止重复登录?4、一人一单 是如何具体实现的?如何防止用户重复下单?5、你提到了消息队列,你可以告诉我在数据库方面是如何保证防止超卖和一人一单的吗?6、这里的命令你清楚吗,能不能说一下(SQL命令)7、你的项目中是如何保证数据一致性的?8、详细说一下保证数据一致性的操作?9、RabbitMQ是如何保证持久化的?10、RabbitMQ是如何实现事务最终一致性的?11、你提到了Kafka,你知道Kafka跟RabbitMQ的区别吗?12、消息队列的补偿重试具体是怎么实现的?13、在你的项目中,为什么要用布隆过滤器?14、你提到了缓存穿透问题,那么这个问题会出现在什么场景中?15、布隆过滤器具体是怎么实现的?16、你提到了布隆过滤器中的三次哈希,你知道这三次哈希具体是怎么哈希的吗?(这里不是很会,只知道java中的hashcode有变种,可以使用变种)17、那布隆过滤器存在误判吗?为什么存在误判?18、你除了代码之外,你还了解其他的什么工具吗?(这里直接说了微服务)19、你的项目中是如何保证防止超卖的?(这里我说的是分布式锁)20、在你的项目中你使用的是乐观锁还是悲观锁?(回答了乐观锁,并且说了乐观锁的概念以及选它的原因)21、那你应该知道CAS,你能讲讲CAS吗?22、在你的项目中你是怎么限流的?23、你用到了redis,那你知道redis的持久化是怎么做的吗?24、你知道Redis是如何控制分布式锁的有效时长的吗?25、RabbitMQ如何保证消息不丢失呢?26、RabbitMQ重复消费问题怎么解决?RabbitMQ的延迟队列有了解吗?27、你提到你有了解jvm,那你知道堆栈的区别吗?28、类加载器是什么?29、你自我介绍的时候提到你学过c和python,那你知道c和java的区别吗?(这里实际上大概问了有五个问题,问的都非常底层,有很多都是我竭尽脑汁才想出来的,相对的这里答的并不是很好)反问:1、我们公司是做什么业务的,我们部门呢?(这里他回答的很详细,我只能说我的面试官人真的挺不错的,虽然问了我很多)2、我今天的表现怎么样,因为我感觉有几个底层的问题我没回答出来?答:总体来说你今天的表现非常不错,确实是要注意底层,相对来说底层回答的有些不行,但是总的来说很不错
广东小小鹿:最新进度:进横向对比了,暂时不抱期望了,去面其他公司了
查看28道真题和解析
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务