【MySQL知识点问答题】高级复制技术

目录

[1. 相对于坐标位置,使用 GTID 配置复制时都具备哪些优势?](#1. 相对于坐标位置,使用 GTID 配置复制时都具备哪些优势?)

[2. 在对复制应用过滤规则时,给出你所知道的方法并说明各自的适用场合。](#2. 在对复制应用过滤规则时,给出你所知道的方法并说明各自的适用场合。)

[3. 二进制日志有哪几种记录格式,请详细加以说明。](#3. 二进制日志有哪几种记录格式,请详细加以说明。)

[4. 请说明在复制拓扑中,中继日志集和从属服务器状态日志的作用。](#4. 请说明在复制拓扑中,中继日志集和从属服务器状态日志的作用。)

[5.使用日志坐标进行故障转移与使用 GTID 进行故障转移时各自有哪些注意事项?](#5.使用日志坐标进行故障转移与使用 GTID 进行故障转移时各自有哪些注意事项?)

总结


在 MySQL 高可用架构中,复制技术是核心组成部分。通过复制,我们可以实现数据冗余、负载分担以及快速故障恢复。

1. 相对于坐标位置,使用 GTID 配置复制时都具备哪些优势?

GTID(全局事务标识符)是 MySQL 用于标识复制中每个事务的唯一标识符。

  • 格式<source-uuid>:<transaction-id>
    例如:0ed18583-47fd-11e2-92f3-0019b944b7f7:338

  • 优势

    • 每个事务的日志 ID 及其来源服务器都被唯一记录。

    • 当主服务器发生故障时,从服务器可以精准识别每个事务,确保数据一致性和完整性。

    • 对复杂复制拓扑(如多级或多源复制)尤其有效,极大降低故障恢复的风险。

相比传统的基于日志坐标的复制,GTID 使复制管理更加简洁和可靠。

2. 在对复制应用过滤规则时,给出你所知道的方法并说明各自的适用场合。

  • 主服务器过滤 :使用 binlog-* 系列过滤器控制哪些数据库和表写入二进制日志。
  • 从属服务器过滤 :使用 replicate-* 系列过滤器控制从服务器从二进制日志中读取哪些事件。

应用场景

  • 当不同服务器承担不同业务或分析任务时,可以只复制需要的数据,降低网络和存储压力。

3. 二进制日志有哪几种记录格式,请详细加以说明。

  1. 基于行(ROW)

    • 记录每一行的数据更改,保证事务可精确重放。

    • 默认格式,适合高一致性要求场景。

  2. 基于语句(STATEMENT)

    • 记录实际 SQL 语句,日志文件小,可用于审计。

    • 对非确定性语句(如 UUID(), USER())可能无法正确重放。

  3. 混合模式(MIXED)

    • 默认使用基于语句的日志,当语句不确定时自动切换到基于行的日志。

    • 提供灵活性,兼顾性能和一致性。

4. 请说明在复制拓扑中,中继日志集和从属服务器状态日志的作用。

  • 中继日志

    • 保存从主服务器接收的二进制日志,格式与二进制日志相同。

    • 服务器自动管理,重放完成后自动删除。

  • 从属服务器状态日志

    • 记录从服务器如何连接主服务器,以及最新复制的日志坐标信息。

    • 保证故障恢复或重启时复制进度的正确性。

5.使用日志坐标进行故障转移与使用 GTID 进行故障转移时各自有哪些注意事项?

  1. 基于日志坐标的故障转移
  • 注意事项

    • 如果新主服务器位于某个从服务器之后,从服务器可能重复应用事件。

    • 如果新主服务器位于某个从服务器之前,从服务器可能跳过事件。

  • 风险:需要人工精确计算和调整,易出现数据不一致。

  1. 基于 GTID 的故障转移
  • 优势:避免同一服务器产生的事件重复应用。

  • 注意事项

    • 在复杂拓扑(多源或循环复制)中,GTID 不能自动解决不同服务器间的事务冲突。

    • 故障恢复后,应用程序必须谨慎检查可能的冲突操作。

总结来看,GTID 提供了更自动化和精确的复制管理方式,但在复杂环境中仍需结合业务逻辑和监控策略。

总结

MySQL 的复制技术已经从传统的日志坐标复制发展到 GTID 复制,结合过滤规则和日志管理,可以实现高可用、可扩展的数据架构:

  • GTID:确保事务唯一性,简化故障恢复。

  • 复制过滤规则:精细控制复制数据范围,提升效率。

  • 二进制日志格式:ROW、STATEMENT、MIXED 满足不同一致性和性能需求。

  • 中继日志和状态日志:保证复制进度和数据一致性。

  • 故障转移策略:GTID 更安全,但仍需关注跨服务器冲突。

相关推荐
IT邦德2 小时前
Oracle备份恢复概览
数据库·oracle
User_芊芊君子2 小时前
别再乱用 ArrayList 了!这 4 个隐藏坑,90% 的 Java 开发者都踩过
android·java·数据库
xcLeigh2 小时前
IoTDB Java 原生 API 实战:SessionPool 从入门到精通
java·开发语言·数据库·api·iotdb·sessionpool
必胜刻2 小时前
Redis分布式锁讲解
数据库·redis·分布式
gjc5922 小时前
零基础OceanBase数据库入门(6):连接OB集群
数据库·oceanbase
2601_954023662 小时前
Review and Installation Guide: Meminz - Download Software Landing Page Theme
数据库·seo·wordpress·gpl
slarymusic2 小时前
redis的下载和安装详解
数据库·redis·缓存
qq_283720052 小时前
MySQL 8.0 与 5.7 全维度深度对比:核心差异、技术演进与新手选型终极指南
mysql·性能对比
sR916Mecz3 小时前
Netty 线程模型
java·数据库·oracle