大數據“復活”記
820
2025-03-31
目 錄
1 背景介紹
2 原理介紹
3 前提條件
3.1 源端:
3.2 目標端:
4 DRS 實時業務全量 + 增量同步
4.1 創建實時同步任務
4.2 選擇同步鏈路
4.3 配置源端和目標端數據庫 IP 、用戶密碼
4.4 選擇需要同步的表
4.5 數據加工(可選)
4.6 自動化預檢查
4.7 啟動同步任務
4.8 觀察任務狀態
4.9 全量同步后觀察數據實時同步情況
4.10 增量增刪改后觀察數據實時同步情況
1 背景介紹
我們知道傳統的數倉系統會將業務數據集中進行存儲后,以批量計算構建出各種不同的業務層報表基礎數據 , 從而供上層應用進行查詢和展示 。 這種業務典型的特點是構建T+1 或者T + N 的 數據,通過定時任務每天拉取增量數據,然后創建各個業務相關的主題維度數據,對外提供T+1 或者T+N 的數據查詢接口。新時代在移動互聯網、電商 、 IoT等場景下會產生大量實時數據,以往的離線批量計算 時效性 較差,業務人員無法根據自己的即時性需要獲取幾分鐘之前 甚至 實時數據 , 為了快速獲取實時或者準實時數據 , 數據發生后 盡快的達到用戶的手中, 釋放實時或者準實時數據價值 ,實時數倉的系統性構建需求也應運而生 , 本文 以 MYSQL庫為例實時同步GaussDB(DWS) 場景 , 分享 使用 華為云模式下 DRS (數據復制服務) 構建快速數據接入方案 , 供有需求伙伴參考 。
2 原理介紹
MYSQL使用binlog日志進行數據庫內容修改記錄 , DRS 串行 讀取MYSQL的 binlog日志進行解析 , 在處理完數據依賴后 , 并發進行數據入庫DWS , 針對MYSQL的binlog 的三種模式 日志 簡單 說明 如 下 :
日志模式
說明
優點
缺點
Row level
日志中會記錄成每一行數據被修改的形式
日志中可以不記錄執行的 sql 語句的上下文相關的信息,僅僅只需要記錄那一條記錄被修改的形式。 row level 的日志內容會非常清楚的記錄下每一行數據修改的細節,而且不會出現某些特定情況下的存儲過程或 function 及 trigger 的調用和觸發無法被正確復制的問題
會產生大量的日志內容
Statement level
每一條會修改數據的 sql 都會記錄到 master 的 bin-log 中
解決了 row level 下的缺點,不需要記錄每一行數據的變化,減少 bin-log 日志量,節約 IO ,提高性能
MySQL 數據庫新功能的加入,修改數據的時候使用了某些特定的函數功能不能正確復制
Mixed
前兩種模式的結合。會根據執行的每一條具體的sql語句來區分對待記錄的日志形式
DRS在解析binlog是要求MYSQL庫 將 binlog的日志模式設置為Row level , 由于實時同步對系統要求較高,這里list出 實時同步 場景 對MYSQL 庫 的要求表 , 這里大部分需求項已經自動化到DRS自動化檢查任務里 , 可以 大膽應用 哈。
類型名稱
使用限制(DRS自動檢查)
數據庫權限設置
? 源數據庫帳戶需要具備如下權限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。
? 目標數據庫帳號必須具有每張表的如下權限:INSERT、SELECT、UPDATE、DELETE、CONNECT、CREATE、REFERENCES。
同步對象約束
? 支持表、索引、約束(主鍵、空、非空)的同步,不支持視圖、外鍵、存儲過程、觸發器、函數、事件、虛擬列的同步。
? 不支持的數據類型有:xml、geometry、point、lineString、polygon、geometrycollection、multipoint、multilinestring、multipolygon。
? 不支持非MyISAM和非InnoDB表的同步。
源數據庫要求
? MySQL源數據庫的binlog日志必須打開,且binlog日志格式必須為Row格式。
? 在磁盤空間允許的情況下,建議源數據庫binlog保存時間越長越好,建議為3天。
? 源數據庫expire_logs_days參數值為0,可能會導致同步失敗。
? 必須設置MySQL源數據庫的server-id,server-id的取值范圍在2-4294967296之間。
? 源數據庫中的庫名不能包含:'.<>以及中文等其他非ASCII字符。
? 源數據庫中的表名、視圖名不能包含:'<>以及中文等其他非ASCII字符。
目標數據庫要求
? 目標數據庫實例的運行狀態必須正常。
? 目標數據庫實例必須有足夠的磁盤空間。
? 目標數據庫的時區設置必須與源數據庫一致。
廢話不多說,開始實操哈!
3 前提條件
3.1 源端 :
Mysql源端數據庫,提供數據庫連接IP、庫、用戶名和密碼, 需 同步的表。 示例 :
以mysql 5云上實例為例 , IP為 : 192.168.0.33 , 端口 :8 000 ,
用戶名 : root , 密碼 : xxxxxx
在源端數據庫內新建原表test_t1 , 插入 3條記錄。
3.2 目標端 :
DWS服務集群,提供數據庫連接IP、庫、用戶名和密碼, 需同步的表 。 示例 :
這里已DWS 8.1.0云上實例為例 , IP為 :192.168.0.225, 端口 :8000 ,
用戶名 :dbadmin, 密碼 : xxxxxx
4 DRS 實時業務全量 + 增量 同步
4.1 創建實時同步任務
我們通過DRS實時同步任務來進行MYSQL到DWS的實時同步功能實現 , 如下在實時同步管理 中創建同步任務 。
4.2 選擇同步鏈路
建立 DRS 同步實例 , 選擇region,給實時同步實例起名, 選擇好源 MYSQL 和目標庫 GaussDB( DWS) 鏈路類型。
4.3 配置源端和目標端數據庫 IP 、 用戶密碼
配置 源庫 和目標庫的實例信息 (用戶名、密碼) ,并測試連通性 ,由于鏈路內部會記錄用戶名和密碼信息,點擊同意后繼續下一步。
4.4 選擇需要同步的表
同步 對象的 設置 , 表級別同步 , 增量階段沖突時覆蓋 ,同步表結構和索引, 限速和 不限速等信息 ,針對我們新建的表test_t1需要選中,并同步到右邊目標庫中,這里DWS選中庫realdb,同時制定schema名字為ry,用源表名 ,不做限速 。
4.5 數據加工 (可選)
數據表列的加工配置 (可選 ,這里不做要求,直接下一步 )
4.6 自動化預檢查
預檢查 , 進行同步任務預校驗,校驗是否可進行實時同步 , 如果有檢查項不通過 , 需要根據檢查結果提示信息 , 消除后重新校驗 , 預檢查必須通過才能滿足 進行下一步 。
4.7 啟動同步任務
DRS任務確認和啟動 ,確認信息無誤后可以 稍后 定時啟動,也可以立即啟動 ,我們選擇立即啟動 ,在彈出確認框勾選確認,立即啟動 。
4.8 觀察任務狀態
任務提交后,可以在實時同步管理頁面,查看和管理剛才新建的同步任務 ,狀態為 “ 啟動中 ” 。
全量數據同步后 , 顯示為 “增量同步”,實時同步任務后續一直保持增量同步狀態。
4.9 全量同步后觀察數據 實時 同步情況
鏈接DWS目標庫realdb,查看全量同步情況,schema、表結果和全量數據均以同步過來。
4.10 增量增刪改后觀察數據 實時 同步情況
在源數據庫進行 增刪改 ,目標庫實時同步到位。
源庫:
目標庫 :
完 !
EI企業智能 Gauss AP 數據倉庫服務 GaussDB(DWS) 數據復制服務 DRS 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。