从现有副本创建新的MySQL副本

时间:2015-05-22 10:36:09

标签: mysql mysqldump database-replication

我正在使用标准的MySQL副本设置,只有一个主副本和一个副本。现在我想创建一个新的副本,以便我有一个主副本和两个副本。要设置新副本,我想要对现有副本执行MySQL转储,而不是从主服务器执行此操作。

执行此操作时,我认为我首先需要停止副本以获取一致的数据集:

mysql> STOP SLAVE;

然后我会找到复制坐标,这样我就可以在正确的复制点启动我的新副本了:

mysql> SHOW SLAVE STATUS\G

然后我将通过在副本上运行此命令来获取转储:

bash> mysqldump --single-transaction --quick --lock-tables=false --insert-ignore --all-databases --master-data=2 | gzip > data-for-replica.sql.gz

并且在MySQL转储完成之后,我将重新启动副本以让它重新启动:

mysql> START SLAVE; 

我的问题是:因为我在进行转储时使用 - single-transaction ,我可以将这些任务并行化:

  1. 停止复制,检查坐标,然后启动MySQL转储
  2. 在转储发生时,在单独的shell中重新启动副本
  3. 会出问题吗?我是否会得到不一致的数据和坐标,这会阻止我在一个理智的状态下创建新的副本?

    我希望避免在重新启动备份副本之前等待转储完成大型数据库。由于转储发生在单个事务中,因此来自主服务器的任何更新都不会包含在转储中,因此转储将与副本停止时检查的坐标一致。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

mysqldump是一个只读操作,而不是一个事务。因此,如果mysqldump仅转储未提交的数据,并且您的事务在转储期间保持打开状态,导入新的从属服务器并激活新的从服务器,那么理论上您可以执行此操作。但在实践中,我认为这种情况不太可行。