アップストリームテーブルに有効なインデックスがなく、かつforce-replicate=trueが設定されていない場合、テーブルはレプリケートされません。ただし、このテーブルに有効なインデックスを作成する後続のDDL文( CREATE INDEX 、 ADD INDEX 、 ADD PRIMARY KEYを含む)はレプリケートされます。これにより、ダウンストリームテーブルとアップストリームテーブルのスキーマ間に不整合が生じ、その後のデータレプリケーションが失敗する可能性があります。
最後の有効なインデックスを削除する DDL ステートメント ( DROP INDEXとDROP PRIMARY KEYを含む) は複製されないため、後続のデータレプリケーションが失敗します。
DDL
有効なインデックスが存在します
有効なインデックスが存在せず、 force-replicateはfalse (デフォルト) です
有効なインデックスが存在せず、 force-replicatetrueに設定されている
CREATE DATABASE
Y
Y
Y
DROP DATABASE
Y
Y
Y
ALTER DATABASE CHARACTER SET
Y
Y
Y
CREATE INDEX
Y
Y
Y
ADD INDEX
Y
Y
Y
DROP INDEX
Y
N
Y
ADD PRIMARY KEY
Y
Y
Y
DROP PRIMARY KEY
Y
N
Y
CREATE TABLE
Y
N
Y
DROP TABLE
Y
N
Y
ADD COLUMN
Y
N
Y
DROP COLUMN
Y
N
Y
TRUNCATE TABLE
Y
N
Y
MODIFY COLUMN
Y
N
Y
RENAME TABLE
Y
N
Y
ALTER COLUMN DEFAULT VALUE
Y
N
Y
ALTER TABLE COMMENT
Y
N
Y
RENAME INDEX
Y
N
Y
ADD PARTITION
Y
N
Y
DROP PARTITION
Y
N
Y
TRUNCATE PARTITION
Y
N
Y
CREATE VIEW
Y
N
Y
DROP VIEW
Y
N
Y
ALTER TABLE CHARACTER SET
Y
N
Y
RECOVER TABLE
Y
N
Y
REBASE AUTO ID
Y
N
Y
ALTER TABLE INDEX VISIBILITY
Y
N
Y
EXCHANGE PARTITION
Y
N
Y
REORGANIZE PARTITION
Y
N
Y
ALTER TABLE TTL
Y
N
Y
ALTER TABLE REMOVE TTL
Y
N
Y
DDLレプリケーションの考慮事項
ADD INDEXおよびCREATE INDEX DDL の非同期実行
TiCDC は通常 DDL ステートメントを順番にレプリケートしますが、ダウンストリームがTiDBの場合、インデックスの作成および追加のための DDL 操作を非同期的に実行します。つまり、 ADD INDEXとCREATE INDEX DDLをダウンストリームTiDBクラスターにレプリケーションして実行した後、TiCDCはDDL実行の完了を待たずに直ちに戻ります。これにより、変更フィードレプリケーションのレイテンシーへの影響を最小限に抑え、後続のDML実行がブロックされることを回避できます。
[filter]rules = ['test.t*']
[[filter.event-filters]]matcher = ["test.t1"] # This filter rule applies only to the t1 table in the test database.ignore-event = ["create table", "drop table", "truncate table", "rename table"]