有没有办法在不使用转储的情况下创建 MySQL/Percona Slave?

ouc*_*cil 5 mysql replication mysqldump backup percona xtrabackup

我找不到任何东西,所以我确定答案是否定的,你是什么,菜鸟?但我觉得无论如何都有必要问:)

是否有一个简单的实用程序可以允许在现有主服务器上启动新的从服务器,而无需在主服务器上执行转储?

我已经多次以传统方式设置奴隶,所以我并非不了解这个过程,但我很好奇是否有人和我同样的感觉,一定有更简单的方法

我希望这样的实用程序会使用类似于 Percona 的 Xtrabackup 的东西,但它不会输出到转储文件,而是将输出直接流式传输到从属,然后在提要结束后自动启用从属关系。

这是现实的吗?

我注意到 Xtrabackup 中的流选项,但在其仅将 tar 保存在另一台服务器上的能力之外找不到示例,这不是我想要的。我想要一个可以直接流入目标数据库的解决方案,而根本不需要使用转储文件。这在处理大型数据集时特别方便。

aku*_*sky 5

可以使用mysqldump. 您可以将其输出直接流式传输到从站。

# mysqldump -h master -A --master-data --single-transaction --quick | mysql -h slave
Run Code Online (Sandbox Code Playgroud)

mysqldump将添加CHANGE MASTER TO到输出中。但是,它不包括MASTER_HOST,MASTER_USERMASTER_PASSWORD。它必须单独配置。

# mysql -h slave -e "CHANGE MASTER TO MASTER_HOST='master',
  MASTER_USER='repl', MASTER_PASSWORD='replpass'; START SLAVE;"
Run Code Online (Sandbox Code Playgroud)

补充说明:

  1. 您可以在主、从或任何其他主机上运行上述命令。请注意,-h在选择mysqldumpmysql。请参阅mysql 选项
  2. 当你进行转储时,主人并没有倒下。
  3. 不会有任何 binlog ID 问题,因为无论您在哪里运行mysqldump -h master,转储都将来自 master。binlog坐标分别指向master上的binlog。
  4. 默认值将导致 InnoDB 表被表锁定,也就是说,除非--single-transaction指定这否定了一致转储对表锁定的要求。
  5. 使用--quick将确保一次读取大表一行,而不是在内存中缓冲整个行集,这更有利于这种类型的流式转储。