如何使 mysql 客户端提示反映您连接的服务器,而不是本地服务器

How to make mysql client prompt reflect the server you're connected to, not local one

我有 2 个服务器 - serverA 和 serverB,都有 mysql 服务器和 mysql 客户端。我设置了一个从 serverBserverA 的反向 SSH 隧道,这样我就不必打开 server B 上的端口到互联网。我通过 mysql --host 127.0.0.1 --port 50003

serverA 访问 serverB

如果我登录到 serverA 并执行 mysql --host 127.0.0.1 --port 3306 我希望命令行提示符为 me@serverA [dbname].
如果我登录到 serverA 并执行 mysql --host 127.0.0.1 --port 50003 我希望命令行提示符为 me@serverB [dbname].

对于这些示例,我总是登录到 serverA 并将 mysql 客户端连接到 serverAserverB

serverAserverB 上使用 /etc/my.cnf 中的 prompt 指令, 如果我这样做

[mysql]
prompt = \u@\h [\d]

然后我在他们两个上得到 me@127.0.0.1 [dbname]

如果我在服务器 A 上执行 prompt = \u@serverA [\d] 并在服务器 B 上执行 prompt = \u@serverB [\d],那么无论我尝试连接到 serverA 还是 [=12=,我都会得到 me@serverA [dbname] ]

所以看起来命令提示符正在获取 serverA 上服务器的详细信息,而不管我实际连接的是什么。

有什么方法可以让提示反映我实际连接的内容吗?

prompt 设置是客户端选项。对于来自 serverA 的连接,唯一重要的配置文件是 serverA 上的配置文件。您在两个连接的提示中看到 127.0.0.1 的原因是,从客户端的角度来看,两个连接都连接到 127.0.0.1.

MySQL 客户端提供了一种指定选项组的机制(命令行参数 --default-groups-suffix),您可以使用它来近似查找您要查找的内容。作为您需要的示例,您可以将以下内容添加到您的 ~/.my.cnf 文件中:

[clientserverA]
prompt = \u@serverA [\d]>
host = 127.0.0.1

[clientserverB]
prompt = \u@serverB [\d]>
host = 127.0.0.1
port = 50003

使用它,您可以使用 mysql --defaults-group-suffix=serverAmysql --defaults-group-suffix=serverB 连接到 MySQL。客户端将根据您提供的后缀使用适当的主机、端口和提示进行连接。

您可以创建一个带有后缀的 shell 函数,如果您不想全部输入,则可以创建适当的命令行。