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,然後選擇工具欄[啓動]按鈕。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章