首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL复制-从更新

MySQL复制-从更新
EN

Database Administration用户
提问于 2013-06-12 01:37:19
回答 4查看 7.8K关注 0票数 5

我有一个MySQL的主从设置.如果我对从数据库做任何更改..。

  1. 它会以任何方式破坏同步吗?
  2. 在下一个复制事件期间,是否会从主服务器覆盖更改?
  3. 我能让上面的(2)选项发生吗?
EN

回答 4

Database Administration用户

发布于 2013-06-13 08:29:38

请在下面找到答案。

1.它会以任何方式破坏同步吗-

在高可用性的体系结构视图上“是”。只要你有大师和稳重,你就不会有问题。

2.在下一个复制事件

期间,是否会从主服务器覆盖这些更改?

代码语言:javascript
复制
Depends upon your changes. 

On Master

代码语言:javascript
复制
create table test (id int, name varchar(20));
insert into test values (12,'Mannoj');

-------------------------
|id  | name             |
-------------------------
|12  | Mannoj           |
-------------------------

在从中也可以看到相同的数据和结构。

现在在奴隶上做一个更新,如

代码语言:javascript
复制
update table test set name='Villain' where id=12;

此时,大师正试图像这样更新。

代码语言:javascript
复制
update table test set id=14 where  name='Mannoj';

现在奴隶的同步中断了。你的SQL_SLAVE_THREAD停了。

或者任何其他冲突的语句试图附加它将被打破,上面是一个更好的例子。

但是,如果您得到的更新,如下面的主人,您的奴隶数据是一致的主人。

代码语言:javascript
复制
update table test set name='Hero' where id=12;

为此,您需要非常肯定您的应用程序体系结构,最好与应用程序团队进行双重检查。也许你也可以检查他们的代码。

3.我能让上面的(2)选项发生吗?

是的,你可以克服这一点,前提是你应该达到以下几点。

  • 在HA 上没有停机时间
    • 从当前从服务器(S2)备份中获得另一个新的从服务器(S1)。将两个奴隶指向一个主(M)。在S2上做你的事情,即使它崩溃了,你也不会被打扰。(或)

  • 有了HA的停机时间,您应该知道您的应用程序是进出的。假设您的应用程序只对最新的数据执行DMLs,比如仅针对最新的几个秒,而不对旧的数据执行DMLs,那么下面的一个可以帮助您。
    • 在从服务器上保持启用从log_slave_updates。
    • 现在发布STOP SLAVE SQL_THREAD; Insight ->,但是IO_SLAVE_THREAD不断将其空间添加到RELAY_LOG上,而不是需要应用的空间。只有当SQL线程执行中继日志时,才会清除此中继日志,直到在中继日志和Master的二进制日志上启用自动清除为止。这样,您就可以从主站点到从站点获得所发生的事务的信息。
    • 在此之后,您可以对奴隶进行更改。
    • 一旦完成了对从服务器的更改,您就可以跟踪从服务器的二进制日志,并使用当前的活动数据在Master中检查每个dml的对应值,并更改从服务器中的值。
    • 现在您可以发出START SLAVE SQL_THREAD;,当然,它会在Last_Error: and Seconds_Behind_Master: NULL下抛出错误
    • 现在做SET GLOBAL sql_slave_skip_counter = 1START SLAVE SQL_THREAD; ->,直到得到Seconds_Behind_Master: 0为止。
票数 2
EN

Database Administration用户

发布于 2013-06-13 08:12:40

对您的问题的回答如下:

( 1)它会以任何方式破坏同步吗?

答:是的,当从中继日志和服务器上的更新读取从服务器的数据时,它会破坏您的复制过程。例如:如果已将一行添加到从属程序中,并且母版中没有该行,则“插入.”查询将失败,这可能导致复制进程停止。

(2)在下一个复制事件期间,是否会从主服务器覆盖更改,我是否可以使上述( 2)选项发生?

答:没有。但是有一种选择可以使用pt表同步工具

此工具更改数据,因此为了最大程度的安全起见,您应该在使用数据之前备份数据。当将作为复制从服务器的服务器与-复制或同步到主方法同步时,它总是对复制主服务器进行更改,而不是直接对复制从服务器进行更改。一般来说,这是唯一安全的方法,使副本与它的主人同步;

注意:设置奴隶是个好主意,因为朗读_仅限这个变量可能有助于防止在奴隶上发生一些不安全的写入,但前提是用户没有被不必要地授予超级特权。

票数 1
EN

Database Administration用户

发布于 2013-06-12 01:55:31

除非您使用的是MySQL集群,否则复制完全是单向操作。您不应该对从副本进行更改。

至于如果你这样做会发生什么,很难说,我从来没有愚蠢到尝试:-)

我怀疑当你违反合同时,它会做任何软件做的事情--不管它喜欢什么。

我的建议是,甚至不要去想这种行动在你脑海中的最微小的可能性(从道格拉斯亚当斯HHGTTG中得到的解释)。

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

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

复制
相关文章

相似问题

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