MySQL輸入基於Binlog即時訂閱的方式,即時讀取您配置的MySQL資料庫表資料。本文為您介紹,如何配置MySQL輸入,以及配置輸入之前需要準備的網路環境及帳號許可權。
前提條件
配置MySQL輸入之前,請確保已完成以下規劃與準備工作。
已配置同步帳號許可權,詳情請參見配置帳號許可權。
即時同步通過資料來源配置帳號訪問MySQL,在即時同步情境下,您需要確保此帳號擁有資料庫的
SELECT、REPLICATION SLAVE、REPLICATION CLIENT許可權。已開啟MySQL Binlog服務,詳情請參見開啟MySQL Binlog。
Data Integration通過即時訂閱MySQL Binlog實現增量資料即時同步,您需要在DataWorks配置同步任務前,先開啟MySQL Binlog服務。
已購買合適規格的獨享Data Integration資源群組。詳情請參見新增和使用獨享Data Integration資源群組。
已配置資料同步資源群組與資料庫的網路連通,詳情請參見網路連通方案。
使用限制
Data Integration不支援同步MySQL唯讀庫執行個體的資料。
DataWorks的Data Integration即時同步MySQL資料是基於即時訂閱MySQL實現的,即時同步MySQL資料目前僅支援配置MySQL資料來源為RDS的
5.x或8.x版本的MySQL,如果需要同步DRDS的MySQL,請不要將DRDS的MySQL配置為MySQL資料來源,您可以參考配置DRDS資料來源文檔直接將其配置為DRDS資料來源。不支援Functional index。
配置MySQL輸入
進入資料開發頁面。
登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的,在下拉框中選擇對應工作空間後單擊進入資料開發。
滑鼠移至上方至
表徵圖,單擊。 您也可以展開商務程序,按右鍵目標商務程序,選擇。
在建立節點對話方塊中,選擇同步方式為單表(Topic)到單表(Topic)ETL,輸入名稱,並選擇路徑。
單擊確認。
在即時同步節點的編輯頁面,單擊並拖拽至編輯面板。
單擊MySQL節點,在節點配置對話方塊中,配置各項參數。

參數
描述
資料來源
選擇已經配置好的MySQL資料來源,此處僅支援MySQL資料來源。
如果未配置資料來源,請單擊右側的建立資料來源,進入頁面進行建立。
表
選擇當前資料來源下需要同步的表名稱。您可以單擊右側的資料預覽進行確認。
您可以實現分庫分表的情境,配置的庫和表會在該任務中同時進行即時同步。
重要分庫分表中的資料表的Schema(即表結構,包含欄位數量、欄位類型、欄位名稱、欄位順序)請保持一致,以避免執行報錯。
輸出欄位
選擇需要同步的欄位,包括管理欄位和資料欄位:
管理欄位:為方便進行資料管理、排序和去重等操作,會在同步的目標端自動添加附加欄位。
資料欄位:顯示要同步的原始表中對應的欄位。
詳情請參見即時同步欄位格式。
MySQL節點支援分庫分表,您可以單擊添加分庫分表資料來源,從下拉式清單中選擇相應的資料來源和表,添加多個資料來源,同時進行同步。
單擊工具列中的
表徵圖。
常見問題
即時同步MySQL資料來源的資料時,一開始讀到資料。一段時間後無法讀到資料,怎麼處理?
可在資料庫執行以下命令,查看當前這個資料庫執行個體正在寫入的binlog檔案。
show master status對比日誌中讀到的binlog檔案,在日誌中搜
journalName=MySQL-bin.000001,position=50,確認是否有資料寫入資料庫。如果有資料在寫入,但是binlog卻沒有往前推進,請聯絡DBA處理。
MySQL即時同步報錯
Cannot replicate because the master purged required binary logs.解答:MySQL即時同步報錯:
Cannot replicate because the master purged required binary logs. Replicate the missing transactions from elsewhere, or provision a new slave from backup.時,可能是因為在MySQL未找到消費位點的binlog記錄,請檢查您MySQL的binlog保留時間,同步任務啟動時請將該位點配置在這個時間範圍內。如果您訂閱不到binlog,可以嘗試重設位點到目前時間。
MySQL即時同步報錯
MySQLBinlogReaderException解答:MySQL即時同步報錯:
MySQLBinlogReaderException: The database you are currently syncing is the standby database, but the current value of log_slave_updates is OFF, you need to enable the binlog log update of the standby database first.時,可能是因為備庫沒有開啟binlog,如果您要同步備庫,需要做備庫級聯開啟binlog,可以找DBA尋求協助。開啟binlog的操作詳情可參見開啟MySQL的Binlog。
MySQL即時同步報錯
show master status' has an error!解答:MySQL即時同步報錯:
show master status' has an error!,報錯詳情為Caused by: java.io.IOException: message=Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation, with command: show master status時,可能是因為資料來源沒有開啟對應資料庫的許可權。資料來源配置帳號需要擁有資料庫的SELECT、REPLICATION SLAVE、REPLICATION CLIENT許可權。給資料來源添加資料庫對應許可權的操作詳情可參見步驟2:建立帳號並配置許可權。
MySQL即時同步報錯
parse.exception.PositionNotFoundException: can't find start position for xx解答:同步未找到位點,請重設位點。
MySQL即時同步報錯:
資料庫位點到期,請重新選擇位點,源庫可用最早位點xxx。重設位點:在啟動即時同步任務時,重設位點並選擇源庫可用的最早位點。
調整Binlog保留時間:如果資料庫位點到期,可以考慮在MySQL資料庫中調整Binlog的保留時間,例如設定為7天。
資料同步:如果資料已經丟失,可以考慮重新全量同步,或者配置一個離線同步任務來手動同步丟失的資料。
即時同步是否支援將單庫多表的不同欄位進行合并?比如A表為a、b欄位,B表為a、c欄位,同步之後為a、b、c欄位?
不支援。只支援Schema完全一致的多表進行即時同步。