我在生产中设置了MySQL复制,如下所示:
DB1 - > DB2 DB1 - > BAK
DB2和BAK是DB1从站。 所有3台服务器都是同步的(主站之后0秒),并有30+ GB的数据。
我想把服务器放在一个新的主从configuration中,如下所示:
DB1 - > DB2 - > BAK
在BAK上更改主控主机的最佳方法是什么?
有没有一种方法可以避免停止DB2上的slave线程并获取BAK的mysqldump(5-6小时的进程)?
他们称之为主 – 从 – 从级联复制。 您需要在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备份,如果你想如果出现问题得到你的日志位置错误或某些…
正如你所说,转储和import可以永远。 更好的select是使用xtrabackup ,它将尽可能快地复制文件到位。 我前段时间在博客上写了一些内容。 我觉得这是build立奴隶的完美方式,非常快捷。 备份需要很长时间,但恢复速度非常快。 我也强烈build议你使用pigz而不是gzip,如果你正在压缩你的备份 – 这很容易使我的备份时间的差异达到4倍。
如果您可以同时停止两个从站(因此它们都指向db1上的相同日志和位置),例如通过暂时停止DB1,则可以使用其主站信息安全地重新命名DB2中的BAK,而无需做一个冗长的恢复。 正如troyengel所说,最重要的是你需要log-slave-updates来进行中继,否则只有源于DB2的语句才会被发送到BAK。
我也build议你将DB2设置为只读。 这不会影响复制,但更安全,因为您不会在DB2和BAK上的数据不在DB1上。