返回题库数据库刷题MySQL 选择题 · 第 5 / 5 篇

日志、主从复制与分库分表

081 binlog 的主要用途是?

难度: 基础

  • A. 记录数据库变更,用于主从复制与基于时间点的恢复
  • B. 记录查询日志用于慢 SQL 审计
  • C. 保存行的旧版本供回滚
  • D. 缓存热点数据提升读性能
查看答案与解析

正确答案A

正确原因: binlog 是逻辑日志,记录数据变更事件,支撑复制与时间点恢复。

关键边界: binlog 不记录 SELECT,redo 与 undo 属于 InnoDB 层。

错误选项辨析: 慢查询用慢日志,回滚用 undo log,读性能靠缓冲池与索引。

082 binlog 的三种格式是?

难度: 基础

  • A. STATEMENT、ROW、MIXED
  • B. TEXT、BINARY、JSON
  • C. FULL、PARTIAL、NONE
  • D. LOG、DATA、INDEX
查看答案与解析

正确答案A

正确原因: STATEMENT 记录 SQL,ROW 记录行变更,MIXED 由服务器自动选择。

关键边界: MySQL 8.0 默认使用 ROW 格式,安全性与一致性最好。

错误选项辨析: 三种错误选项都是编造的组合,不是官方支持的 binlog 格式。

083 传统主从复制(异步)的基本流程是?

难度: 基础

  • A. 从库直接读取主库的数据文件
  • B. 主库写 binlog,从库 I/O 线程拉取写 relay log,SQL 线程回放
  • C. 主库把内存数据页复制给从库
  • D. 从库定期全量导入主库备份
查看答案与解析

正确答案B

正确原因: 复制由 binlog、relay log 与 SQL 线程三段完成,I/O 线程与 SQL 线程解耦。

关键边界: 延迟源于 I/O 拉取与 SQL 回放之间的进度差。

错误选项辨析: 从库不读主库文件,不复制内存页,全量导入只是初始化方式。

084 半同步复制(Semisync)相比异步复制?

难度: 基础

  • A. 所有从库同步执行每条 SQL 后才返回
  • B. 至少一个从库确认收到 binlog 后主库才提交,减少丢失窗口
  • C. 完全不等待从库,提交更快
  • D. 从库自动变为只读主库
查看答案与解析

正确答案B

正确原因: 半同步要求至少一个从库 ACK 才提交,显著缩小故障丢失窗口。

关键边界: 从库无响应超时后可能降级为异步,且影响主库写入可用性。

错误选项辨析: 它不要求从库执行 SQL,不是完全不等待,也不会自动切换主库。

085 读写分离架构的前提与风险是?

难度: 基础

  • A. 所有读都必须走从库才安全
  • B. 读写分离可以消除主库压力且零延迟
  • C. 读多写少且可容忍短时复制延迟;强一致读需路由到主库
  • D. 从库数据永远与主库一致
查看答案与解析

正确答案C

正确原因: 从库数据由复制异步同步,存在延迟,业务需区分实时读与弱一致读。

关键边界: 强一致场景(如下单后读余额)应强制走主库。

错误选项辨析: 读从库不必然安全,延迟无法归零,从库不是实时一致。

086 主从复制延迟的常见原因是?

难度: 基础

  • A. 主库 CPU 占用为 0 时延迟自动消失
  • B. 网络带宽越大延迟必然为 0
  • C. 从库回放并行度不足、大事务、慢 SQL、从库负载高
  • D. 延迟只与 binlog 格式有关
查看答案与解析

正确答案C

正确原因: 延迟本质是回放进度落后,单线程瓶颈、大事务与从库负载都会加剧。

关键边界: 8.0 从库并行复制可缓解单线程回放瓶颈。

错误选项辨析: 主库空闲不等于无延迟,带宽不是唯一因素,格式影响有限。

087 GTID 复制相比传统基于文件名和位置的复制?

难度: 进阶

  • A. GTID 只适用于单机,不支持复制
  • B. GTID 复制必须全量重传所有历史事务
  • C. GTID 会禁用 binlog
  • D. 用全局事务标识自动定位复制起点,无需手工指定 binlog 文件与位置
查看答案与解析

正确答案D

正确原因: GTID 由源标识与事务序号组成,天然去重并自动定位,切换更简单。

关键边界: MySQL 8.0 默认开启 GTID,仍需正确配置复制账号与过滤规则。

错误选项辨析: GTID 专为复制设计,不要求全量重传,且依赖 binlog。

