本節包含下列資訊:
- Datastream 處理從來源 MySQL 資料庫擷取資料的行為
- Datastream 支援的 MySQL 資料庫版本
- 使用 MySQL 資料庫做為來源時的已知限制
- 如何設定來源 MySQL 資料庫,以便將資料從中串流至目的地
行為
本節說明使用 Datastream 複製資料時,MySQL 來源的行為。從 MySQL 資料庫擷取資料時,您可以使用以 binlog 為基礎的複製功能,或以全域交易 ID (GTID) 為基礎的複製功能。您可以在建立串流時選取 CDC 方法。
以二進位記錄為基礎的複製
Datastream 可以使用二進位記錄檔檔案,記錄 MySQL 資料庫中的資料變更。然後將這些記錄檔中的資訊複製到目的地,以重現來源所做的變更。
Datastream 中以 binlog 為基礎的複寫功能主要有以下特點:
- 您可以選取特定 MySQL 來源中的所有資料庫或特定資料庫,以及資料庫中的所有資料表或特定資料表。
- 所有歷來資料都會複製。
- 系統會複製所有資料操縱語言 (DML) 變更,例如指定資料庫和資料表中的插入、更新和刪除作業。
- 系統只會複製已提交的變更。
以全域交易 ID (GTID) 為基礎的複製功能
Datastream 也支援以全域 ID (GTID) 為基礎的複製功能。
全域交易 ID (GTID) 是系統建立的專屬 ID,與 MySQL 來源上所修訂的每筆交易相關聯。這個 ID 不僅在來源上是唯一的,在特定複製拓撲中的所有伺服器上也是唯一的。這與以二進位記錄為基礎的複製不同,在後者中,資料庫叢集中的每個節點都會維護自己的二進位記錄檔,並使用自己的編號。如果發生故障或計畫性停機,維護個別二進位記錄檔和編號可能會造成問題,因為二進位記錄檔的連續性會中斷,導致以二進位記錄檔為基礎的複寫作業失敗。
以 GTID 為基礎的複製模式支援容錯移轉和自行管理的資料庫叢集,且無論資料庫叢集發生任何變更,都能持續運作。
Datastream 中以 GTID 為基礎的複製模式主要有以下特性:
- 您可以選取特定 MySQL 來源中的所有資料庫或特定資料庫,以及資料庫中的所有資料表或特定資料表。
- 所有歷來資料都會複製。
- 系統會複製所有資料操縱語言 (DML) 變更,例如指定資料庫和資料表中的插入、更新和刪除作業。
- 系統只會複製已提交的變更。
- 無縫支援容錯移轉。
從以二進位記錄檔為基礎的複製模式切換至以 GTID 為基礎的複製模式
如要更新串流,並從以二進位記錄檔為基礎的複製作業切換為以 GTID 為基礎的複製作業,且不需要執行回填作業,請按照下列步驟操作:
- 確認符合以 GTID 為基礎的複製模式的所有需求。詳情請參閱「設定來源 MySQL 資料庫」。
- (選用) 建立並執行以 GTID 為基礎的測試串流。詳情請參閱「建立串流」一文。
- 建立以 GTID 為基礎的串流。請先不要啟動。
- 停止將應用程式流量轉送到來源資料庫。
- 暫停現有的 binlog 串流。詳情請參閱「暫停串流」。
- 請稍候幾分鐘,確保 Datastream 已趕上資料庫的進度。如要查看這項資訊,請前往串流的「Stream details」(串流詳細資料) 頁面,然後查看「Monitoring」(監控) 分頁中的指標。「資料更新間隔」和「輸送量」的值必須為
0
。 - 啟動以 GTID 為基礎的串流。詳情請參閱「開始串流」一文。
- 恢復來源資料庫的流量。
如果執行回填作業不是問題,您可以在 BigQuery 中截斷資料表、刪除舊串流,然後啟動新的串流並執行回填作業。如要進一步瞭解如何管理補充作業,請參閱管理串流物件的補充作業。
版本
Datastream 支援下列版本的 MySQL 資料庫:
- MySQL 5.6
- MySQL 5.7
- MySQL 8.0
MySQL 8.4 (僅支援以 GTID 為基礎的複製模式)
Datastream 支援下列類型的 MySQL 資料庫:
- 自行託管的 MySQL
- MySQL 適用的 Cloud SQL
- MySQL 適用的 Amazon RDS
- Amazon Aurora MySQL
- MariaDB
- Alibaba Cloud PolarDB
- Percona Server for MySQL
已知限制
使用 MySQL 資料庫做為來源時,您必須遵守下列已知限制:
- 串流最多只能有 10,000 個資料表。
- 如果資料表的主鍵定義為
INVISIBLE
,就無法進行回填。 - 如果資料表超過 5 億列,必須符合下列條件才能回填資料:
- 資料表具有專屬索引。
- 索引的任何資料欄都不得為可為空值。
- 索引不是遞減。
- 串流中會包含索引的所有資料欄。
- Datastream 會在處理事件時,定期從來源擷取最新結構定義。如果結構定義有所變更,Datastream 會偵測到這項變更,並觸發結構定義擷取作業。不過,系統在擷取結構定義時,可能會錯誤處理或捨棄部分事件,導致資料不一致。
- 系統可能無法自動偵測來源結構定義的所有變更,因此可能會發生資料損毀。下列結構定義變更可能會導致資料損毀,或無法處理下游事件:
- 捨棄資料欄
- 在表格中間新增欄
- 變更資料欄的資料類型
- 重新排序資料欄
- 捨棄資料表 (如果之後會重新建立資料表並新增資料,這項操作就相當實用)
- 截斷資料表
- Datastream 不支援複製檢視表。
- Datastream 不支援空間資料類型的資料欄。這些資料欄中的值會替換為
NULL
值。 - Datastream 不支援
DATETIME
、DATE
或TIMESTAMP
資料類型資料欄中的零值 (0000-00-00 00:00:00
)。零值會替換為NULL
值。 - 資料串流不支援複製
JSON
資料欄中包含下列值的資料列:DECIMAL
、NEWDECIMAL
、TIME
、TIME2
、DATETIME
、DATETIME2
、DATE
、TIMESTAMP
或TIMESTAMP2
。系統會捨棄含有這類值的事件。 - Datastream 不支援二進位記錄檔交易壓縮。
- Datastream 不支援來源 MySQL 連線設定檔中的 SSL 憑證鏈結。系統僅支援單一的 x509 PEM 編碼憑證。
- Datastream 不支援連鎖刪除作業。這類事件不會寫入二進位記錄檔,因此不會傳播至目的地。
- Datastream 不支援
DROP PARTITION
作業。這類作業僅限中繼資料作業,不會進行複製。其他活動不受影響,串流也會順利執行。 - 由於使用二進位記錄式複製功能時,Datastream 不支援容錯移轉至備用資源,因此建議對 MySQL Enterprise Plus 適用的 Cloud SQL 來源使用 GTID 式複製功能。Cloud SQL Enterprise Plus 執行個體會在維護期間幾乎無須停機,並在維護期間容錯移轉至副本。
以 GTID 為基礎的複製作業的其他限制
- 如要復原使用 GTID 型複製功能的串流,只能使用 Datastream API。
- 系統不支援使用
CREATE TABLE ... SELECT
陳述式從其他資料表建立資料表。 - Datastream 不支援已加上標記的 GTID。
- 如要瞭解以 GTID 為基礎的複製作業適用的 MySQL 限制,請參閱 MySQL 說明文件。
後續步驟
- 瞭解如何設定 MySQL 來源,以便搭配 Datastream 使用。