在以下部分,我们提供了关于 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 可以在 co-source 1 上进行更新,而在该更新传播到 co-source 2 之前,客户端 B 可以在 co-source 2 上进行更新,使得客户端 A 的更新在 co-source 2 上的行为不同于在 co-source 1 上的行为。因此,当客户端 A 的更新传播到 co-source 2 时,它将生成与 co-source 1 上不同的表,即使所有来自 co-source 2 的更新也已经传播。因此,除非您确定更新可以安全地以任何顺序发生,否则您不应该将两个服务器链式连接在双向复制关系中,或者您需要在客户端代码中处理mis-ordered 更新。 您还应该意识到,双向复制实际上并不会对性能产生很大的改善(如果有的话)。每个服务器都需要执行相同数量的更新,就像单个服务器那样。唯一的区别是,来自另一个服务器的更新将在一个复制线程中序列化。这一点可能会被网络延迟所抵消。 |
|
A.14.6. |
我如何使用复制来改善系统性能? |
将一个服务器设置为源服务器,并将所有写入操作定向到该服务器。然后,配置尽可能多的副本服务器,并将读取操作分布在源服务器和副本服务器之间。您还可以使用 |
|
A.14.7. |
我需要在自己的应用程序中做些什么来使用复制来提高性能? |
请参阅使用复制作为扩展解决方案的指南:第 19.4.5 节,“使用复制进行扩展”。 |
|
A.14.8. |
MySQL 复制可以在什么时候和多大程度上提高我的系统性能? |
MySQL 复制对频繁读取和不频繁写入的系统最有益处。在理论上,使用单源/多副本设置,可以通过添加更多副本来扩展系统,直到网络带宽用尽或更新负载增长到源无法处理的程度。 要确定可以使用多少副本之前,性能改善开始平坦化,并且可以通过 benchmarking 确定读取和写入的关系来确定系统的查询模式。例如,假设系统负载由 10% 的写入和 90% 的读取组成,我们通过 benchmarking 确定
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 位机器上)? |
是的。 |