首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改MySQL复制设置的现有拓扑

问更改MySQL复制设置的现有拓扑
EN

Database Administration用户
提问于 2013-01-21 10:09:47
回答 2查看 188关注 0票数 1

我希望能够编辑现有复制的拓扑,这可能吗?

例如,如果我有一个星型拓扑,我想编辑它,使它成为一个环。我怎么能这么做?

我在想,也许首先我需要重置所有的主程序和服务器。如果我有以下拓扑:

代码语言:javascript
复制
    a -> b
    b -> c
    c -> a

我想把它转换成:

代码语言:javascript
复制
    a -> c
    b -> c

我尝试了change master,但是它没有很好地工作,因为旧的拓扑仍然存在。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2013-01-21 23:08:10

严格根据您的问题,您想要的拓扑是不可能的。为什么?

以下是您介绍的内容(称为Topology#1)

代码语言:javascript
复制
    a -> b
    b -> c
    c -> a

你希望它成为(叫它Topology#2)

代码语言:javascript
复制
    a -> c
    b -> c

由于ServerC不能使用多个主机/端口组合来执行CHANGE MASTER TO,所以Topology#2在机械上是不可能的。

我已就为何不可能提供资讯科技的问题,提出了这方面的问题:

现在,您想要将Topology#1转换成这样(称为Topology#3)

代码语言:javascript
复制
    a -> b
    a -> c

这是很有可能的。以下是几个步骤:

( STEP01)在ServerB上运行STOP SLAVE;

( STEP02)在ServerC上,运行SHOW SLAVE STATUS\G并检查以确保Exec_Master_Log_Pos不再更新。

( STEP03)在ServerB上运行SHOW SLAVE STATUS\G。

STEP04)从STEP03记录Relay_Master_Log_File (称为RMLF)和Exec_Master_Log_Pos (称为EMLP) (例如,让RLMF='mysql-bin.000345‘和EMLP=98765)。

STEP05)在ServerC上运行以下命令(使用来自STEP04的RMLF和EMLP ):

代码语言:javascript
复制
STOP SLAVE;
CHANGE MASTER TO
master_log_file='mysql-bin.000345',
master_log_pos=98765;`
START SLAVE;

( STEP07)在ServerB上运行START SLAVE;

( STEP08)在ServerA上运行STOP SLAVE;

接下来,让所有的插入、更新和删除只发生在ServerA上。

票数 1
EN

Database Administration用户

发布于 2013-01-21 18:41:56

可以使用MySQL复制设置环形拓扑,但通常不是一个好主意。环形拓扑表示多主复制,但异步复制不能很好地工作(事务是在主服务器上提交的,然后才提供给从服务器)。如果同时对两个主服务器上的相同记录进行更新,则会丢失数据完整性。当您有多个主模块时,该问题的典型解决方案是分割数据,以便每个主程序只写入特定的数据区域。

处理此问题的另一种方法是查看Galera星系团或Percona XtraDB簇之类的解决方案。这些解决方案使用MySQL,但采用了自己的复制技术--一种是同步的,而不是异步的。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/33257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档