088 binlog 与 redo log 的关键区别是?

难度: 进阶

  • A. 两者完全相同,可以互相替代
  • B. binlog 属于 InnoDB 引擎内部
  • C. redo log 用于主从复制
  • D. redo 是 InnoDB 物理重做日志(崩溃恢复);binlog 是 Server 层逻辑日志(复制与恢复)
查看答案与解析

正确答案D

正确原因: redo 循环写、记录页修改,服务崩溃恢复;binlog 追加写、记录事务变更,服务复制与时间点恢复。

关键边界: 两阶段提交协调两份日志的一致性。

错误选项辨析: 两者不可替代,binlog 在 Server 层,redo 不用于复制。

089 分库分表(水平拆分)的目的是?

难度: 基础

  • A. 把数据按分片键分散到多库多表,突破单机容量与写入瓶颈
  • B. 让所有查询都变快,无需考虑分片键
  • C. 把表结构字段拆到多张表
  • D. 替代所有索引与缓存
查看答案与解析

正确答案A

正确原因: 水平拆分按行分散数据,解决单机容量与写入压力。

关键边界: 跨分片查询、聚合与事务复杂度会上升,需在架构上规划。

错误选项辨析: 拆字段是垂直拆分,分片不保证所有查询更快,也不替代索引缓存。

090 选择分片键(sharding key)的原则是?

难度: 进阶

  • A. 高频查询能带上的、分布均匀的、业务稳定的列
  • B. 任意一列都可以,选择与查询无关
  • C. 数据越集中越好,方便热点管理
  • D. 分片键必须是可以为 NULL 的列
查看答案与解析

正确答案A

正确原因: 不带分片键的查询需要广播到所有分片,分布不均会形成倾斜与热点。

关键边界: 分片键一旦确定很难变更,必须业务稳定。

错误选项辨析: 分片键与查询强相关,集中分布是坏事,NULL 键会破坏路由。

091 雪花算法(Snowflake)生成分布式 ID 的特点是?

难度: 进阶

  • A. 完全随机,无法按时间排序
  • B. 由时间戳、机器标识与序列号组合,趋势递增且全局唯一
  • C. 依赖数据库自增,每台机器共享同一计数器
  • D. 只能生成 32 位短整数
查看答案与解析

正确答案B

正确原因: 雪花 ID 高位是时间戳,低位是机器与序列号,趋势递增且全局唯一。

关键边界: 需要注意时钟回拨问题,以及 64 位长度的存储与展示处理。

错误选项辨析: 它不随机、不依赖数据库,生成 64 位整数而非 32 位。

092 分库后,跨分片的 JOIN 与聚合通常如何处理?

难度: 进阶

  • A. 数据库会自动在分片间执行分布式 JOIN
  • B. 由应用层多次查询后内存聚合,或用中间件、宽表冗余解决
  • C. 分片后 JOIN 永远免费,无任何限制
  • D. 只能放弃全部查询,改为全量导出
查看答案与解析

正确答案B

正确原因: 数据分散后单库 JOIN 无法覆盖,需要应用聚合或中间件支持。

关键边界: 中间件方案支持有限跨分片操作,但代价与复杂度明显。

错误选项辨析: 跨分片 JOIN 不自动免费,设计时应尽量按分片键本地化。

093 分布式事务 2PC(两阶段提交)的不足是?

难度: 进阶

  • A. 2PC 完全无阻塞,故障零影响
  • B. 2PC 只能用于单机数据库
  • C. 协调者单点、参与者阻塞、性能开销大,工程上常用最终一致性替代
  • D. 2PC 会提高吞吐并减少网络开销
查看答案与解析

正确答案C

正确原因: 2PC 保证强一致,但协调者宕机会卡住参与者,通信轮次多、性能差。

关键边界: MySQL XA 可用于 2PC,但高并发场景下通常用最终一致性方案。

错误选项辨析: 2PC 有阻塞与单点问题,不限于单机,且开销大而非提高吞吐。

094 主从切换(failover)时最容易出现的风险是?

难度: 进阶

  • A. 切换后从库自动拥有全部数据,零丢失
  • B. 切换操作不会影响连接与路由
  • C. 原主库未同步的 binlog 可能丢失,切换后数据不一致
  • D. 主从切换无需任何人工确认
查看答案与解析

正确答案C

正确原因: 异步复制下原主在切换瞬间的未发送事务会丢失。

