zoukankan      html  css  js  c++  java
  • MySQL多实例的环境下,服务器端本地连接到指定实例的问题(sock方式连接)

    涉及到sock连接的问题。

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

    这涉及到一个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指向哪个实例(多实例的情况下)

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

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

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

     

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

     

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

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

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

  • 相关阅读:
    常用函数
    MySQL查询
    mysql的数据类型
    swoole简单demo测试
    linux下搭建lamp环境以及安装swoole扩展
    Linux下NAT模式和桥接模式的网络配置
    PhpStorm+xdebug+postman调试
    windows Apache 环境下配置支持HTTPS的SSL证书
    Yii2 restful api创建,认证授权以及速率控制
    Windows下开启composer镜像服务来安装yii
  • 原文地址:https://www.cnblogs.com/wy123/p/8946443.html
Copyright © 2011-2022 走看看