Temporal Helm + MySQL: Is native multi-host DB failover supported (without LB/proxy)?

Hi Temporal community,

We are running self-hosted Temporal on OpenShift/Kubernetes and want to clarify DB host failover behavior for MySQL.

Environment

  • Temporal Helm chart version: 0.73.1

  • Temporal server appVersion/image tag: 1.29.1

  • Chart path: temporalio/helm-charts style templates (server-dockerize-configmap.yaml)

  • Config mode:

    • server.configMapsToMount: "dockerize"

    • server.useEntrypointScript: false

  • External MySQL (chart-managed MySQL disabled):

    • mysql.enabled: false

Our current values snippet

mysqlConnection: &mysqlConnection
  driver: mysql8
  host: "db-node-1.example.com"
  port: 1234
  user: temporal_user
  password: "" # from existingSecret
  existingSecret: temporal-mysql-secret
  secretKey: password
  database: temporal_db
  maxConns: 20
  maxIdleConns: 10

server:
  config:
    persistence:
      default:
        driver: sql
        sql: *mysqlConnection
      visibility:
        driver: sql
        sql: *mysqlConnection

What we wanted to try

We wanted to define multiple hosts directly, e.g.:

connectAddr: "db-node-1:1234,db-node-2:1234,db-node-3:1234"

and remove host/port competely (or whatever other way to provide such list of hosts)

Why we think this doesn’t work (please confirm/correct)

In chart template server-dockerize-configmap.yaml, SQL config is rendered like:

  • connectAddr is always built from host:port

  • then extra SQL fields are rendered via omit(...) that excludes connectAddr, host, port, etc.

So sql.connectAddr appears not to pass through, and host/port remain required for this path.

Also, from Temporal server MySQL session code (common/persistence/sql/sqlplugin/mysql/session/session.go), it appears DSN uses one resolved address:

mysqlConfig.Addr = r.Resolve(cfg.ConnectAddr)[0]

and default resolver is NewNoopResolver() (returns the same string as single entry).

Questions

  1. Is there any officially supported way to configure multiple MySQL hosts directly in Temporal server config (without using LB/ProxySQL/MySQL Router/VIP)?

  2. If not supported today, is this expected for MySQL plugin, and is there any roadmap/issue to support host list failover?

  3. For production HA with MySQL, is the recommended pattern:

    • Temporal → single HA DB endpoint (Router/Proxy/VIP),

    • and use Temporal Multi-Cluster Replication only for cross-region Temporal failover (not DB node failover)?

Any guidance from maintainers or users running MySQL HA in production would be very helpful.

Thanks!