diff --git a/binlog_streamer.go b/binlog_streamer.go index fd4178e57..0fdb973c7 100644 --- a/binlog_streamer.go +++ b/binlog_streamer.go @@ -499,7 +499,16 @@ func idExistsOnServer(id uint32, db *sql.DB) (bool, error) { } func idsOnServer(db *sql.DB) ([]uint32, error) { - rows, err := db.Query("SHOW SLAVE HOSTS") + // SHOW SLAVE HOSTS is deprecated as of MySQL 8.0.22, so fallback to a compatible query on newer servers. + // See https://dev.mysql.com/doc/refman/8.0/en/show-slave-hosts.html for details. + var rows *sqlorig.Rows + var err error + for _, q := range []string{"SHOW SLAVE HOSTS", "SHOW REPLICAS"} { + rows, err = db.Query(q) + if err == nil { + break + } + } if err != nil { return nil, fmt.Errorf("could not get slave hosts: %s", err) } diff --git a/utils.go b/utils.go index 878192c5b..67caac3e6 100644 --- a/utils.go +++ b/utils.go @@ -189,10 +189,20 @@ func (c *StmtCache) getStmt(query string) (*sqlorig.Stmt, bool) { } func ShowMasterStatusBinlogPosition(db *sql.DB) (mysql.Position, error) { - rows, err := db.Query("SHOW MASTER STATUS") + // SHOW MASTER STATUS is deprecated as of MySQL 8.0.22, so fallback to a compatible query on newer servers. + // See https://dev.mysql.com/doc/refman/8.4/en/show-master-status.html for details. + var rows *sqlorig.Rows + var err error + for _, q := range []string{"SHOW MASTER STATUS", "SHOW BINARY LOG STATUS"} { + rows, err = db.Query(q) + if err == nil { + break + } + } if err != nil { return NewMysqlPosition("", 0, err) } + defer rows.Close() var file string var position uint32