我们正试图在我们公司设置一些基本的MySQL主/从复制,我们对副本服务器上唯一的server_id要求感到困惑。引用mysql文档:
在源和每个副本上,必须设置server_id系统变量,以在1到2^32−1的范围内建立唯一的复制ID。“唯一”意味着每个ID必须与复制拓扑中任何其他源或副本使用的每个其他ID不同。
文档接着描述了另一个相关的MySQL变量,server_uuid,着重于我:
MySQL服务器除了在server_id系统变量中生成默认或用户提供的服务器ID之外,还生成一个真正的UUID。这可以作为全局的只读变量server_uuid使用...。在使用MySQL复制时,源和副本都知道对方的UUID。
文档明确说明server_id当然仍然是必要的:
如本节前面所述,server_uuid系统变量的存在不会改变为每个MySQL服务器设置唯一server_id值作为准备和运行MySQL复制的一部分的要求。
我的问题是,为什么这个手动设置的服务器id是一个要求,而这些或多或少保证是唯一的UUID总是可用的和存在的?
发布于 2023-03-23 03:01:06
这里引用了MySQL文档,但您会问为什么。
GTID复制的引入允许将每个binlog事件表示为UUID和事务号。
如果您不想使用GTID,但希望设置复制,怎么办?
您可以运行更改母版,以使用MASTER_AUTO_POSITION=0绕过GTID插值。这就是为什么server_id必须仍然存在并随时准备使用的原因。
您还可以在主服务器上停用GTID,并以旧的方式设置、复制。同样,server_id必须仍然存在并随时准备使用。
从较早版本的MySQL中复制如何?同样,server_id必须仍然存在并随时准备使用。
https://dba.stackexchange.com/questions/325053
复制相似问题