升级主从 MySQL

scr*_*314 5 mysql replication upgrade

我正在尝试使用 MySQL 5.5.52 进行 MySQL 复制。我的主要问题是:如何在主从设置上正确执行“apt-get upgrade”?

到目前为止,我升级了从属节点,然后进行故障转移并将另一个节点升级为从属节点。

到目前为止它没有问题,但现在我发现了以下内容:当我升级从属时,它创建了一些二进制日志:

mysql.CREATE TABLE IF NOT EXISTS db (...)
mysql.CREATE TABLE IF NOT EXISTS host (...)
mysql.CREATE TABLE IF NOT EXISTS func (...)
...
Run Code Online (Sandbox Code Playgroud)

由于这是从节点,因此这些更改不会复制到主节点,因此在故障转移后会丢失。如果我在另一个节点的角色从主节点更改为从节点后重复此操作,也会发生同样的情况。

因此,升级所做的更改永远不会提交到复制数据库。

这是一个问题吗?

我怎样才能避免这种情况?

我可以在没有(显着)停机的情况下升级主从设置吗?

更新: 那么如果我像过去那样做会发生什么?

Node A : master
Node B : slave
Run Code Online (Sandbox Code Playgroud)

在节点 B(从节点)上:我发出apt-get upgrade,MySQL 被修补。一些二进制日志出现在节点 B 上,包含上述语句。由于这是一个从站,因此这些更改不会复制到主站。

修补节点 B 后,我切换角色(使用 Corosync-Pacemaker)。

故障转移后:

Node A : slave
Node B : master
Run Code Online (Sandbox Code Playgroud)

现在,节点 B 上的主 MySQL 包含故障转移之前节点 A 上的数据。由于修补引起的更改发生在从属设备上,因此它们不在数据库中。

如果我现在将节点 A 修补为从节点,也会发生同样的情况。

因此,最后我将有一个修补过的 MySQL,其中包含与修补之前包含的完全相同的数据。apt-get upgrade进程所做的所有更改都将被“丢弃”。

^这是错误的^

因此它不会被丢弃,而只会在 Slave (B) 成为 master 后立即应用。

这是否意味着我不应该在修补一个节点后等待(因此在一次运行中修补它们)并始终保持 MySQL 版本相同?

dan*_*ack 1

您无法在主要版本之间的更新过程中切换角色。MySQL-5.6 将生成 MySQL-5.5 无法理解的二进制日志消息。因此,如果 5.6 是 5.5 从属设备的主设备,则复制可能会中断。

在所有阶段,从版本必须 >= 主版本。

因此,将从站更新为一个主要版本 5.5 -> 5.6。确保一切正常运行。然后将master更新一个主要版本。更新时生成的二进制日志消息不会对已更新的从站产生任何影响。

虽然创建一个新节点 C 并经历复杂的更新过程可能很诱人,但您最好使用测试环境,进行从属更新、主升级、启动从属(并重复直到达到您想要的最新主要版本)。练习几次。根据最终版本测试您的应用程序。安排一次小规模停机并完成准备和测试的步骤。

有一个后备计划,即原始保存的 package/config/datadir 并准备好投入到位)。测试你的后备计划。