如何在故障转移期间将 MySQL 副本提升为主副本

如何在故障转移期间将 MySQL 副本提升为主副本

在测试环境中,我停止了健康的 MySQL 主服务器来模拟故障,并尝试将副本服务器提升为主服务器。

两台服务器:

  • 在 Ubuntu kinetic 上安装 mysql-server 8.0.32-0ubuntu0.22.10.2 运行。
  • 配置了 GTID
  • 除 server-id 外,具有完全相同的 MySQL 配置

官方文档, 我已经:

  1. 禁用所有负载均衡器上发生故障的主服务器

  2. 等待主服务器完成所有事务:

    源已将所有 binlog 发送到副本;正在等待更多更新

  3. 将主服务器设置为超级 R/O

  4. 作为预防措施,从发生故障的主服务器转储所有 InnoDB 数据库

  5. 停止副本的 IO_THREAD

  6. 等待副本完成所有事务:

    Replica_SQL_Running_State:副本已读取所有中继日志;正在等待更多更新

  7. 停止了副本的 SQL_THREAD

  8. 重置副本的 GTID 执行历史记录和二进制日志

但是,现在出现故障的主服务器和新的主服务器之间存在差异:

  • 主服务器状态失败
+---------------+----------+--------------+------------------+---------------------------------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                           |
+---------------+----------+--------------+------------------+---------------------------------------------+
| binlog.000073 |      197 |              |                  | c219365c-bd04-11ed-b1e2-525400003001:1-4620 |
+---------------+----------+--------------+------------------+---------------------------------------------+
  • 新的主要服务器状态
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 |      157 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+

我们可以看到位置不同,并且新的主节点没有“Executed_Gtid_Set”。要么是我漏掉了什么,要么是文档不完整。

有什么建议吗?

答案1

事实证明,问题在于官方文档

On the replica Replica 1 being promoted to become the source, issue STOP REPLICA and RESET MASTER.

应改为:

On the replica Replica 1 being promoted to become the source, issue STOP REPLICA and RESET REPLICA ALL.

我从头重新创建了两个 MySQL 服务器,并应用了第一篇文章中的 7 个步骤,并将第 8 个步骤替换为:

  1. 使用“RESET REPLICA ALL”重置副本;

在切换之前的主服务器上

+---------------+----------+--------------+------------------+---------------------------------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                           |
+---------------+----------+--------------+------------------+---------------------------------------------+
| binlog.000010 |  1380513 |              |                  | a4228b68-e5b8-11ed-ac40-525400003001:1-1615 |
+---------------+----------+--------------+------------------+---------------------------------------------+

在切换后的新主节点(以前的副本)上

+---------------+----------+--------------+------------------+-----------------------------------------------------------------------------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                                                                       |
+---------------+----------+--------------+------------------+-----------------------------------------------------------------------------------------+
| binlog.000010 |     6841 |              |                  | 61ab9e32-e5b9-11ed-b4aa-525400003002:1-511,
a4228b68-e5b8-11ed-ac40-525400003001:1-1615 |
+---------------+----------+--------------+------------------+-----------------------------------------------------------------------------------------+

看上去不错,除了位置可能有问题也可能没有问题。

相关内容