Hi Otto, thanks for bringing this to my attention.
Happy to add redirect support to mysql2, looks like its relatively straightforward and sits on top of the existing protocol

Andrey

On Wed, 19 Jul 2023 at 15:44, Otto Kekäläinen <otto@kekalainen.net> wrote:
Hi Andrey!

I am reaching out to you because you maintain
https://github.com/sidorares/node-mysql2

Have you heard about this proposal on the MariaDB developers list?

It suggests adding a new feature to the MariaDB/MySQL protocol where
the server would be able to tell clients "No accepting connections -
connect to this server instead". The implementation would be work by
sending a new error type ERR_REDIRECT along with a client the
IP/hostname of a new server, similar to how HTTP 301 redirect works-

Full thread visible at
https://lists.mariadb.org/hyperkitty/list/developers@lists.mariadb.org/thread/7UGBTX2B2KPH7UAXCCWFMUNIRQEA3WLS/

If you want to participate in discussion, just reply to this message
and change recipient to developers@lists.mariadb.org.

Thanks!


---------- Forwarded message ---------
From: Lenski, Daniel via developers <developers@lists.mariadb.org>
Date: Wed, 28 Jun 2023 at 15:24
Subject: [MariaDB developers] Client-server protocol improvement
proposal: Connection redirection
To: developers@lists.mariadb.org <developers@lists.mariadb.org>


Hi!

I would like to propose a new feature in the MariaDB client-server
protocol: application-layer redirection of client connections.

We want the MariaDB server to be able to tell clients connecting to
it, “Sorry, this server is unavailable. Connect to an alternate server
instead.” This mechanism is inspired by HTTP 302 (“temporary
redirect”) mechanism familiar to all developers of web applications,
and is intended to have similar semantics and security properties,
since these have now been widely deployed and tested for decades.

I have submitted a minimal but viable implementation of this at:
https://github.com/MariaDB/server/pull/2681, server-side implementation
https://github.com/mariadb-corporation/mariadb-connector-c/pull/226,
MariaDB Connector/C implementation


I am seeking advice and opinions on these, and will proceed to
finalize this in the following 1-2 months.

In its current form, this implementation allows the MariaDB server
administrator to set two variables:

SET GLOBAL SERVER_REDIRECT_MODE={ON,OFF}  (the default is OFF)
SET GLOBAL SERVER_REDIRECT_TARGET='my-new-server.example.com' (or
192.168.0.123:3307, or new-server.com:3308, etc)

When SERVER_REDIRECT_MODE is set to on, the server will stop accepting
new TCP-based connections (unless they are to the extra port, which is
intended for emergency administrative use), and it will instead
respond to all clients with an error packet:

$ mariadb --host my-server.example.com
ERROR 4189 (HY000): |Server is redirecting clients to
'my-new-server.example.com:3307'|my-new-server.example.com:3307

When an appropriately-updated client receives this error packet (error
code 4196, message formatted as |Human readable message|<value of
SERVER_REDIRECT_TARGET>), it will parse the redirection target out
from the error message and attempt a new connection:

$ updated-mariadb --host my-server.example.com -e 'select @@hostname'
Got server redirect to 'my-new-server.example.com' (port 3307)
+---------------------------+
| @@hostname                |
+---------------------------+
| my-new-server.example.com |
+---------------------------+

The feature is gracefully backwards-compatible. Old clients that do
not support redirection will fail and show the message in a form from
which humans can deduce what happened. New clients that do support it
will follow it to the new server.

[...]