添加 MariaDB GTID 复制策略

在 Kilo 版本中,为 MySQL 5.6 及更高版本添加了全局事务 ID (GTID) 复制支持。MySQL 5.6 的等效版本 MariaDB 10 具有 GTID 的不同实现。通过创建类似的策略实现,我们可以为 MariaDB 10 数据存储获得 GTID 复制支持。

Launchpad 蓝图:https://blueprints.launchpad.net/trove/+spec/mariadb-gtid-replication

问题描述

为了创建 MariaDB 实例的副本,只能使用基于二进制日志的复制。GTID 复制作为 MySQL 5.6 的复制替代方案添加,但对于其等效版本 MariaDB 10 而言,它不可用。

提议的变更

我们需要创建 trove/trove/guestagent/strategies/replication/experimental/mariadb_gtid.py 以支持 MariaDB 的复制。

用于设置新的空从服务器并复制主服务器所有 binlog 从起始位置的 SQL 如下2

CHANGE MASTER TO master_host="%(host)s", master_port=%(port)s, \
master_user="%(user)s", master_password="%(password)s", \
master_use_gtid=current_pos;
START SLAVE;

默认情况下,新安装服务器的 GTID 位置为空,这使得从服务器从主服务器的 binlog 开始复制。3 SQL 查询中的 current_pos 携带该位置。

这与 MySQL 的操作1 差别不大,但现在进行重构可能不是最好的选择,因为它会给现有策略增加不必要的复杂性。

配置

数据库

公共 API

公共 API 安全

Python API

CLI (python-troveclient)

内部 API

Guest Agent

备选方案

不支持基于 GTID 的 MariaDB 复制。

Dashboard 影响 (UX)

实现

负责人

主要负责人

vkmc vgnbkr

里程碑

完成目标里程碑

Mitaka-2

工作项

  • 创建 MariaDB GTID 复制策略

  • 为 MariaDB 10 中的复制创建集成测试

升级影响

依赖项

测试

将添加集成测试以涵盖此功能。

文档影响

将添加解释此新添加功能的文档。

附录