关键边界: 半同步、增强半同步或选最先进从库可降低丢失风险。

错误选项辨析: 零丢失不成立,切换会中断连接,需要确认与演练。

095 relay log 的作用是?

难度: 基础

  • A. 主库暂存待发送给从库的日志
  • B. 记录从库上用户的登录日志
  • C. 替代 binlog 用于全量备份
  • D. 从库暂存从主库拉取的 binlog 事件,供 SQL 线程回放
查看答案与解析

正确答案D

正确原因: relay log 位于从库本地,是复制两阶段的中转文件。

关键边界: relay log 格式与 binlog 一致,可通过 mysqlbinlog 查看。

错误选项辨析: 它不在主库、不是登录日志,也不替代 binlog。

096 MySQL 8.0 从库并行复制的作用是?

难度: 基础

  • A. 从库只能用单线程回放
  • B. 并行复制不需要 binlog
  • C. 并行复制会让从库数据不一致
  • D. 基于事务依赖关系多线程并行回放,缓解复制延迟
查看答案与解析

正确答案D

正确原因: 8.0 基于 WRITESET 或依赖分析实现多线程并行回放,前提通常是 row 格式 binlog。

关键边界: 并行度受事务依赖限制,大事务仍可能成为瓶颈。

错误选项辨析: 单线程是旧版限制,并行依赖 binlog,且能保证一致性。

097 业务读到从库旧数据(主从延迟)时的处理是?

难度: 实战

  • A. 对强一致读路由到主库,弱一致场景可容忍或用版本号、时间戳校验
  • B. 关闭从库读,全部走主库且不做任何拆分
  • C. 无条件重试直到从库追上,可能无限等待
  • D. 删除主从架构,改用单机数据库
查看答案与解析

正确答案A

正确原因: 延迟无法绝对消除,按一致性需求分级路由是常见做法。

关键边界: 关键操作后的即时读应强制走主库,弱一致读可接受短暂旧数据。

错误选项辨析: 全走主库失去读写分离价值,无限重试不可控,单机化不可扩展。

098 分片后需要跨分片全局排序分页(ORDER BY LIMIT)时?

难度: 实战

  • A. 直接对每个分片取相同 offset,合并即正确
  • B. 各分片先取局部 Top N,合并后在应用层再排序取前 N
  • C. 全局排序分页完全免费,性能无损
  • D. 分片后禁止任何 ORDER BY
查看答案与解析

正确答案B

正确原因: 各分片需取 offset 加 limit 条再归并排序,才能保证全局正确。

关键边界: 深分页成本高,是分布式分页的固有代价,可考虑游标分页。

错误选项辨析: 相同 offset 合并会漏数据,分页有成本,ORDER BY 仍可执行。

099 为什么需要同时存在 redo log 与 binlog?

难度: 基础

  • A. 两份日志完全重复,只为磁盘冗余
  • B. binlog 可以替代 redo 用于崩溃恢复
  • C. redo 服务 InnoDB 崩溃恢复,binlog 服务复制与时间点恢复,二者职责不同
  • D. redo 可以替代 binlog 用于主从复制
查看答案与解析

正确答案C

正确原因: 崩溃恢复需要物理页重做(redo),复制与时间点恢复需要逻辑变更(binlog)。

关键边界: 两阶段提交保证两份日志在事务边界上一致。

错误选项辨析: 两者职责不同不可替代,互为补充而非冗余。

100 复制中遇到临时表、自增等行为时,statement 格式的风险是?

难度: 进阶

  • A. statement 格式总是比 row 格式更安全
  • B. 复制只支持 statement 一种格式
  • C. 临时表与自增对复制没有任何影响
  • D. 不同实例执行结果可能不同,导致主从不一致,row 格式更安全
查看答案与解析

正确答案D

正确原因: 非确定性语句(无排序 LIMIT、临时表、UUID、自增依赖)在 statement 下可能产生不同结果。

关键边界: row 格式记录行级变更结果,一致性最好,8.0 默认采用。

错误选项辨析: row 更安全,复制支持多种格式,临时表与自增正是典型风险点。

官方资料

当前分类

MySQL 选择题

查看全部分类 →
  1. 01InnoDB 存储引擎与 B+ 树索引20 题
  2. 02索引使用与 SQL 优化20 题
  3. 03事务、隔离级别与 MVCC20 题
  4. 04锁与并发控制20 题
  5. 05日志、主从复制与分库分表20 题
ESC

输入关键词开始搜索