MySQL Router 8.4
MySQL Router supports tracing of statements as they are processed by MySQL Router from client to server and the response to the client. The trace is returned as JSON.
This enables debugging, testing, application connection comparisons, and so on.
        To configure ROUTER SET trace you must add
        the following to your MySQL Router configuration file:
      
            max_idle_server_connections: add to the
            DEFAULT section. This must be set to at
            least 1.
          
            The following values can be added to the
            DEFAULT section and apply to all
            connections, or you can add them to the individual
            ROUTING: ... sections of connections you
            want to examine in detail.
          
                client_ssl_mode: Set to
                PREFERRED or
                REQUIRED.
              
                server_ssl_mode: Set to
                PREFERRED,REQUIRED,
                or DISABLED.
              
                connection_sharing: Set to 1 to
                enable connection sharing.
              
For example:
[DEFAULT]
max_idle_server_connections=64 
[routing:{...}]
client_ssl_mode=PREFERRED 
server_ssl_mode=PREFERRED
connection_sharing=1
      ROUTER TRACE can be enabled per session or per statement on the command line of your MySQL client.
Enable per session:
ROUTER SET TRACE = 1;
Disable per session:
ROUTER SET TRACE = 0;
Enable per statement:
query_attributes router.trace 1;
Disable per statement:
query_attributes router.trace 0;
The trace is returned in a JSON object with the following properties:
            start_time: Date and time string denoting
            the start of the span.
          
            end_time: Date and time string denoting
            the end of the span.
          
            elapsed_in_span_us: Microseconds spent in
            the current span. This value is end_time
            minus start_time.
          
            status_code: Represents the canonical
            status code of a finished Span. Default value is empty.
          
            name: Name of the event.
          
            attributes: Attributes of the event.
          
            events: An array of events. These contain
            the following:
          
                timestamp: Date and time string.
              
                name: Name of the event.
              
                attributes: Attributes of the event.
              
For example:
> mysql --host=127.0.0.1 --port=6446 --show-warnings
> ROUTER SET trace = 1;
> SELECT @@port;
+--------+
| @@port |
+--------+
|   3306 |
+--------+
1 row in set, 1 warning (0,02 sec)
Note (code 4600): {
  "start_time": "2023-03-23T15:31:08.052442Z",
  "end_time": "2023-03-23T15:31:08.052653Z",
  "elapsed_in_span_us": 211,
  "name": "mysql/query",
  "attributes": {
    "mysql.sharing_blocked": false
  },
  "events": [
    {
      "timestamp": "2023-03-23T15:31:08.052444Z",
      "name": "mysql/query_classify",
      "attributes": {
        "mysql.query.classification": "change_on_tracker"
      }
    },
    {
      "start_time": "2023-03-23T15:31:08.052455Z",
      "end_time": "2023-03-23T15:31:08.052495Z",
      "elapsed_in_span_us": 39,
      "name": "mysql/connect_and_forward",
      "attributes": {
        "mysql.remote.is_connected": true,
        "mysql.remote.endpoint": "localhost:3306",
        "mysql.remote.connection_id": 17,
        "db.name": ""
      },
      "events": [
        {
          "start_time": "2023-03-23T15:31:08.052458Z",
          "end_time": "2023-03-23T15:31:08.052495Z",
          "elapsed_in_span_us": 36,
          "name": "mysql/forward"
        }
      ]
    },
    {
      "start_time": "2023-03-23T15:31:08.052623Z",
      "end_time": "2023-03-23T15:31:08.052627Z",
      "elapsed_in_span_us": 3,
      "name": "mysql/response",
      "attributes": {
        "mysql.session.@@SESSION.statement_id": "84"
      }
    }
  ]
}
      The following trace events and attributes are supported:
mysql/query
          MySQL Router receives a query.
Attributes:
                  mysql.sharing_blocked: Boolean. If
                  connection sharing is blocked,
                  mysql.sharing_blocked_by is
                  displayed along with a reason why sharing is blocked.
                
                  mysql.sharing_blocked_by: String.
                  Displays the reason why connection sharing is blocked.
                  This can be one of the following values:
                
                      trx-state: A transaction is
                      active.
                    
                      trx-characteristics:
                      Transaction state is set. For example,
                      SET TRANSACTION READ ONLY.
                    
                      some-state-changed: The session
                      is in an unrecoverable state.
                    
                      session-track-gtids:
                      session_track_gtids
                      does not contain the expected value.
                    
                      session-track-state-change:
                      session_track_state_change
                      does not contain the expected value.
                    
                      session-track-transaction-info:
                      session_track_state_change
                      does not contain the expected value.
                    
mysql/query_classify
          Describes how MySQL Router analyzed the statement in the context of connection-sharing.
