关于MySQL UNIX socket连接

目录

MySQL登录方式:

1、通过tcp/ip网络协议连接数据库(该方式最常用)

2、通过UNIX socket连接

2.1、使用socket登录

2.2、关于socket更多的认识


MySQL登录方式:

1、通过tcp/ip网络协议连接数据库(该方式最常用)

(1)

mysql -u root -P 5508 -h 127.0.0.1 -p

图中可以看到:

Current user:           root@localhost

Connection:             127.0.0.1 via TCP/IP

TCP port:               5508

如此可知,本次连接是root用户通过127.0.0.1:5508进行登录的。

(2)

mysql -u root -P 5508 -h 192.168.199.128 -p

 图中信息:

Current user:           root@opengauss
Connection:             192.168.199.128 via TCP/IP
TCP port:               5508

如此可知,本次连接是root用户通过192.168.199.128:5508进行登录的。


2、通过UNIX socket连接

2.1、使用socket登录

(1)不指定socket位置

mysql -u root -P 5508 -h localhost -p

 图中信息:

Current user:           root@localhost
Connection:             Localhost via UNIX socket
UNIX socket:            /tmp/mysql.sock

如此可知,本次的Connection信息为:Localhost via UNIX socket,而非ip:port的方式登录的。

因此,当使用-h localhost登录MySQL的时候,实际上走的是本地socket,不走网络传输。

即 mysql -u root -P 5508 -h localhost -p 等效 mysql -uroot -ptest,其中socket是走的缺省值/tmp/mysql.sock,因此,如果你修改了MySQL监听的socket的目录或者是手动将/tmp/mysql.sock文件删除,那么此时采用此种方式连接将会失败。

 手动删除了socket文件,那么将无法使用socket连接数据库。

如果需要自定义MySQL监听socket的位置,该怎么做呢?

可以在配置文件my.cnf中添加socket参数来指定监听位置。然后重启数据库,每次重启数据库,MySQL回去更新这个socket文件,所以及时你不小心删除了socket文件,也还可以通过重启数据库的方式来重新生成新的socket。

(2)指定socket位置

这里我在配置文件my.cnf的mysqld_safe模块中添加了socket=/tmp/mysql57/sql.sock参数指定新的socket位置。所以如果要用socket 连接数据库就必须指定socket,否则MySQL就会按缺省值处理,去默认值位置找,导致socket方式登录失败。

mysql -S /tmp/mysql57/sql.sock -uroot -ptest

 图中信息:

Current user:           root@localhost
Connection:             Localhost via UNIX socket
UNIX socket:            /tmp/mysql57/sql.sock

可以看到,本次连接是socket方式,此外UNIX socket的信息为/tmp/mysql57/sql.sock,与我们设置的socket参数一致。

从上面的实践可知,登录MySQL时,如果明确指定的是ip:port登录那么就会走网络,如果指定localhost或者不指定host或者socket,那么就通过socket连接。当然,MySQL还有其他方式登录,暂时没有学习,就先不探讨了。

socket相关介绍可参考此文:Unix Domain Socket与PostgreSQL的local连接 - 简书 (jianshu.com)

MySQL命令行参数示例:

mysql -uroot -ptest -h127.0.0.1 -P5508 -D sys

-u用户名

-p(小写)密码

-P(大写)端口

-h MySQL服务器ip

-D 指定登录的数据库名

 查询当前所在数据库:

select database();

2.2、关于socket更多的认识

在前面介绍了使用socket登录数据库的方法,但是可以看到,在使用socket登录,我们都指定了用户以及密码。那既然都考虑本地socket了,为什么不可以省略用户密码呢,直接使用如:mysql -S /tmp/mysq.sock的方式登录?接下来就实际操作一下。

一种方式是将用户密码写到文件里面,这样在登录的时候则自动使用文件里的用户进行socket连接。(这种方法先就不讨论了)

另一种是修改使用socket登录的账户的登录插件为auth_socket,下面就来学习一下该方式的用法。

(1)操作系统中创建一个用户,该用户名需要与想用socket连接数据库的用户名相同。用户创建后,需要将mysql加入到新用户的环境变量中。

(2)在配置文件中加入参数plugin-load-add=auth_socket.so(如果你是用mysqld程序启动数据库,那就配置到mysqld模块中;如果你是用mysqld_safe启动数据库的,那就配置到mysqld_safe的模块中,我这里就是用的mysqld_safe启动的数据库)

(3)重启数据库服务

(4)登录数据库,然后安装auth_socket插件

use mysql;

INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';

SELECT PLUGIN_NAME, PLUGIN_STATUS
        FROM INFORMATION_SCHEMA.PLUGINS
        WHERE PLUGIN_NAME LIKE '%socket%';

 (5)创建需要用socket登录的用户。(实际上,mysql中的任何用户都可以用socket连接。只是说,不需要指定用户名和密码的情况下才需要这样做。)

#这种是把已有用户的验证方式改成auth_socket

ALTER USER 'root'@'%' IDENTIFIED WITH auth_socket AS 'test';

#这种创建新用户,新用户的验证方式为socket

CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket;

ALTER USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';

(6)新建一个会话窗口,使用新用户登录操作系统。(在已有窗口中使用su 用户名的方式不会默认使用切过去的那个用户去连数据库)

(7)在新的会话窗口中使用socket登录

mysql -S /tmp/mysql.sock

 注意点:

a.验证方式为auth_socket插件的用户,只能使用socket连接本地数据库

b.验证方式为auth_socket插件的用户,不需要密码登录,即使你输入的密码是错误的,也能正常登录(因为它不会去验证密码)

c.mysql中的socket与postgresql的socket不同。在mysql中,用socket连接数据库的用户不是必须存在于操作系统中,只要用户存在于mysql中,那就可以用socket连接(要使用socket免密登录数据库的用户验证方式必须是auth_socket)。在postgresql中,不需要额外配置,使用默认配置即可使用socket连接,但是用于socket连接的用户必须同时存在于操作系统和数据库中。

postgresql数据库关于socket登录的内容:

(37条消息) postgres设置socket连接_小bye菜的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值