我正在使用标准的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 ,我可以将这些任务并行化:
会出问题吗?我是否会得到不一致的数据和坐标,这会阻止我在一个理智的状态下创建新的副本?
我希望避免在重新启动备份副本之前等待转储完成大型数据库。由于转储发生在单个事务中,因此来自主服务器的任何更新都不会包含在转储中,因此转储将与副本停止时检查的坐标一致。我错过了什么吗?
答案 0 :(得分:0)
mysqldump是一个只读操作,而不是一个事务。因此,如果mysqldump仅转储未提交的数据,并且您的事务在转储期间保持打开状态,导入新的从属服务器并激活新的从服务器,那么理论上您可以执行此操作。但在实践中,我认为这种情况不太可行。