Attributes:
                  mysql.query.classification:
                  comma-separated list of none or more of the following:
                
                      accept_session_state_from_session_tracker:
                      The statement resulted in a notification from the
                      session tracker which was accepted as is.
                    
                      ignore_session_tracker_some_state_changed:
                      The statement resulted in a notification from the
                      session tracker which was ignored.
                    
                      session_not_sharable_on_error:
                      Statements such as SET known_variable =
                      1, unknown_variable = 2 can cause a
                      session state change, although the statement
                      failed. The server responds with an error, but no
                      session tracker, even though the session state
                      changed.
                    
                      session_not_sharable_on_success:
                      Set if a statement modifies the session state, but
                      the session tracker does not report it.
                    
                      forbidden_function_with_connection_sharing:
                      The statement contains functions or keywords which
                      are not possible with connection sharing. Such as
                      GET DIAGNOSTICS or
                      LAST_INSERT_ID().
                    
                      forbidden_set_with_connection_sharing:
                      The statement attempted to set the session tracker
                      information required for connection sharing.
                    
mysql/connect_and_forward
          Attributes:
                  mysql.remote.is_connected: Boolean.
                  If fale, there is no connection. If
                  true, the following values are
                  returned:
                
                      mysql.remote.endpoint: Name of
                      the server connection endpoint.
                    
                      mysql.remote.connection_id:
                      Connection ID of the server connection.
                    
                      db.name: Name of the schema.
                    
mysql/from_pool_or_connect
          Attributes:
                  mysql.remote.candidates:
                  Comma-separated list of endpoints.
                
                  net.peer.name: Hostname of the
                  endpoint this connection connected to in its previous
                  session.
                
                  net.peer.port: Port of the endpoint
                  this connection connected to in its previous session.
                
mysql/from_pool
          Attributes:
                  mysql.error_message: Displayed if
                  status_code is
                  ERROR.
                
                  mysql.remote.connection_id:
                  Connection ID of the server connection.
                
mysql/connect
          Attributes:
                  net.peer.name: Hostname of the
                  endpoint.
                
                  net.peer.port: Port of the
                  endpoint.
                
mysql/authenticate
          Attributes:
                  mysql.remote.needs_full_authentication:
                  Boolean. If a full handshake is required
                  (true) or if a fast
                  reset-connection is possible
                  (false).
                
                  If true, followed by
                  mysql/change_user. If
                  false, followed by
                  mysql/reset_connected.
                
mysql/server_greeting
          Attributes:
                  mysql.remote.connection_id:
                  Connection ID of the server connection.
                
mysql/client_greeting
          Attributes:
                  db.name: Name of the schema.
                
mysql/tls_connect
          Attributes:
                  tls.version: TLS version in use.
                
                  tls.cipher: TLS cipher used for the
                  connection.
                
                  tls.session_resused: Boolean.
                  True if the TLS session was reused.
                
mysql/response
          Attributes:
                  mysql.session.@@SESSION.*: Session
                  variables changed according to the server session
                  tracker.
                
                  mysql.session.transaction_state:
                  Comma-separated list of transaction states.
                
                  mysql.session.transaction_characteristics:
                  Statement required to restore the transaction state.
                
mysql/set_var
          Attributes:
                  mysql.session.@@SESSION.*: Session
                  variables restored after a reconnect.
                
        The following events have the same attributes as
        mysql/query:
      
            mysql/ping
          
            mysql/stmt_prepare
          
            mysql/stmt_execute
          
            mysql/kill
          
            mysql/statistics
          
            mysql/set_option
          
            mysql/reload
          
            mysql/list_fields
          
The following events have no attributes:
            mysql/prepare_server_connection:
          
            mysql/reset_connection:
          
            mysql/greeting:
          
            mysql/forward:
          
The following example shows a trace of a simple forwarding of a query:
MySQL Router receives a query.
MySQL Router forwards the query to the server.
MySQL Router waits for the result.
MySQL Router forwards the result to the client.
$ mysql --host=127.0.0.1 --port=6446 --show-warnings
> ROUTER SET trace = 1;
> SELECT @@port;
+--------+
| @@port |
+--------+
|   3306 |
+--------+
1 row in set, 1 warning (0,02 sec)
Note (code 4600): {
  "start_time": "2023-03-23T15:31:08.052442Z",
  "end_time": "2023-03-23T15:31:08.052653Z",
  "elapsed_in_span_us": 211,
  "name": "mysql/query",
  "attributes": {
    "mysql.sharing_blocked": false
  },
  "events": [
    {
      "timestamp": "2023-03-23T15:31:08.052444Z",
      "name": "mysql/query_classify",
      "attributes": {
        "mysql.query.classification": "accept_session_state_from_session_tracker"
      }
    },
    {
      "start_time": "2023-03-23T15:31:08.052455Z",
      "end_time": "2023-03-23T15:31:08.052495Z",
      "elapsed_in_span_us": 39,
      "name": "mysql/connect_and_forward",
      "attributes": {
        "mysql.remote.is_connected": true,
        "mysql.remote.endpoint": "localhost:3306",
        "mysql.remote.connection_id": 17,
        "db.name": ""
      },
      "events": [
        {
          "start_time": "2023-03-23T15:31:08.052458Z",
          "end_time": "2023-03-23T15:31:08.052495Z",
          "elapsed_in_span_us": 36,
          "name": "mysql/forward"
        }
      ]
    },
    {
      "start_time": "2023-03-23T15:31:08.052623Z",
      "end_time": "2023-03-23T15:31:08.052627Z",
      "elapsed_in_span_us": 3,
      "name": "mysql/response",
      "attributes": {
        "mysql.session.@@SESSION.statement_id": "84"
      }
    }
  ]
}