我有一个应用程序服务器和几个数据库服务器。在DB服务器中,我安装了整个MySQL服务器包,但在应用程序服务器中,我只安装了MySQL客户端包,以使其能够连接到驻留在DB服务器上的MySQL服务器。由于我使用的是InnoDB集群,所以在我的应用服务器中,我安装并引导了MySQL路由器。
现在我想通过MySQL路由器连接到MySQL服务器。我必须发出以下任一MySQL命令:
mysql -uroot -p'password' -h127.0.0.1 -P6446
mysql -uroot -p'password' -P6446 --protocol=tcp
我必须指定端口,在这种情况下这是可以的,因为MySQL路由器已经配置了不同的端口来访问不同的数据库(读写数据库或只读数据库)。我关心的是,我必须指定-h127.0.0.1或--protocol=tcp,以强制它使用TCP连接而不是套接字。如果我不指定它,我会得到以下错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)我的目标是摆脱在每个连接中指定主机/协议。/var/lib/mysql/mysql.sock是从哪里来的?是否为MySQL默认套接字位置?我在DB服务器上为[client]组在my.cnf中配置的实际套接字位置是/opt/mysql/mysql.sock。路由器中配置的套接字位置为socket=/etc/mysqlrouter/mysql.sock。我已经测试过,如果我用--socket指定路由器中配置的套接字位置,它将工作,而不需要指定主机和协议为TCP,我甚至不需要指定主机,因为根据不同的套接字,路由器知道您连接的是哪个数据库(还有另一个套接字mysqlro.sock,用于只读数据库)。由于my.cnf没有附带MySQL客户端包,如何更改默认套接字位置(或者它实际上有?)。如果无法实现上述功能,是否可以默认强制MySQL客户端通过TCP连接?
发布于 2020-04-13 20:48:08
要设置客户机程序的配置(在客户机主机上,在您的情况下,很可能是应用程序服务器),您必须在用户目录中创建一个名为~/.my.cnf的新文件,如4.2.2.2 Using Option Files中所述。使用此文件通过添加[mysql]节来添加mysql应用程序的默认设置。举个例子,当你运行
$ mysql --print-defaults它将显示以下(示例)输出:
mysql would have been started with the following arguments:
--loose-default-auth=mysql_native_password
--socket=/var/run/mysqld/mysqld.sock
--character-sets-dir=/usr/share/mysql/charsets
--loose-default-character-set=utf8mb4 (添加新行以提高可读性)
将以下行添加到新的~/.my.cnf文件中:
[mysql]
socket=/tmp/example从现在开始,将使用以下默认设置:
$ mysql --print-defaults
mysql would have been started with the following arguments:
--loose-default-auth=mysql_native_password
--socket=/var/run/mysqld/mysqld.sock
--character-sets-dir=/usr/share/mysql/charsets
--loose-default-character-set=utf8mb4
--socket=/tmp/example出于测试目的,当您调用mysql时,您将获得以下错误消息(与预期不谋而合):
$ mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/example' (2)在本例中,您可能想要添加行host=127.0.0.1,这样它就可以像使用-h127.0.0.1一样使用给定的主机名。您还可以在此文件中添加port设置。
https://stackoverflow.com/questions/61187555
复制相似问题