我在生产中设置了 MySQL 复制,如下所示:
DB1->DB2 DB1 -> BAK
其中DB2
和BAK
是 的从属服务器DB1
。所有 3 台服务器均同步(比主服务器慢 0 秒)且拥有 30+ GB 的数据。
我想将服务器置于新的主从配置中,如下所示:
DB1->DB2->BAK
更改主机的最佳方法是什么BAK
?
有没有办法避免停止从属线程DB2
并获取 mysqldump BAK
(5-6 小时的过程)?
答案1
他们称之为主从级联复制。您需要在 DB2 上启用 log-bin 和 log-slave-updates,请参见此处:
一旦在 BD2 上运行,在 BAK 上您需要更改主服务器并重置从服务器以刷新其日志信息,ala:
mysql> stop slave;
mysql> change master to MASTER_HOST="BAK name or IP", .....
mysql> reset slave;
mysql> start slave
其中‘...’照常是选项:http://dev.mysql.com/doc/refman/5.0/en/change-master-to.html
理论上,这应该可以为您完成此操作,而无需进行新的转储并导入它 - 如果您愿意,我会确保在主服务器上运行刷新日志并备份 BAK,以防万一出现日志位置错误或类似问题...
答案2
正如你所说,转储和导入可能需要很长时间。更好的选择是使用备份,其恢复速度与将文件复制到位的速度一样快。我在博客上提到了这一点不久前。我发现这是设置从属服务器的完美方式,非常快速和简单。备份需要很长时间,但恢复速度非常快。我还强烈建议您使用猪如果您要压缩备份,请使用 gzip 而不是 gzip - 这很容易使我的备份时间相差 4 倍。
如果您可以安排同时停止两个从属服务器(这样它们都指向 db1 上的相同日志和位置),例如通过暂时停止 DB1,那么您可以使用其主服务器信息安全地将 BAK 重新指向 DB2,而无需进行长时间的恢复。正如 troyengel 所说,最重要的是您需要 log-slave-updates on 来进行中继,否则只有源自 DB2 的语句才会发送到 BAK。
我还建议您将 DB2 设置为只读。这不会影响复制,但更安全,因为您不会在 DB2 上得到 DB1 上没有的数据和 BAK。