2017-06-29 45 views
0

我有1个MySQL服务器来支持PHP应用程序。应用程序中的逻辑需要多个查询。例如,要添加事务,我需要创建多个查询对象并单独运行这些查询,而不使用commit。意思是首先在一个对象中添加交易数据。而要添加付款方式,我正在创建不同的对象。MySQL复制如何保持同步?

现在很好,因为我只有1个MySQL服务器。如果我有多台服务器(MySQL Master-Slave)会发生什么情况。

在一次操作中创建不同的对象将调用不同的服务器。而且由于延迟数据可能无法在另一台服务器上使用。

请告诉我这样做是否正确。如果问题不清楚,请澄清。谢谢!

+0

您是在谈论复制还是分开独立的数据库服务器? – Machavity

+0

@Machavity:复制。我打算切换到亚马逊RDS或Azure MySQL。但是,我不确定当前的应用程序代码和逻辑将支持。 –

回答

2

这实际上不是复制问题。假设您有查询A,然后查询B(依赖于A)和查询C(依赖于B)。

所以你做直接的事情,并按顺序A,B和C运行它们。复制将它们按相同的顺序放入日志中。所以当你的奴隶执行它们时,它将以相同的方式和顺序执行它们。

即使它们不同步,从属设备也知道它在日志中的最后位置,并且会在那里回复。如果您使用RDS设置从站,则会自动为您处理。

+0

知道了..因此,我假设即使在内部使用不同的服务器,也不会有任何延迟问题。如果查询C依赖于B并且B不在服务器2中,那么它将自动从RDS的中央日志中获取。 –

+0

另外,关于Azure MySQL的任何想法?他们刚刚启动预览。我所有的服务器都是天蓝色的,所以我正在考虑通过RDS来完成,如果它是相同的。 –

+0

从未使用Azure,但RDS直接为您管理奴隶(我假定Azure也是这样做的)。有时候一个奴隶会被“卡住”,并且不得不通过命令使其失效,但这是为了手动复制设置。 – Machavity

0

如果您正在考虑使用RDS,您将查询集群端点。该群集端点将自动启动处于活动状态的服务器并在其中创建查询。 提交查询后,从属数据库将自动同步以反映您的更改。这需要几毫秒。