{"record":{"id":"95698cf1f0f84a2a","repo":"apache/seatunnel","slug":"mysql-cdc-diagnostic-gtid-set-is-not-available-on","errorCode":null,"errorMessage":"MySQL-CDC diagnostic: GTID set is not available on server for restored offset. restored_gtid_set={}, sourceInfo={}","messagePattern":"MySQL-CDC diagnostic: GTID set is not available on server for restored offset\\. restored_gtid_set=(.+?), sourceInfo=(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mysql/source/reader/fetch/MySqlSourceFetchTaskContext.java","lineNumber":438,"sourceCode":"            List<String> availableBinlogFiles,\n            MySqlOffsetContext offset) {\n        LOG.warn(\n                \"MySQL-CDC diagnostic: requested starting offset sourceInfo={}\",\n                offset.getSourceInfo());\n        LOG.warn(\n                \"MySQL-CDC diagnostic: debezium connection target host={}, port={}\",\n                getDbzConnectorConfig().hostname(),\n                getDbzConnectorConfig().port());\n\n        logMySqlServerIdentity();\n        logMySqlBinlogRetentionVariables();\n        logMySqlMasterStatus();\n        logMySqlReplicationStatus();\n        logBinlogRangeAnalysis(requiredBinlogFilename, availableBinlogFiles);\n    }\n\n    private void logGtidNotAvailableDiagnostics(MySqlOffsetContext offset) {\n        LOG.warn(\n                \"MySQL-CDC diagnostic: GTID set is not available on server for restored offset. restored_gtid_set={}, sourceInfo={}\",\n                offset.gtidSet(),\n                offset.getSourceInfo());\n        LOG.warn(\n                \"MySQL-CDC diagnostic: debezium connection target host={}, port={}\",\n                getDbzConnectorConfig().hostname(),\n                getDbzConnectorConfig().port());\n        logMySqlServerIdentity();\n        logMySqlBinlogRetentionVariables();\n        logMySqlMasterStatus();\n        logMySqlReplicationStatus();\n    }\n\n    private void logMySqlServerIdentity() {\n        final String sql =\n                \"SELECT @@hostname AS hostname, @@port AS port, @@server_id AS server_id, \"\n                        + \"@@server_uuid AS server_uuid, @@read_only AS read_only, \"\n                        + \"@@super_read_only AS super_read_only, @@version AS version, \"","sourceCodeStart":420,"sourceCodeEnd":456,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mysql/source/reader/fetch/MySqlSourceFetchTaskContext.java#L420-L456","documentation":"This is a diagnostic WARN log, not a thrown exception. It is emitted by logGtidNotAvailableDiagnostics (called from checkGtidSet) when the GTID set recorded in the restored checkpoint offset cannot be reconciled with GTID information available on the MySQL server, i.e. the server has no GTID data (or GTID mode is off) covering the restored gtidSet. SeaTunnel logs this plus follow-up diagnostics to help explain why a restarted CDC job cannot resume from its saved GTID position.","triggerScenarios":"A Zeta job is restored from checkpoint/snapshot whose offset contains a GTID set, and checkGtidSet determines the target server does not provide a matching/available GTID set (e.g. gtid_mode=OFF, server without binlogs, or restored offset pointing to a different replica).","commonSituations":"Restarting a job against a different MySQL instance than originally read from; MySQL upgraded/migrated with GTID disabled; replicas in a topology where GTIDs are not preserved; restores where sourceInfo shows a hostname differing from the configured one.","solutions":["Enable GTID on the MySQL server (gtid_mode=ON, enforce_gtid_consistency=ON) and restart mysqld if required","Verify the job connects to the same server that produced the offset (compare logged hostname/port/server_uuid)","Check the logged gtid_mode/server identity output; if GTID cannot be enabled, re-run the job from a snapshot (drop the checkpoint and start fresh)","If reading from a replica, ensure it replicates GTIDs (log_slave_updates=ON with GTID enabled)"],"exampleFix":"// before (my.cnf)\ngtid_mode=OFF\n// after (my.cnf, then restart MySQL)\ngtid_mode=ON\nenforce_gtid_consistency=ON","handlingStrategy":"validation","validationCode":"// Run before starting/restoring the CDC job\nSELECT @@global.gtid_mode; -- must be ON\nSELECT @@global.enforce_gtid_consistency; -- must be ON\nSELECT @@global.server_uuid; -- compare with checkpoint sourceInfo server id","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep gtid_mode=ON and enforce_gtid_consistency=ON on all CDC source servers","Never restore a checkpoint against a different MySQL instance (pin host or use stable service names, not round-robin LBs)","Enable log_slave_updates on replicas so GTIDs propagate","Test job restart from checkpoint in staging before production changes"],"tags":["mysql","cdc","gtid","diagnostics","checkpoint-restore"],"backgroundTag":"invalid-state-transition","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}