我目前有一个主数据库服务器(让我们称之为db1)和6奴隶(奴隶1-6)。 我已经build立一个新的服务器(db2)作为db1的奴隶,它是同步的。 我想改变所有的奴隶使用db2,而不是db1,但最小的停机时间/数据丢失。
目前唯一可以考虑的方法是closures我们的网站(因此数据停止写入到db1),等到所有的从服务器都保持最新状态,刷新db1上的日志,closures它。 重置db2上的主机,将所有从机更改为指向db2,日志位置= 0。
这是正确的方式来做到这一点,或者有没有办法做到这一点,而不离线网站?
这是不清楚,如果你正在移动的应用程序写入到db2或不,但您可以重新掌握从db2复制的奴隶,而系统是活着的。
我过去的做法是:
1)停止从站上的从站[1-6]
2)在db2上停止从站。 注意它是作为db1(Master_Log_File和Exec_Master_Log_Pos)的从属的文件/位置信息,它是主日志位置(显示主状态)。
3)在奴隶[1-6],“开始奴隶,直到master_log_file = $文件,master_log_pos = $ pos”。 这些是来自上面的从属信息((Master_Log_File和Exec_Master_Log_Pos))的位置。
4)在这一点上确认slave [1-6]和db2在“show slave status”相对于主db1有相同的复制位置。
5)停止奴隶[1-6]
6)改变主从机[1-6]。 新的master_log_file和master_log_pos值是您在步骤2中从db2上的“show master status”获得的信息。
7)在从站上启动从站[1-6]。
请注意,此方法需要一段时间,在所有从属数据块上复制失效。 这应该是几分钟,如果手动完成,或者你可以编写脚本,并把它推到几秒钟。 如果您的网站由于复制延迟而无法容忍任何数据过时,那么您将不得不以不同的方式来执行此操作。
您还应该确保db2启用了日志 – 从属更新,否则将无法正确地将其主服务器的语句复制到其从服务器。
祝你好运!