在MySQL主/从复制中,如果我写入从属会发生什么?


17

几个问题

  • 从属条目是否会保留,直到对主服务器上的表进行插入/更新/删除操作可能会影响从属?

  • 如果不是,如何确保从站与主站同步(通过删除从站条目或手动将该条目复制到主站)?

  • 最重要的是,我如何检测到表不同步?


请正确解释您的问题...
阿卜杜勒·马纳夫

1
主/从关系不是从主到从的单向同步,反之亦然吗?我想问的是,如果您以这种设置写入从站,将会发生什么。
kfmfe04 2011年

Answers:


14

只要您不直接在从站上执行任何INSERT / UPDATE / DELETE语句,您的从站就可以了。否则,如果在从属服务器上的mydb.mytable中插入新行,则MySQL复制可能会中断,并且通过复制,从属服务器随后会使用相同的PRIMARY KEY在mydb.mytable中检测到对INSERT的行。这将产生错误1062(重复密钥)。

您可以在不破坏MySQL复制的情况下写入Slave的唯一方法是:

  • 主数据库具有数据库db1,db2,db3
  • 从站正在从主服务器复制数据库db1,db2,db3
  • CREATE DATABASE db4;在奴隶上奔跑
  • 您只能对从站上的db4进行INSERT / UPDATE / DELETE。
  • 您不只对从站上的db1,db2,db3进行INSERT / UPDATE / DELETE

要在不下载任何工具的情况下检测到Master和Slave不同步,请选择任何表,并对Master和Slave的同一表的副本上的表运行CHECKSUM TABLE

如果有表mydb.mytable,请对它运行命令:

mysql> CHECKSUM TABLE mydb.mytable;

如果值不相同,则说明某些内容不同步。

如果要批量检查一堆桌子,可以降低Percona的MAATKIT。您将需要两个特定的工具(Percona也有Percona工具包,它们本身是从MAATKIT派生的,现在正在进一步推广)

要么

pt-table-checksum将对主服务器和从属服务器上的所有表执行一个CHECKSUM TABLE。您可以将其配置为仅在特定数据库上处理所有数据库。

pt-table-sync可以在任何表的从站上运行。使用--print和--sync-to-master选项,您可以看到需要在Slave上执行哪些SQL语句以使其与Master完全匹配。该工具不适用于缺少PRIMARY KEY或UNIQUE KEY的表。

我已经使用MAATKIT多年了。我仍然。我还没有尝试过Percona工具包,但是我敢肯定它应该和MAATKIT具有相同的质量。


请提供详细答案。我以为我还有其他问题,但是我想您的答案已经涵盖了所有情况(pt-table-sync似乎非常有用)。
kfmfe04 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.