我如何镜像一个MySQL数据库?

我正在为一个网站运行两个负载平衡的服务器,我希望数据库被同步。 查询可以在两台服务器上运行,因为它们都是生产站点,所以复制不能单向工作。

它不必是实时的,只是相当准确的,所以当人们切换到不同的服务器时,他们并没有注意到有什么不同。

正如其他人所提到的,你所说的是多主复制。 有像Maatkit或MMM这样的开源工具可以帮助复制主复制,但是即使这样你仍然要求一个受到伤害的世界。

我会确保你真的需要你的写入同步发生(即时)。 如果在用户在网站上执行操作和在数据库中插入或更新数据之间有几秒到一分钟的延迟时间,我会考虑设置某种脱机日志logging过程。 例如,无论你在哪里使用插入/更新语句,都要写入一些写入文件的内容,或者写入内存数据库(如果无法写入磁盘的话),并在networking上放置一些进程/守护进程头部,读取日志文件,并将适当的数据写入单个主设备; 然后将其复制到其他负载平衡机器。

拿这个来说,虽然B / C我从来没有必要主动维护多主复制。

此链接是关于主 – 主复制,也称为循环复制。 如果你没有非常重的数据库,应用和工作很简单。

我也会尝试不使用循环复制。

如果可能,请使用标准复制,在两个节点上分发只读查询,并向主节点读/写查询。 适用于维基百科,可以为你工作:)

另一种方法可能是设置双节点主动 – 被动设置(drbd和一些集群)。 更容易的应用程序(它只是看到一个单一的MySQL服务器连接),需要一些关注的一面,如果你不习惯这样的东西。 你没有得到两个不同的数据库服务器的性能奖金。

为了做出select,您需要确定您的主要兴趣是降低停机时间(标准复制还是主动/被动群集)或实现更好的性能(标准复制,循环复制等)以及您的约束条件是什么(可以修改应用程序,你可以修改多less,需要的性能,允许的预算等…)

为了从硬件中获得更好的性能(或者只是为了弥补主动/被动方式的性能不足),请不要忘记memcached和类似的东西。

为什么不简化一下。 让两个前端使用相同的后端,然后使用DRBD和Heartbeat之类的东西来确保您的数据库不会成为单点故障。 双主复制几乎总是以泪结束。