在以下部分中,我们将提供有关 MySQL 复制最常见问题的解答。
- A.14.1. 副本是否必须始终连接到源?
- A.14.2. 是否必须在我的源和副本上启用网络才能启用复制?
- A.14.3. 如何知道副本与源相比延迟了多少?换句话说,如何知道副本复制的最后一个语句的日期?
- A.14.4. 如何强制源阻塞更新,直到副本赶上?
- A.14.5. 设置双向复制时,我应该注意哪些问题?
- A.14.6. 如何使用复制来提高系统性能?
- A.14.7. 为了在自己的应用程序中使用性能增强的复制,我应该如何准备客户端代码?
- A.14.8. MySQL 复制何时以及在多大程度上可以提高系统性能?
- A.14.9. 如何使用复制来提供冗余或高可用性?
- A.14.10. 如何判断复制源服务器是使用基于语句的还是基于行的二进制日志格式?
- A.14.11. 如何告诉副本使用基于行的复制?
- A.14.12. 如何防止 GRANT 和 REVOKE 语句复制到副本机器?
- A.14.13. 复制是否适用于混合操作系统(例如,源在 Linux 上运行,而副本在 macOS 和 Windows 上运行)?
- A.14.14. 复制是否适用于混合硬件体系结构(例如,源在 64 位机器上运行,而副本在 32 位机器上运行)?
A.14.1. | 副本是否必须始终连接到源? |
不,并非如此。副本可以关闭或断开连接数小时甚至数天,然后重新连接并赶上更新。例如,您可以通过拨号链接设置源/副本关系,其中链接仅偶尔启动且持续时间很短。这意味着,在任何给定时间,都不能保证副本与源同步,除非您采取一些特殊措施。 为了确保已断开连接的副本可以进行追赶,您不得从源中删除包含尚未复制到副本的信息的二进制日志文件。异步复制只有在副本能够从上次读取事件的位置继续读取二进制日志时才能工作。 | |
A.14.2. | 是否必须在我的源和副本上启用网络才能启用复制? |
是的,必须在源和副本上启用网络。如果未启用网络,则副本无法连接到源并传输二进制日志。验证是否已在任一服务器的配置文件中启用了 | |
A.14.3. | 如何知道副本与源相比延迟了多少?换句话说,如何知道副本复制的最后一个语句的日期? |
检查 当复制 SQL 线程执行从源读取的事件时,它会将其自身时间修改为事件时间戳。(这就是 | |
A.14.4. | 如何强制源阻塞更新,直到副本赶上? |
请使用以下步骤:
| |
A.14.5. | 设置双向复制时,我应该注意哪些问题? |
MySQL 复制当前不支持源和副本之间的任何锁定协议来保证分布式(跨服务器)更新的原子性。换句话说,客户端 A 可以对共源 1 进行更新,同时,在它传播到共源 2 之前,客户端 B 可以对共源 2 进行更新,这使得客户端 A 的更新工作方式与其在共源 1 上的工作方式不同。因此,当客户端 A 的更新到达共源 2 时,它会生成与共源 1 上不同的表,即使来自共源 2 的所有更新也已传播之后也是如此。这意味着您不应该将两台服务器链接在一起形成双向复制关系,除非您确定您的更新可以按任何顺序安全地进行,或者除非您在客户端代码中以某种方式处理乱序更新。 您还应该意识到,就更新而言,双向复制实际上并没有提高多少性能(如果有的话)。每个服务器都必须执行相同数量的更新,就像您只有一个服务器一样。唯一的区别是锁争用少了一些,因为源自另一台服务器的更新在一个复制线程中序列化。即使是这种好处也可能被网络延迟所抵消。 | |
A.14.6. | 如何使用复制来提高系统性能? |
将一台服务器设置为源,并将所有写入定向到该服务器。然后,根据您的预算和机架空间配置尽可能多的副本,并在源和副本之间分配读取。您还可以使用 | |
A.14.7. | 为了在自己的应用程序中使用性能增强的复制,我应该如何准备客户端代码? |
请参阅将复制用作横向扩展解决方案的指南,第 19.4.5 节,“使用复制进行横向扩展”。 | |
A.14.8. | MySQL 复制何时以及在多大程度上可以提高系统性能? |
MySQL 复制对于处理频繁读取和不频繁写入的系统最为有利。理论上,通过使用单源/多副本设置,您可以通过添加更多副本扩展系统,直到网络带宽耗尽,或者更新负载增长到源无法处理的程度。 要确定在增加的优势开始趋于稳定之前可以使用多少个副本,以及可以提高站点性能的程度,您必须了解您的查询模式,并通过对典型源和典型副本上的读写吞吐量之间的关系进行基准测试来根据经验确定。此处的示例显示了对于假设系统,您可以使用复制获得的相当简化的计算。令 假设系统负载由 10% 的写入和 90% 的读取组成,并且我们通过基准测试确定
9 *
最后一个等式表示在每秒最大可能读取速率为 1,200 次和每写入 9 次读取的比率下, 此分析得出以下结论
这些计算假设网络带宽无限,并且忽略了其他几个可能对您的系统至关重要的因素。在许多情况下,如果您添加
| |
A.14.9. | 如何使用复制来提供冗余或高可用性? |
您如何实现冗余完全取决于您的应用程序和环境。高可用性解决方案(具有自动故障转移)需要主动监控和自定义脚本或第三方工具,才能提供从原始 MySQL 服务器到副本的故障转移支持。 要手动处理该过程,您应该能够通过更改应用程序以与新服务器通信或通过将 MySQL 服务器的 DNS 从故障服务器调整为新服务器来从故障源切换到预先配置的副本。 有关更多信息和一些示例解决方案,请参阅第 19.4.8 节“故障转移期间切换源”。 | |
A.14.10. | 如何判断复制源服务器是使用基于语句的还是基于行的二进制日志记录格式? |
检查
显示的值始终是 | |
A.14.11. | 如何告诉副本使用基于行的复制? |
副本会自动知道使用哪种格式。 | |
A.14.12. | |
使用 | |
A.14.13. | 复制是否适用于混合操作系统(例如,源在 Linux 上运行,而副本在 macOS 和 Windows 上运行)? |
是的。 | |
A.14.14. | 复制是否适用于混合硬件体系结构(例如,源在 64 位机器上运行,而副本在 32 位机器上运行)? |
是的。 |