Special Handling of DM DDLs

When TiDB Data Migration (DM) migrates data, it parses the DDL statements and handles them according to the statement type and the current migration stage.

Skip DDL statements

The following statements are not supported by DM, so DM skips them directly after parsing.

DescriptionSQL
transaction^SAVEPOINT
skip all flush sqls^FLUSH
table maintenance^OPTIMIZE\s+TABLE
^ANALYZE\s+TABLE
^REPAIR\s+TABLE
temporary table^DROP\s+(\/\\!40005\s+)?TEMPORARY\s+(\\/\s+)?TABLE
trigger^CREATE\s+(DEFINER\s?=.+?)?TRIGGER
^DROP\s+TRIGGER
procedure^DROP\s+PROCEDURE
^CREATE\s+(DEFINER\s?=.+?)?PROCEDURE
^ALTER\s+PROCEDURE
view^CREATE\s(OR REPLACE)?\s+(ALGORITHM\s?=.+?)?(DEFINER\s?=.+?)?\s+(SQL SECURITY DEFINER)?VIEW
^DROP\s+VIEW
^ALTER\s+(ALGORITHM\s?=.+?)?(DEFINER\s?=.+?)?(SQL SECURITY DEFINER)?VIEW
function^CREATE\s+(AGGREGATE)?\s?FUNCTION
^CREATE\s+(DEFINER\s?=.+?)?FUNCTION
^ALTER\s+FUNCTION
^DROP\s+FUNCTION
tableSpace^CREATE\s+TABLESPACE
^ALTER\s+TABLESPACE
^DROP\s+TABLESPACE
event^CREATE\s+(DEFINER\s?=.+?)?EVENT
^ALTER\s+(DEFINER\s?=.+?)?EVENT
^DROP\s+EVENT
account management^GRANT
^REVOKE
^CREATE\s+USER
^ALTER\s+USER
^RENAME\s+USER
^DROP\s+USER
^DROP\s+USER

Rewrite DDL statements

The following statements are rewritten before being replicated to the downstream.

Original statementRewritten statement
^CREATE DATABASE…^CREATE DATABASE…IF NOT EXISTS
^CREATE TABLE…^CREATE TABLE..IF NOT EXISTS
^DROP DATABASE…^DROP DATABASE…IF EXISTS
^DROP TABLE…^DROP TABLE…IF EXISTS
^DROP INDEX…^DROP INDEX…IF EXISTS

Shard merge migration tasks

When DM merges and migrates tables in pessimistic or optimistic mode, the behavior of DDL replication is different from that in other scenarios. For details, refer to Pessimistic Mode and Optimistic Mode.

Online DDL

The Online DDL feature also handles DDL events in a special way. For details, refer to Migrate from Databases that Use GH-ost/PT-osc.