MySQL資料來源為您提供讀取和寫入MySQL的雙向通道,本文為您介紹DataWorks的MySQL資料同步的能力支援情況。
支援的MySQL版本
離線讀寫:
支援MySQL 5.5.x、MySQL 5.6.x、MySQL 5.7.x、MySQL 8.0.x,相容Amazon RDS for MySQL、Azure MySQL、Amazon Aurora MySQL。
離線同步支援閱讀檢視表。
即時讀取:
Data Integration即時讀取MySQL資料是基於即時訂閱MySQL實現的,當前僅支援即時同步MySQL 5.5.x、MySQL 5.6.x、MySQL 5.7.x、MySQL 8.0.x(非8.0新特性,比如functional index,僅相容原有功能)版本的MySQL資料,相容Amazon RDS for MySQL、Azure MySQL、Amazon Aurora MySQL。
重要如果需要同步DRDS的MySQL,請不要將DRDS的MySQL配置為MySQL資料來源,您可以參考配置DRDS資料來源文檔直接將其配置為DRDS資料來源。
使用限制
即時讀
不支援同步MySQL唯讀庫執行個體的資料。
不支援同步含有Functional index的表。
不支援XA ROLLBACK。
針對已經XA PREPARE的交易資料,即時同步會將其同步到目標端,如果XA ROLLBACK,即時同步不會針對XA PREPARE的資料做復原寫入的操作。若要處理XA ROLLBACK情境,需要手動將XA ROLLBACK的表從即時同步任務中移除,再添加表後重新進行同步。
僅支援同步MySQL伺服器Binlog配置格式為ROW。
即時同步不會同步被串聯刪除的關聯表記錄。
對於Amazon Aurora MySQL資料庫,需要串連到您的主/寫資料庫,因為AWS不允許在Aurora MySQL的唯讀副本上啟用binlog功能。即時同步任務需要binlog來執行累加式更新。
即時同步線上DDL變更僅支援通過Data Management對MySQL表進行加列(Add Column)線上DDL變更。
離線讀
MySQL Reader外掛程式在進行分庫分表等多表同步時,若要對單表進行切分,則需要滿足任務並發數大於表個數這一條件,否則切分的Task數目等於表的個數。
支援的欄位類型
各版本MySQL的全量欄位類型請參見MySQL官方文檔。以下以MySQL 8.0.x為例,為您羅列當前主要欄位的支援情況。
欄位類型 | 離線讀(MySQL Reader) | 離線寫(MySQL Writer) | 即時讀 | 即時寫 |
TINYINT | 支援 | 支援 | 支援 | 支援 |
SMALLINT | 支援 | 支援 | 支援 | 支援 |
INTEGER | 支援 | 支援 | 支援 | 支援 |
BIGINT | 支援 | 支援 | 支援 | 支援 |
FLOAT | 支援 | 支援 | 支援 | 支援 |
DOUBLE | 支援 | 支援 | 支援 | 支援 |
DECIMAL/NUMBERIC | 支援 | 支援 | 支援 | 支援 |
REAL | 不支援 | 不支援 | 不支援 | 不支援 |
VARCHAR | 支援 | 支援 | 支援 | 支援 |
JSON | 支援 | 支援 | 支援 | 支援 |
TEXT | 支援 | 支援 | 支援 | 支援 |
MEDIUMTEXT | 支援 | 支援 | 支援 | 支援 |
LONGTEXT | 支援 | 支援 | 支援 | 支援 |
VARBINARY | 支援 | 支援 | 支援 | 支援 |
BINARY | 支援 | 支援 | 支援 | 支援 |
TINYBLOB | 支援 | 支援 | 支援 | 支援 |
MEDIUMBLOB | 支援 | 支援 | 支援 | 支援 |
LONGBLOB | 支援 | 支援 | 支援 | 支援 |
ENUM | 支援 | 支援 | 支援 | 支援 |
SET | 支援 | 支援 | 支援 | 支援 |
BOOLEAN | 支援 | 支援 | 支援 | 支援 |
BIT | 支援 | 支援 | 支援 | 支援 |
DATE | 支援 | 支援 | 支援 | 支援 |
DATETIME | 支援 | 支援 | 支援 | 支援 |
TIMESTAMP | 支援 | 支援 | 支援 | 支援 |
TIME | 支援 | 支援 | 支援 | 支援 |
YEAR | 支援 | 支援 | 支援 | 支援 |
LINESTRING | 不支援 | 不支援 | 不支援 | 不支援 |
POLYGON | 不支援 | 不支援 | 不支援 | 不支援 |
MULTIPOINT | 不支援 | 不支援 | 不支援 | 不支援 |
MULTILINESTRING | 不支援 | 不支援 | 不支援 | 不支援 |
MULTIPOLYGON | 不支援 | 不支援 | 不支援 | 不支援 |
GEOMETRYCOLLECTION | 不支援 | 不支援 | 不支援 | 不支援 |
資料同步前準備:MySQL環境準備
在DataWorks上進行資料同步前,您需要參考本文提前在MySQL側進行資料同步環境準備,以便在DataWorks上進行MySQL資料同步任務配置與執行時服務正常。以下為您介紹MySQL同步前的相關環境準備。
準備工作1:確認MySQL版本
Data Integration對MySQL版本有要求,您可參考上文支援的MySQL版本章節,查看當前待同步的MySQL是否符合版本要求。您可以在MySQL資料庫通過如下語句查看當前MySQL資料庫版本。
SELECT version();
準備工作2:配置帳號許可權
建議您提前規劃並建立一個專用於DataWorks訪問資料來源的MySQL帳號,操作如下。
可選:建立帳號。
操作詳情請參見建立MySQL帳號。
配置許可權。
離線
在離線同步情境下:
在離線讀MySQL資料時,此帳號需擁有同步表的讀(
SELECT
)許可權。在離線寫MySQL資料時,此帳號需擁有同步表的寫(
INSERT
、DELETE
、UPDATE
)許可權。
即時
在即時同步情境下,此帳號需要擁有資料庫的
SELECT
、REPLICATION SLAVE
、REPLICATION CLIENT
許可權。
您可以參考以下命令為帳號添加許可權,或直接給帳號賦予
SUPER
許可權。如下執行語句在實際使用時,請替換'同步帳號'
為上述建立的帳號。-- CREATE USER '同步帳號'@'%' IDENTIFIED BY '密碼'; //建立同步帳號並設定密碼,使其可以通過任意主機登入資料庫。%表示任意主機。 GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '同步帳號'@'%'; //授權同步帳號資料庫的 SELECT, REPLICATION SLAVE, REPLICATION CLIENT許可權。
*.*
表示授權同步帳號對所有資料庫的所有表擁有上述許可權。您也可以指定授權同步帳號對目標資料庫的指定表擁有上述許可權。例如,授權同步帳號對test資料庫的user表擁有上述許可權,則可以使用GRANT SELECT, REPLICATION CLIENT ON test.user TO '同步帳號'@'%';
語句。說明REPLICATION SLAVE
語句為全域許可權,不能指定授權同步帳號對目標資料庫的指定表擁有相關許可權。
準備工作3:(僅即時同步需要)開啟MySQL Binlog
Data Integration通過即時訂閱MySQL Binlog實現增量資料即時同步,您需要在DataWorks配置同步前,先開啟MySQL Binlog服務。操作如下:
如果Binlog在消費中,則無法被資料庫刪除。如果即時同步任務運行延遲將可能導致源端Binlog長時間被消費,請合理配置任務的延遲警示,並及時關注資料庫的磁碟空間。
Binlog至少保留72小時以上,避免任務失敗後因Binlog已經消失,再啟動無法重設位點到故障發生前而導致的資料丟失(此時只能使用全量離線同步來補齊資料)。
檢查Binlog是否開啟。
使用如下語句檢查Binlog是否開啟。
SHOW variables like "log_bin";
返回結果為ON時,表明已開啟Binlog。
如果您使用備用庫同步資料,則還可以通過如下語句檢查Binlog是否開啟。
SHOW variables LIKE "log_slave_updates";
返回結果為ON時,表明備用庫已開啟Binlog。
如果返回的結果與上述結果不符:
開源MySQL請參考MySQL官方文檔開啟Binlog。
阿里雲RDS MySQL請參考RDS MySQL記錄備份開啟Binlog。
阿里雲PolarDB MySQL請參考開啟Binlog開啟Binlog。
查詢Binlog的使用格式。
使用如下語句查詢Binlog的使用格式。
SHOW variables LIKE "binlog_format";
返回結果說明:
返回ROW,表示開啟的Binlog格式為ROW。
返回STATEMENT,表示開啟的Binlog格式為STATEMENT。
返回MIXED,表示開啟的Binlog格式為MIXED。
重要DataWorks即時同步僅支援同步MySQL伺服器Binlog配置格式為ROW。如果返回非ROW請修改Binlog Format。
查詢Binlog完整日誌是否開啟。
使用如下語句查詢Binlog完整日誌是否開啟。
show variables like "binlog_row_image";
返回結果說明:
返回FULL,表示Binlog開啟了完整日誌。
返回MINIMAL,表示Binlog開啟了最小日誌,未開啟完整日誌。
重要DataWorks即時同步,僅支援同步開啟了Binlog完整日誌的MySQL伺服器資料。若查詢結果返回非FULL,請修改binlog_row_image的配置。
OSS binlog讀取授權配置
在添加MySQL資料來源時,如果配置模式為阿里雲執行個體模式,且RDS MySQL執行個體地區與DataWorks專案空間在同一地區,您可以開啟支援OSS binlog讀取,開啟後,在無法訪問RDS binlog時,將會嘗試從OSS擷取binlog,以避免即時同步任務中斷。
如果選擇的OSS binlog訪問身份為阿里雲RAM子帳號或阿里雲RAM角色,您還需參考如下方式配置帳號授權。
阿里雲RAM子帳號
登入RAM 存取控制-使用者控制台,找到需要授權的子帳號。具體操作:
單擊操作列的添加許可權。
配置如下關鍵參數後,單擊確認新增授權。
資源範圍:帳號層級。
權限原則:系統策略。
策略名稱稱:
AliyunDataWorksAccessingRdsOSSBinlogPolicy
。
阿里雲RAM角色
登入RAM 存取控制-角色控制台,建立一個RAM角色。具體操作,請參見建立可信實體為阿里雲帳號的RAM角色。
關鍵參數:
選擇可信實體類型:阿里雲帳號。
角色名稱:自訂。
選擇信任的雲帳號:其他帳號,填寫DataWorks工作空間所屬的雲帳號。
為建立好的RAM角色精確授權。具體操作,請參見為RAM角色授權。
關鍵參數:
權限原則:系統策略。
策略名稱稱:
AliyunDataWorksAccessingRdsOSSBinlogPolicy
。
為建立好的RAM角色修改信任策略。具體操作,請參見修改RAM角色的信任策略。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "<DataWorks使用者主帳號的雲帳號ID>@cdp.aliyuncs.com" ] } } ], "Version": "1" }
建立資料來源
在進行資料同步任務開發時,您需要在DataWorks上建立一個對應的資料來源,操作流程請參見建立並管理資料來源,詳細的配置參數解釋可在配置介面查看對應參數的文案提示。
資料同步任務開發:MySQL同步流程引導
資料同步任務的配置入口和通用配置流程可參見下文的配置指導。
單表離線同步任務配置指導
操作流程請參見通過嚮導模式配置離線同步任務、通過指令碼模式配置離線同步任務。
指令碼模式配置的全量參數和指令碼Demo請參見下文的附錄:MySQL指令碼Demo與參數說明。
單表即時同步任務配置指導
操作流程請參見DataStudio側即時同步任務配置。
整庫離線、整庫(即時)全增量、整庫(即時)分庫分表等整庫層級同步配置指導
操作流程請參見Data Integration側同步任務配置。
常見問題
更多其他Data Integration常見問題請參見Data Integration常見問題。
附錄:MySQL指令碼Demo與參數說明
離線任務指令碼配置方式
如果您配置離線任務時使用指令碼模式的方式進行配置,您需要按照統一的指令碼格式要求,在任務指令碼中編寫相應的參數,詳情請參見通過指令碼模式配置離線同步任務,以下為您介紹指令碼模式下資料來源的參數配置詳情。