【问题标题】:Creating a new MySQL replica from an existing replica从现有副本创建新的 MySQL 副本
【发布时间】:2015-05-22 10:36:09
【问题描述】:

我正在使用标准 MySQL 副本设置,其中包含一个主副本和一个副本。现在我想创建一个新的副本,这样我就有一个主副本和两个副本。为了设置新的副本,我想对现有的副本进行 MySQL 转储,而不是从 master 中进行。

这样做时,我想我首先需要停止副本以获得一致的数据集:

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 中重新启动副本

会有什么问题吗?我会得到不一致的数据和坐标,从而阻止我在正常状态下创建新副本吗?

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

【问题讨论】:

    标签: mysql mysqldump database-replication


    【解决方案1】:

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

    【讨论】:

    • 感谢您的见解
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    相关资源
    最近更新 更多