问题

问题

问题

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

可能的解决方案

在从属服务器上刷新表并锁定读,使用 SHOW SLAVE STATUS,记录binlog和位置。然后用Xtrabackup备份数据库,将备份发送到C并使用它来创建从属,并设置复制以指向A与我刚刚记下的binlog位置一致。

问题

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

答案1

嘿,我知道一个疯狂的方法来创建一个从服务器,而无需增加主服务器(服务器A)或从服务器(服务器B)的任何操作

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

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

步骤 3)在 ServerC 上,service mysql stop

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

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

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

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

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

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

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

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

试一试 !!!

顺便说一句,我非常有信心这会成功,因为我在过去两天里刚刚为客户做了这件事。客户在从服务器上有 2.7TB 的数据。我在从服务器仍处于活动状态时 rsyncd 到另一台服务器。rsync 花了 11 个小时。然后我在第一个从服务器上运行 STOP SLAVE; 并再次运行 rsync。这又花了一个小时。然后我执行了上述步骤,一切都完成了。

答案2

当我们向混合中添加从属设备时,我们会执行以下操作:

  • 使一个从站脱机
  • 将数据库数据目录复制到新的从属服务器(从属服务器设置 - binlog 位置、主机等 - 因为我们是从从属服务器复制的,所以是正确的)
  • 启动原来的从站
  • 修改 my.cnf 中新从站的 server-id
  • 启动新的从站

答案3

我做了什么@RolandoMySQLDBA建议,但也添加6'8'步骤(这解决了什么@侯赛因·坦博利评论。):

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

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

步骤 3)在 ServerC 上,service mysql stop

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

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

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

步骤 6')rsync /var/日志ServerB 上的 /mysql 到 ServerC

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

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

步骤 8')rsync /var/日志ServerB 上的 /mysql 到 ServerC

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

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

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

答案4

我尝试了 Rolando 的答案并且工作正常,但它从头开始重播,我不得不添加更多错误代码来跳过(我知道不推荐这样做,但我知道自己在做什么)。

完成第 7 步后,我检查了 mysql 日志并记下了 bin 日志名称和位置,然后继续执行第 9 步。在第 10 步之前,我仅执行了change master日志文件和日志位置。然后从第 11 步继续。一切看起来都很好。

相关内容