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

标签 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 转储完成后,我将重新启动副本以让它 catch 备份:

mysql> START SLAVE; 

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

  1. 停止复制,检查坐标,然后启动 MySQL 转储
  2. 在进行转储时在单独的 shell 中重新启动副本

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

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

最佳答案

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

关于mysql - 从现有副本创建新的 MySQL 副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30394485/

相关文章:

mysqldump 要求输入密码,即使在命令行/配置文件中给出

mysql - 导入 MySQL 转储文件不返回任何内容

mysql - 错误代码 : 1126. 无法打开共享库 'C:\Program Files\MySQL\MySQL Server 5.6\lib\plugin\semisync_master.so'

database - 两个数据中心之间的 Galera 集群复制

sql - 嵌套 SQL 查询耗时过长

mysql - group by + given AND got votes 在相同的输出

mysql - Ejabberd Disco Itteam 不会来

mysql - 如何转储没有数据的mysql数据库?

mysql - 优化只读Mysql Slave

mysql - 使用 Navicat 在 2 列上创建一个键