我们在一个位置有一台 MySQL 服务器,以主->从配置复制到另一个位置。此服务器上大约有 5-7 个不同的数据库。我们想要这样做...
我们有第二个站点,我们想将所有由 MySQL 驱动的 Web 服务器移至该站点以实现高可用性。不幸的是,我们无法一次性移动所有这些服务器,并且想要通过 WAN 链接设置从一个 MySQL 服务器到另一个 MySQL 服务器的复制。由于我们将慢慢将 Web 服务器转移到第二个站点,因此我需要慢慢将数据库从现有环境转移到第二个站点以供生产使用。我的问题是,我可以通过网络复制数据库、移动 Web 服务器、将新服务器指向新的 MySQL 并提升它所需的单个数据库并将其写回原始服务器吗?
我是否可以简单地设置一个主-主复制,使得 Web 服务器只向其中一个或另一个写入数据,而不会出现此处其他地方描述的自动增量问题?
希望这说得通。Web 应用程序只会写入其中一个服务器,而不会同时写入两个服务器。这可能吗?
很高兴根据需要澄清。
答案1
至于自动增量问题,明显的解决方法是使用偏移量。
服务器 1:
auto-increment-increment = 2
auto-increment-offset = 1
服务器2:
auto-increment-increment = 2
auto-increment-offset = 2
完成后,只需在剩余的服务器上撤消此操作即可。
答案2
您可以告诉从属服务器仅对特定数据库应用复制语句:
–replicate-do-db = myfoodb
--replicate-do-db=myotherfoodb
http://dev.mysql.com/doc/refman/5.5/en/replication-options-slave.html#option_mysqld_replicate-do-db—— 然后只要您准备好了,您就可以切换您的应用程序。
至于主主设置,它有一些注意事项,但完全可行。根据站点之间的延迟/吞吐量,您可以使用 Percona 的集群 XtraDB/galeria magic dust 来确保同步复制,这将解决任何常见的主主不稳定性http://www.percona.com/software/percona-xtradb-cluster——尽管如我所说,还是有一些注意事项;例如:你的代码不能发出GET_LOCK
答案3
CMIIW 只是补充评论
如果您正在为 MySQL Master-Master 使用 HAProxy,则可以使用下面的示例设置(我使用 haproxy 1.4),所有默认连接将转发到 mysql1,否则,如果 mysql1 关闭,则 mysql2 将提供服务(主动 - 待机),并且如果 mysql1 启动,它将故障回复到 mysql1。
listen www_website_com_3306 www.website.com:3306
mode tcp
balance roundrobin
option tcplog
option mysql-check user haproxy
server mysql1 mysql1:3306 check inter 2s rise 2 fall 2 maxconn 50
server mysql2 mysql2:3306 check **backup** inter 2s rise 2 fall 2 maxconn 50