Answers:
我们在多个欧洲国家/地区的数据中心之间使用复制(因此它们彼此之间不在世界范围内,但是它们肯定不是本地的),并且复制没有任何问题。
如果可能,复制将自动重新启动。如果查询存在问题(例如,主服务器上存在数据库,而从服务器上没有数据库,而查询使用该数据库),则默认情况下将需要手动更正(但您可以将其设置为忽略此类错误)。如果数据库是精确的镜像,则您永远不需要手动重新启动复制。
如果您有两个服务器,而主服务器消失了,则要将从服务器变成“主服务器”,只需停止复制并更改您的代码(以写入新的“主服务器”)。如果有三台或更多服务器,并且主服务器消失,则停止在从服务器上进行复制,将它们更改为使用新的主服务器,然后重新启动。如果它们不完全同步(取决于要传输的数据量,服务器的繁忙程度,网络连接的状况等等),那么您可能需要做更多的工作。 MySQL文档的复制部分对此进行了更详细的介绍。
我建议您确保通过SSL复制(即,将复制用户设置为需要SSL连接)。
复制在MySQL 5.1中发生了巨大变化。在5.0中,仅使用基于语句的复制。现在,您可以选择执行基于行的复制或基于混合的复制。这将极大地影响您通过WAN复制的方式。
如果您有能力:A)IP接管(如果服务器在地理位置上是不可能的)B)进行灵活的DNS更改您可以避免修改应用程序代码/配置来更改主服务器。我们使用具有短缓存和伪造.internal域的内部DNS。如果需要将masterdb.internal更改为其他服务器,则更改将在5秒钟内完成。
在单个数据中心内,我们使用IP接管。所有的数据库服务器都有虚拟接口(eth0:1,eth0:2,eth0:3),这些接口在启动时不会进行配置。如果一个奴隶需要接管,您只需ifup eth0:2,它就是主人。在这种情况下,eth0是我们用于诸如此类的外壳的“ if”。这些应用程序在eth0:1上连接,如果我的脚本检测到该IP已被占用,它将在启动时不会被激活。(维基百科STONITH)其他if是用于接管可能需要进行故障转移的主机的IP。