88必发手机网页版 6

MySQL多实例的环境下,服务器端本地连接到指定实例的问题88必发手机网页版(sock方式连接)

 

MySQL一台主机多实例root登录问题

如果在一台机子上起多个MySQL实例, 比如端口号为 3306, 3307, 3308

登录时候要选择不同的 mysql.sock文件

mysql -uroot -p123456 这一句 登录的是 3306的实例
mysql -uroot -p123456 -S /home/mysql_3307/mysql.sock 这一句 登录的是
3307的实例

这时候 用 -P 3307 这个选项是不管用的。 这个-P 的选项和 -h
应该是一起用的。

本机登录以来的是这个sock文件。

http://www.bkjia.com/Mysql/1021761.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/1021761.htmlTechArticleMySQL一台主机多实例root登录问题
如果在一台机子上起多个MySQL实例, 比如端口号为 3306, 3307, 3308
登录时候要选择不同的 mysql.sock文件 m…

涉及到sock连接的问题。

 

为了测试MySQL的某些个特性,在一个机器上安装了多个MySQL的实例,如下截图,有两个实例,一个端口是8000,一个端口是8001。
在使用mysql -uroot -p -P8001连接至端口号为8001的MySQL实例的时候,show
variables like ‘%port%’却显示连接的是8000这个实例,莫名其妙?
笔者一开始也被这个问题吓了一跳,后面才弄清楚是TCP连接和sock连接的问题。

88必发手机网页版 1

 

 

这涉及到一个sock连接的问题,本地(也就是服务器端)连接到MySQL实例的时候,
默认是使用的sock的方式连接的,当没有指定sock文件的情况下,而默认的sock文件是从/tmp/mysql.sock路径下找的。

也就是说,在服务器端连接MySQL实例的时候(未指定主机地址,这里是-h127.0.0.1),
1,默认是以sock的方式连接至MySQL实例的
2,在未指定主机地址的情况下,也即-h参数,是会忽略端口号的参数值,也即-P的值。
比如使用上述的mysql -uroot -p
-P8001,的方式连接至数据库实例,默认是用sock的方式连接(没有指定sock参数
-S,默认/tmp/mysql.sock),且忽略端口号参数,也即-P8001
比如如下截图,-P指定了一个根本不存在的端口号,仍然正常地连接到了一个实例,具体是哪个实例,取决于默认/tmp/mysql.sock指向哪个实例(多实例的情况下)

88必发手机网页版 2

sock的原理也不难理解:sock文件本身就是记录了一个MySQL实例的进程id,mysql命令在本地直接通过sock中的进程id连接至该实例,因为可以忽略端口号。

 

如何在服务器本地连接至具体的实例?

1,连接命名中明确指定sock文件的路径,无须指定端口号( mysql -uroot -p
-S/***/mysql.sock),即便指定端口号,也会被忽略

88必发手机网页版 3 88必发手机网页版 4

 2,指定端口号+主机地址(指定TCP)的方式连接:mysql -uroot -p -P***
-h127.0.0.1

88必发手机网页版 5 88必发手机网页版 6

记下来,一台机器上装了N多个实例,一不小心又掉坑里了……

 

在本地也即服务器端连接至MySQL实例的时候,未指定主机地址的情况下,默认是以sock的方式连接的,而未指定sock的时候,又是按照默认的路径找对应的sock文件
此时会忽略连接命令中的端口号参数,不注意的情况下可能会造成一些凌乱。
仅仅是从服务器端连接的时候会出现类似情况,如果是从客户端(非服务器端)连接的话,肯定会指定IP,一旦指定了IP,对应的端口号就生效了,因此客户端不会发生类似情况。

一直对某些默认的配置有所忌惮,实际上是掩盖了很多问题,弄不好就掉坑理了。