这里是普通文章模块栏目内容页
MySQL高可用双活方案

1 需求概述
2 技术方案
    2.1 双活同步条件
        2.1.1 自增主键
        2.1.2 同步用户
        2.1.3 启用BinLog
    2.2 配置复制任务
        2.2.1 单向复制任务
        2.2.2 反向复制任务
    2.3 启动复制任务

 

1 需求概述

多地业务系统直接读写某地A的MySQL中心数据库数据,中心数据库数据实时同步到异地B的备份中心。当某地业务系统访问A地中心数据库失败时,则切换到B地备份数据库读写数据。对于B地备份中心产生的业务数据,需要实时回传至A地中心数据库库,确保A地业务中心与B地备份中心数据一致。

目前业务中心数据库采用MySQL 5.6,系统已运行多年,表主键基本采用自增列,表之间存在主外键依赖关系。


2 技术方案

在异地备份中心部署北京灵蜂Beedup数据库复制软件,软件采用日志解析方式捕获数据库变化数据,并将变化数据同步到目标库,实时保持数据库数据一致。

2.1 双活同步条件

2.1.1 自增主键

由于中心及备份数据库都会产生业务数据,导致中心或备份库产生的自增主键在跨库复制时会与目标库已有数据产生冲突,针对自增主键冲突问题有以下两种处理方式:
一、直接复制
调整数据库配置文件my.ini中的参数auto_increment_offset 和auto_increment_increment ,使得不同数据库产生的自增值不同,包含自增值的业务数据直接复制到目标库。
二、目标库计算
自增值在复制时由目标库重新计算产生,相关外键表数据在复制时自动调整外键值,以保持与主表数据的主外键依赖关系。
由于自增值在复制前后会发生变化,需要在每张包含自增列的表中额外增加列origin_id bigint null,该列由Beedup自动创建并对应用系统透明,仅在数据同步到目标端时记录原来的自增值。

2.1.2 同步用户

对于主从库双向同步,需要在主从库单独建立同步用户,该用户仅用于Beedup连接数据库,不可用于其它场景。
以同步用户sync为例,创建用户及权限分配语句如下:
CREATE USER 'sync'@'%' IDENTIFIED BY 'xxxxx';
GRANT SELECT,PROCESS,SUPER, REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'sync'@'%';

2.1.3 启用BinLog

开启主从数据库二进制日志并设置日志格式为row。
编辑my.ini文件
log-bin="xxxxxx"
binlog_format="ROW"

2.2 配置复制任务

Beedup复制任务用于将主库数据变化实时复制到从库。对于数据库双向复制,需要配置2个复制方向相反的任务,第一个任务用于复制业务中心变化到备份中心,第二个任务用于从备份中心复制变化到业务中心。

2.2.1 单向复制任务

配置业务中心到备份中心复制任务,操作如下。
选择工具栏[新建]按钮,在任务属性对话框中依次设置主库及从库连接参数。

对于业务中心到备份中心复制,勾选[全量复制]。

选择[过滤]按钮,在[过滤选项]对话框设置忽略用户sync。

如果自增值在复制时由目标库重新计算产生,则选择[集成]按钮,在[集成选项]对话框设置辅助列。

注意:如果自增值可以直接复制,则无需设置集成选项。

选择[确定]按钮关闭[任务属性]对话框,完成业务中心到备份中心的复制任务配置。

2.2.2 反向复制任务

配置备份中心到业务中心复制任务,操作如下。
选择工具栏[新建]按钮,弹出任务属性对话框,依次设置主库及从库连接参数。

对于备份中心到业务中心复制,取消 [全量复制] 勾选。

选择[过滤]按钮,在[过滤选项]对话框设置忽略用户sync。

如果自增值在复制时由目标库计算产生,则选择[集成]按钮,在[集成选项]对话框设置辅助列。

注意:如果自增值可以直接复制,则无需设置集成选项。
选择[确定]按钮关闭[任务属性]对话框,完成备份中心到业务中心的复制任务配置。

2.3 启动复制任务

依次选中任务sync和sync_inverse,然后选择工具栏[启动]按钮。