apache/seatunnel · warning

MySQL-CDC diagnostic

Error message

MySQL-CDC diagnostic: {} status empty/unsupported

What it means

This is a WARN-level diagnostic message, not a fatal error. When the MySQL-CDC connector runs a replication-status diagnostic query (e.g. SHOW SLAVE STATUS / SHOW REPLICA STATUS / SHOW MASTER STATUS), if the query returns no usable columns for the given label, the connector logs that the server's status output was empty or the statement is unsupported by that server/version, and continues normally.

Solutions

  1. No action strictly required — this is informational; replication continues.
  2. Verify you connected to the intended MySQL instance and that it has the role the diagnostic assumes (replica vs master).
  3. Check server version/variant; run the underlying SHOW SLAVE/REPLICA STATUS manually to confirm which columns exist.
  4. If diagnostics are noisy and not useful, upgrade the connector or adjust configuration that triggers the diagnostic dump.
Defensive patterns

Strategy: validation

Validate before calling

// before starting CDC, confirm the server answers the status statement with data
SHOW REPLICA STATUS; -- or SHOW SLAVE STATUS on older servers
-- expect non-empty Replica_IO_Running / Retrieved_Gtid_Set etc.

Prevention

When it happens

Trigger: logReplicationStatus executes a status SQL statement during logMySqlReplicationStatus diagnostics; every fetched column is null or filtered out so the result row is empty — e.g. SHOW SLAVE STATUS on a server that is not a replica, or an older/newer MySQL/MariaDB variant that does not expose the expected columns.

Common situations: Running CDC diagnostics against a non-replica MySQL instance; MariaDB or MySQL 8.0.22+ where SLAVE STATUS was renamed to REPLICA STATUS and older column names are absent; connecting through a proxy that strips session status; diagnostics invoked on the wrong node of a replicated topology.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/cba06d652b1c629c. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mysql/source/reader/fetch/MySqlSourceFetchTaskContext.java:590

                                        safeGetString(rs, "Exec_Master_Log_Pos"),
                                        safeGetString(rs, "Read_Master_Log_Pos"));
                        String retrievedGtidSet = safeGetString(rs, "Retrieved_Gtid_Set");
                        String executedGtidSet = safeGetString(rs, "Executed_Gtid_Set");

                        row.add("source_host=" + sourceHost);
                        row.add("io_running=" + ioRunning);
                        row.add("sql_running=" + sqlRunning);
                        row.add("relay_master_log_file=" + relayMasterLogFile);
                        row.add("exec_master_log_pos=" + execMasterLogPos);
                        if (retrievedGtidSet != null) {
                            row.add("retrieved_gtid_set=" + retrievedGtidSet);
                        }
                        if (executedGtidSet != null) {
                            row.add("executed_gtid_set=" + executedGtidSet);
                        }
                    });
            if (row.isEmpty()) {
                LOG.warn("MySQL-CDC diagnostic: {} status empty/unsupported", label);
                return true;
            }
            LOG.warn("MySQL-CDC diagnostic: {} status {}", label, String.join(", ", row));
            return true;
        } catch (SQLException e) {
            LOG.warn("MySQL-CDC diagnostic: {} failed: {}", sql, e.getMessage());
            return false;
        }
    }

    private void logBinlogRangeAnalysis(
            String requiredBinlogFilename, List<String> availableBinlogFiles) {
        BinlogFileNumber required = parseBinlogFileNumber(requiredBinlogFilename);
        if (required == null) {
            return;
        }

        long min = Long.MAX_VALUE;

View on GitHub (pinned to cf67b549a7)