从另一个从站创建一个MySQL从站,但将其指向主站


8

问题

我在两台服务器(主服务器(A)和从服务器(B))之间进行了MySQL复制设置。我需要向混合(C)添加一个新的从属。我希望该从属服务器直接从主服务器获取更新,而不希望从从属服务器进行链复制。但是,主服务器“很热”,我通常使用Xtrabackup创建主服务器的完整备份,但这会锁定它10分钟,因为数据库的大小约为20GB。

可能的解决方案

WITH READ LOCK FLUSH TABLES上从上使用SHOW SLAVE STATUS ,写下二进制日志和位置。然后使用Xtrabackup备份数据库,将备份发送到C并使用它创建从属,然后将复制设置为指向A,并使用我刚刚写下的binlog位置。

有没有更好的方法不需要我这么长时间锁定B?还是更容易实现自动化的东西?

Answers:


20

嘿,我知道一种疯狂的方法来创建从属服务器而不增加主服务器(ServerA)或从属服务器(ServerB)的任何操作

步骤1)设置新服务器(ServerC)

步骤2)在ServerC上,安装MySQL(与ServerB相同的版本)

步骤3)在ServerC上,服务mysql停止

步骤4)将/etc/my.cnf从ServerB复制到ServerC

步骤5)在ServerC上,将server_id更改为不同于ServerA和ServerB的值

步骤6)在ServerB上将rsync / var / lib / mysql同步到ServerC

步骤7)rsync完成后,运行“ STOP SLAVE;”。在ServerB上

步骤8)在ServerB上将rsync / var / lib / mysql同步到ServerC

步骤9)在ServerB上,运行“ START SLAVE;”。

步骤10)在ServerC上,服务mysql启动

步骤11)在ServerC上,运行“ START SLAVE;”。(如果skip-slave-start在/etc/my.cnf中,请执行此操作)

试试看 !!!

顺便说一句,我有最大的信心,这将是可行的,因为我只是在过去的两天里为客户做的。客户端在从属服务器上具有2.7TB的数据。当从属服务器仍处于活动状态时,我已同步到另一台服务器。rsync花了大约11个小时。然后我运行了STOP SLAVE;在第一个从站上并再次运行rsync。又花了一个小时。然后,我执行了上述步骤,一切都完成了。


大声笑。我打算在OP上发表评论,以使用您的建议,并低估了Rolando先生的“冰箱” DBA。Rolando敲了敲钉子,这是首选方法,无需停止任何主设备,也无需停止B从属设备太长时间。
coderwhiz 2011年

2
我知道这是一个相当老的帖子,但是有人问我这种方法。假设新的从属服务器和旧的从属服务器完全相同,这可以正常工作。如果新的从属服务器是其他拱门,则它将无法工作(iirc)。而且我几乎可以确定,如果您正在使用按文件的innodb表空间,它将无法正常工作。如有疑问,最安全的解决方案是从主服务器进行完整备份。
lusis 2011年

@lusis-您的评论非常正确。在大多数mysql客户认为他们拥有的理想环境中,由于所有硬件规格都是相同的,因此他们希望这样做。在硬件不同的设置中,mysqldumps和reload是最安全的。您应该提交评论作为答案。我会投票赞成。让我们看看其他人是否愿意!
RolandoMySQLDBA 2011年

我按照程序进行。在SlaveC上重新启动mysql之后,出现错误消息“您的数据库可能已损坏,或者您可能已复制了InnoDB表空间,但没有复制InnoDB日志文件”。并在start slave(SlaveC)上收到“无法打开中继日志'/var/log/mysql/mysql-relay-bin.001603”
侯赛因·坦博利

这样,您可以轻松地丢失ServerC上的数据。
akuzminsky

3

当我们在混音中添加一个从属时,我们将执行以下操作:

  • 使一个奴隶脱机
  • 将数据库数据目录复制到新的从属服务器(从我们的从属服务器复制后,从属设置-binlog位置,主主机等-将是正确的)
  • 启动原始奴隶
  • 修改my.cnf中的server-id作为新的slave
  • 开始新的奴隶

我今天下午只需要自己做一次
sreimer'Apr 8'11

1

我做了@RolandoMySQLDBA的建议,但还添加了6'8'的步骤(这解决了@Hussain Tamboli的评论。):

步骤1)设置新服务器(ServerC)

步骤2)在ServerC上,安装MySQL(与ServerB相同的版本)

步骤3)在ServerC上,服务mysql停止

步骤4)将/etc/my.cnf从ServerB复制到ServerC

步骤5)在ServerC上,将server_id更改为不同于ServerA和ServerB的值

步骤6)在ServerB上将rsync / var / lib / mysql同步到ServerC

步骤6') rsync / var / 在ServerB上将/ mysql 登录到ServerC

步骤7)rsync完成后,运行“ STOP SLAVE;”。在ServerB上

步骤8)在ServerB上将rsync / var / lib / mysql同步到ServerC

步骤8') rsync / var / 在ServerB上将/ mysql 登录到ServerC

步骤9)在ServerB上,运行“ START SLAVE;”。

步骤10)在ServerC上,服务mysql启动

步骤11)在ServerC上,运行“ START SLAVE;”。(如果skip-slave-start在/etc/my.cnf中,请执行此操作)


您的答案不完整,它引用了其他内容。这不是论坛,请自行完善答案。
asdmin

0

您具有“从主文件加载数据”选项,但是强烈建议不要这样做。

您是否在系统上进行每晚/每周备份?如果是这样,还请注意备份的位置,然后可以使用该备份来设置新的从站。只需保留它,并使其更新一段时间即可。


0

我尝试了Rolando的答案,但效果很好,但是从一开始就开始重播,因此我不得不添加更多错误代码来跳过(我知道不建议这样做,但是我知道自己在做什么)。

完成第7步后,我已经签入mysql日志并记下bin日志的名称和位置,并继续进行到第9步。在第10步之前,我只执行change master了日志文件和日志位置。并从步骤11继续。


-2

您需要在auto.cnf中更改从属uuid,以便主机可以区分两个从属。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.