Data Transmission Service (DTS) reports errors with structured error codes. Use this page to identify the root cause and resolve the issue.
The error message examples shown are for reference only. Your actual messages may differ in format.
Find your issue
If you are not sure which error code applies, use these symptoms to navigate:
| Symptom | Likely error codes |
|---|---|
| Task fails immediately after restart | DTS-50019, DTS-51009 |
| Column not found in destination table | DTS-30018, DTS-30019, DTS-70019 |
| SQL execution fails | DTS-10046, DTS-30020, DTS-70004 |
| Cannot connect to source database | DTS-60001, DTS-61015 |
| Cannot connect to destination database | DTS-71016 |
| Cannot connect to Redis | DTS-10015 |
| Data write fails or table is full | DTS-30011 |
| Binary log parsing fails | DTS-1051009 |
| Table or database not found | DTS-70002 |
| Metadata save fails | DTS-30005 |
Error reference
DTS-51009 — Connection timeout reading from data cache
Example:
DTS-31009: In process of processing data (recordRange: 5799806987638145024) failed cause:
CriticalAnyAllException: capture-dstore: DTS-51009: Failed to fetch records from dstore
TimeoutException: Failed to get offsets by times in 120000 msCause: A network jitter interrupted the connection between the data write module and the data cache module, causing the read operation to time out.
Fix: Restart the task. If it resumes without further errors, no additional action is needed.
DTS-50019 — Cannot read data at the specified point in time
Example:
DTS-31009: In process of processing data (recordRange: 9117052685537771520) failed cause:
CriticalAnyAllException: capture-dstore: DTS-51009: Failed to fetch records from dstore
CriticalAnyAllException: capture-dstore: DTS-50019: seek timestamp for topic [-0]
with position [{"timestamp":1621516671, "offset":-1}] failedThe timestamp in the error message is a UNIX timestamp. Use a UNIX timestamp converter to get the equivalent UTC time.
This error means the data cache no longer holds data at the point in time where the task needs to resume. DTS retains only the last 24 hours or 50 GB of incremental data logs. Three scenarios can exhaust this window:
Cause 1: Task paused too long
When a task is paused, DTS continues aging out logs in the background. If a task stays paused for more than 6 hours, the logs it needs to resume are no longer in the cache.
If the required point in time still falls within the binary log or redo log range of the source database, contact Alibaba Cloud technical support to re-read the data.
Otherwise, create a new task. To prevent recurrence, do not pause a running task for more than 6 hours.
Cause 2: Task stayed down too long after a failure
If a task fails and is not recovered quickly, the logs it needs expire from the cache before the task can resume.
Fix the underlying error, then create a new task. When errors occur, address them promptly to avoid log expiry.
Cause 3: Full data migration took too long
DTS begins caching incremental logs at the moment a full migration or synchronization starts. If full data migration or synchronization lasts for a long period of time, DTS may have cleared the data logs that are cached after the task is started. As a result, the data logs used for incremental data parsing are incomplete.
Create a new task. Before starting, estimate the data volume. For large datasets, split the migration into multiple tasks to keep each run within the log retention window.
DTS-30018, DTS-30019, and DTS-70019 — Column not found in destination table
Example:
DTS-30019: Can not find column [column_in_source<-->column_in_target] in target table db_name.table_name
DTS-70019: Can not find column[column_in_source<-->column_in_target]in target table db_name.table_nameCause 1: Schema migration was not selected as a migration type when the task was configured. Without schema migration, DTS does not create the destination table structure, so the column does not exist.
Cause 2: A DDL statement was run on the source or destination database after the task was configured, making the schemas inconsistent.
Fix: Align the table schemas in the source and destination databases so they match, then restart the task.
If neither cause applies, try these additional steps:
Restart the migration task to see if it resumes.
Remove the affected tables from the selected objects, then add them back and retry.
DTS-10046 and DTS-30020 — SQL execution failed
Example:
DTS-10046: execute sql: CREATE TABLE if not exists `dts`.`table_name` (...) failed.
Create TransactionTable failed. cause: MySQLSyntaxErrorException:
CREATE command denied to user 'username'@'ip_address' for table 'table_name'In most cases, the database engine error message is included alongside this error code. Check the SQL statement and the database error message to identify the specific failure.
Cause: The database account does not have the required permission (CREATE TABLE in the example above).
Fix: Grant the missing permission to the database account, then retry the operation.
DTS-70004 — Statement execution failed
DTS-70004 covers multiple failure scenarios. Match your error message to one of the following variants.
Variant: Unsupported DDL on AnalyticDB for MySQL
Example:
DTS-70004: execute statement failed: /*dts_id=dtsaaaaaaaaaa*/alter table `xxx`.`yyy`
modify column `aaa` INT default 0 comment 'bbb'
cause: SQLException: modify column type is not supported, col=x, oldType=bigint, newType=intCause: DTS attempted to synchronize a DDL statement that AnalyticDB for MySQL does not support. DTS cannot skip unsupported DDL automatically, so the synchronization task stops.
Fix:
If you do not need to synchronize the entire database: Remove the affected table from the selected objects, delete it from the destination database, then add it back to the selected objects. DTS re-synchronizes the schema and historical data, and the unsupported DDL statement is skipped.
If you need to synchronize the entire database: Create a temporary table (Table A) in AnalyticDB for MySQL with a different name but the same schema as the source table. Run
INSERT INTO SELECTto copy data from the source table into Table A. Delete the original destination table (Table B). RunRENAMEto rename Table A to Table B. Restart the synchronization task.
Variant: Destination database is shut down
Example:
DTS-70004: execute statement failed: ...
error detail message: Server shutdown in progress
MySQLNonTransientConnectionException: Server shutdown in progressCause: The SHUTDOWN operation is performed on the destination database, breaking the connection DTS needs to apply changes.
Fix: Verify that the destination database is running, then restart the synchronization task.
Variant: Remote login denied
Example:
DTS-70004: execute statement failed: ...
cause: SQLException: null, message from server:
"Host '192.10.XX.XX' is not allowed to connect to this MySQL server"Cause: The destination MySQL database is blocking the DTS connection — either because the DTS server IP is not in the allowlist, or the database account does not have remote login permission.
Fix:
Check the allowlist settings. For details, see Add the CIDR blocks of DTS servers to the security settings of on-premises databases.
Verify that the database account has remote login permission.
After fixing the issue, restart the task.
Variant: Table does not exist
Example:
DTS-70004: execute statement failed: ...
error detail message: Table 'xxx.yyy' doesn't exist
MySQLSyntaxErrorException: Table 'xxx.yyy' doesn't existCause: The destination table does not exist — either it was deleted, or it was not created during schema migration.
Fix:
Check whether the table was deleted from the destination database.
Check whether schema migration ran successfully and created the table.
After fixing the issue, restart the task.
Variant: Column cannot be null
Example:
error detail message: Column 'aaa' cannot be null
MySQLIntegrityConstraintViolationException: Column 'aaa' cannot be nullCause: The integrity constraints of the database are violated. For example, NULL values are inserted into a NOT NULL column.
Fix:
Compare the source and destination table schemas and make them consistent.
Correct the data records that caused the violation.
Restart the task.
Variant: INSERT permission denied
Example:
error detail message: INSERT command denied to user 'user'@'100.104.175.31' for table 'yyy'
MySQLSyntaxErrorException: INSERT command denied to user 'user'@'100.104.175.31' for table 'yyy'Cause: The destination database account does not have INSERT permission on the target table.
Fix: Grant the permissions listed in the error message to the destination database account, then restart the task.
DTS-70002 — Database or table not found
Example:
DTS-70002: get table detail info failed after 151 times (user: db_name, database: table_name)
MySQLSyntaxErrorException: Table 'db_name.table_name' doesn't existCause: Schema migration did not complete successfully, so the table was never created in the destination database.
Fix: Confirm that the database and table named in the error message do not exist in the destination. If they are missing:
For a synchronization task: Remove the table from the selected objects, then add it back. DTS re-creates the schema and re-syncs the data.
For a migration task: Create a new task.
DTS-60001 — Cannot connect to source database
Example:
DTS-60001: Create connection failed (url: ip_address:port, user: username)
cause: SQLException: Access denied for user 'username'@'ip_address' (using password: YES)Cause: The username or password for the source database is incorrect. The Access denied message confirms that the connection reached the database but was rejected at authentication.
Fix: Correct the username and password, then restart the task.
If the credentials are correct but the error persists, check the following:
| Check | Action |
|---|---|
| Database status | Confirm the source database is running and accepting connections |
| Password change | Check whether the account password was recently changed |
| Allowlist settings | Add DTS server IP ranges to the database allowlist — see Add the CIDR blocks of DTS servers to the security settings of on-premises databases |
| Connection limit | Check whether the source database has reached its maximum connection count |
DTS-61015 — Source database connection limit reached
Example:
DTS-61015: Create connection failed (url: ip_address:port, user: username)
cause: MySQLNonTransientConnectionException: Data source rejected establishment of connection,
message from server: "Too many connections"Cause: The source database has reached its maximum number of connections. The server is rejecting all new connection attempts, including those from DTS.
Fix: Increase the connection limit on the source database, then restart the task.
If the connection count is not the issue, also check:
| Check | Action |
|---|---|
| Database status | Confirm the source database is running |
| Password change | Check whether the account password was recently changed |
| Allowlist settings | Add DTS server IP ranges — see Add the CIDR blocks of DTS servers to the security settings of on-premises databases |
DTS-71016 — Cannot connect to destination database
This error has two common variants based on the error message returned by the destination database.
Example 1:
DTS-71016: connect target failed (url: jdbc:mysql://ip_address:port?parameters)
cause: MySQLNonTransientConnectionException: Data source rejected establishment of connection,
message from server: "Too many connections"Cause: The destination database has reached its maximum number of connections and is rejecting all new connection attempts.
Fix: Increase the connection limit on the destination database, then restart the task.
Example 2:
DTS-71016: connect target failed (url: jdbc:mysql://ip_address:port?parameters)
cause: SQLException: null, message from server:
"Host 'ip_address' is blocked because of many connection errors;
unblock with 'mysqladmin flush-hosts'"Cause: Too many consecutive failed connection attempts from the same IP address caused MySQL to automatically block that host. This is a MySQL self-protection mechanism triggered when the number of failed attempts exceeds the MAX_CONNECTION_ERRORS threshold.
Fix: Fix the error on the destination database. For example, increase the value of the MAX_CONNECTION_ERRORS parameter. Then, restart the task.
DTS-10015 — Cannot connect to Redis
Example:
DTS-10015: unreachable redis network.
JedisConnectionException: Could not get a resource from the pool
JedisConnectionException: Failed connecting to ip_address:port
ConnectException: Connection timed out (Connection timed out)Cause: An exception occurred on the Redis server, making it unreachable.
Fix: Check the Redis server status and make sure it is running and accessible, then retry the task.
DTS-30005 — Metadata save failed
Example:
DTS-30005: save changed job progress info failed
cause: SQLException: result content unexpected. expect 3 time 1, actually [2, 1, 1]Cause: The source database contains two tables with names that differ only in letter case (for example, TABLE and table). DTS treats these as conflicting identifiers and cannot save metadata for them.
Fix: Check the table names in the source database. Rename one of the conflicting tables, then restart the task.
DTS-30011 — Data write failed
DTS-30011 covers several write failure scenarios. Match your error message to the appropriate variant.
Variant: Table is full
Example:
DTS-30011: put 2048 records error, ...
cause: BatchUpdateException: The table 'yyy' is full
SQLException: The table 'yyy' is fullCause 1: The disk is full.
Fix: Resize the disk to add capacity, then restart the task.
Cause 2: The table has reached the database-level size limit.
Fix: Increase the table size limit at the database level, then restart the task. For MySQL, see B.3.2.10 The table is full.
Variant: Lock wait timeout
Example:
DTS-30011: put 2048 records error, ...
cause: BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transactionCause: A lock wait timeout occurred in the destination database — another session holds a lock on the affected rows and has not released it within the timeout period.
Fix: Run the following statements on the destination MySQL database to identify and resolve the blocking lock:
SHOW FULL PROCESSLIST;
SELECT * FROM innodb_trx;After resolving the lock contention, restart the task.
Variant: Destination database is read-only
Example:
DTS-30011: put 2048 records error, ...
cause: SQLException: The MySQL server is running with the --read-only option
so it cannot execute this statementCause: The destination database is in read-only mode. DTS cannot write data to a read-only instance.
Fix:
Confirm the read-only state:
SELECT @@read_only;If the result is
1, disable read-only mode:SET GLOBAL read_only=0;Restart the task.
DTS-1051009 — Binary log parsing failed
Example:
java.IOEException: java.lang.IllegalArgumentException:
Valid type fail, Column: column_name, Type: type_numberCause: The table schema stored in the MySQL binary logs does not match the schema stored in DTS. This happens when a DDL statement that changes a table schema is not written to the binary log — for example, when SET SESSION sql_log_bin=0 is used before altering a column type (such as changing from INT(11) to BIGINT(20)). Because the DDL change is not logged, DTS cannot parse it and its internal schema becomes out of sync with the source.
Fix: Contact Alibaba Cloud technical support to reload the schema metadata stored in DTS.