In the following section, we provide answers to questions that are most frequently asked about MySQL Replication.
- 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 的更新也已经传播。因此,您不应该将两个服务器链式连接到双向复制关系中,除非您确定您的更新可以安全地以任何顺序发生,或者您在客户端代码中处理了乱序更新。 您还应该意识到,双向复制实际上并不会很大地提高性能(如果有的话)。每个服务器都必须执行相同数量的更新,就像单个服务器那样。唯一的区别是,来自另一个服务器的更新将被序列化到一个复制线程中。甚至这种好处也可能被网络延迟所抵消。 |
|
A.14.6. |
我如何使用复制来提高系统性能? |
将一个服务器设置为源,并将所有写入指令发送到该服务器。然后,配置尽可能多的副本,并将读取分布在源和副本之间。您也可以使用 |
|
A.14.7. |
我需要在自己的应用程序中做什么来准备使用性能增强的复制? |
请参阅使用复制作为扩展解决方案的指南:第 19.4.5 节,“使用 Replication 作为扩展解决方案”。 |
|
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 位机器上)? |
是的。 |