首页 > 数据库 >如何查看MySQL会话连接方式?

如何查看MySQL会话连接方式?

时间:2023-11-29 11:31:52浏览次数:44  
标签:11 00 查看 09T16 08 MySQL 会话 2023

MySQL总共支持四种连接方式访问数据库,如下表格所示,其中Linux平台环境下,主要有两种连接方式,一种是TCP/IP连接方式,另外一种是socket方式。Name pipe和Share memory是Windows平台下独有的连接方式。

如何查看MySQL会话连接方式?_TCP

那么,MySQL数据库中,我们能否查看会话具体使用的连接方式呢(例如,使用TCP/IP连接方式)?如果有的话,总共有哪一些方法呢? 下面简单总结一下。

方法1:status命令查看

如下所示,socket方式连接数据库的话,会有UNIX socket这样的信息(红色部分信息)

mysql> status;
--------------
mysql  Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)

Connection id:          9
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.0.33 MySQL Community Server - GPL
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /tmp/mysql.sock
Binary data as:         Hexadecimal
Uptime:                 4 hours 8 min 7 sec

Threads: 3  Questions: 45  Slow queries: 9  Opens: 153  Flush tables: 3  Open tables: 72  Queries per second avg: 0.003
--------------

mysql>

如下所示,TCP/IP方式连接数据库的话,会有xxx.xxx.xxx.xxx via TCP/IP以及TCP port这样的信息(红色部分的信息)

mysql> status
--------------
mysql  Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)

Connection id:          10
Current database:
Current user:           [email protected]
SSL:                    Cipher in use is TLS_AES_256_GCM_SHA384
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.0.33 MySQL Community Server - GPL
Protocol version:       10
Connection:             10.160.2.53 via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
TCP port:               3306
Binary data as:         Hexadecimal
Uptime:                 4 hours 8 min 47 sec

Threads: 3  Questions: 48  Slow queries: 9  Opens: 153  Flush tables: 3  Open tables: 72  Queries per second avg: 0.003
--------------

mysql>

但是status命令有一个很大的弊端,只能查看当前会话的连接方式,不能查看其它会话的连接信息,而我们一般主要是查看其它会话的连接方式。所以,这个命令非常有局限性。

方法2:通过通用查询日志(general log)查看

如下所示,你在通用查询日志(general log)中,你可以看到会话的连接的方式(红色部分信息),但是一般情况下,MySQL数据库并不会开启通用查询日志,所以对于这种 方法,我们仅需知道有这么一种方法,但是其实很少使用,就像你知道走路能走到北京去一样,你根本不可能选择这种方法。

2023-11-09T16:16:13.614201+08:00 11 Query show variables like '%general_log%'
2023-11-09T16:16:26.614163+08:00 11 Query select user,host from mysql.user
2023-11-09T16:18:21.214091+08:00 11 Query show variables like '%port%'
2023-11-09T16:18:42.378325+08:00 12 Connect [email protected] on using SSL/TLS
2023-11-09T16:18:42.378492+08:00 12 Connect Access denied for user 'test'@'10.160.3.119' (using password: YES)
2023-11-09T16:18:47.802135+08:00 13 Connect [email protected] on using SSL/TLS
2023-11-09T16:18:47.802659+08:00 13 Query select @@version_comment limit 1
2023-11-09T16:18:57.006583+08:00 11 Quit
2023-11-09T16:19:28.448989+08:00 14 Connect root@localhost on using Socket
2023-11-09T16:19:28.449468+08:00 14 Query select @@version_comment limit 1
2023-11-09T16:19:30.701042+08:00 14 Quit

方法3:MySQL的Enterprise Audit log查看

这种方法仅仅适用于MySQL企业版,MySQL社区版无法使用这种方法,所以也有一定的局限性。如下所示:

<AUDIT_RECORD>
  <TIMESTAMP>2023-11-09T10:28:58 UTC</TIMESTAMP>
  <RECORD_ID>16_2023-11-09T10:28:00</RECORD_ID>
  <NAME>Connect</NAME>
  <CONNECTION_ID>8</CONNECTION_ID>
  <STATUS>0</STATUS>
  <STATUS_CODE>0</STATUS_CODE>
  <USER>root</USER>
  <OS_LOGIN/>
  <HOST>localhost</HOST>
  <IP/>
  <COMMAND_CLASS>connect</COMMAND_CLASS>
  <CONNECTION_TYPE>Shared Memory</CONNECTION_TYPE>
  <PRIV_USER>root</PRIV_USER>
  <PROXY_USER/>
  <DB/>
</AUDIT_RECORD>

方法4:通过performance_schema.threads查看

performance_schema.threads中有个字段connection_type,它记录了会话的连接方式,所以,我们可以通过这个表查看会话的连接方式。而且这种方法最方便,实用。

CONNECTION_TYPE的取值如下:

The protocol used to establish the connection, or NULL for background threads. Permitted values are:
    
      TCP/IP (TCP/IP connection established without encryption), 
      SSL/TLS (TCP/IP connection established with encryption), 
      Socket (Unix socket file connection), 
      Named Pipe (Windows named pipe connection), 
      Shared Memory (Windows shared memory connection).

查看所有非后台线程的连接方式:

select processlist_id
     , processlist_user
     , processlist_host
     , thread_id
     , connection_type 
from performance_schema.threads
where processlist_user is not null
order by thread_id;

--查看某个会话的连接方式:

select processlist_id
     , processlist_user
     , processlist_host
     , thread_id
     , connection_type 
from performance_schema.threads
where processlist_user is not null
  and processlist_id=xxx  --xxx用具体会话ID替换
order by thread_id;

标签:11,00,查看,09T16,08,MySQL,会话,2023
From: https://blog.51cto.com/u_15338523/8613089

相关文章

  • [翻译]——How the MySQL Optimizer Calculates the Cost of a Query (Doc ID 1327497
    本文是对这篇文章HowtheMySQLOptimizerCalculatestheCostofaQuery(DocID1327497.1)[1]的翻译,翻译如有不当的地方,敬请谅解,请尊重原创和翻译劳动成果,转载的时候请注明出处。谢谢!适用于:MySQL4.0及后续更高的版本本文档中的内容适用于任何平台。目标了解MySQL优化器如......
  • linux查看进程的基本方法
    要在Linux中查看进程,可以使用以下基本方法:1. **top命令:** 在终端中输入`top`,可以查看运行中的进程列表,以及它们的资源使用情况,如CPU和内存。2. **ps命令:** 使用`ps`命令可以列出当前用户的进程。例如,`ps aux`将显示所有用户的详细进程列表。3. **htop命令:** 这是top命令的......
  • 如何查看数据库正在执行的 SQL ?
    在数据库使用中,我们经常需要进行性能优化、故障排查等工作,便捷的查看数据库正在执行的SQL,则可以大大简化这些工作。在MySQL中,可以通过SHOWPROCESSLIST或SHOWFULLPROCESSLIST获得当前正在连接的线程,也可以看到正在运行的SQL。最近,NineData发布了查看会话功能,可以帮助开发者、DBA......
  • linux设备的识别和查看
    (1)、设备的识别设备名称 显示方式SATA/SAS/USB(硬盘) /dev/sda,/dev/sdb###s=SATA.d=DISK,a=第几块硬盘IDE(硬盘) /dev/hd0,/dev/hd1##h=hardVIRTIO-BLOCK(硬盘) /dev/vda,/dev/vdb##v=virtioM2(SSD) /dev/nvme0,/dev/nvme1##nvme=m2光驱 /dev/cdrom,/dev/sr0,/dev/sr1查看设备的......
  • linux启动mysql数据库,报错mysql: error while loading shared libraries: libtinfo.so
    如下 原因: 解决方案:1、在/usr/lib64目录里面找一个差不多名称版本的文件进行链接#软连接出一个新的文件sudoln-s/usr/lib64/libtinfo.so.6.1/usr/lib64/libtinfo.so.5若本服务器没有相近版本的文件2、从其他服务器下载一个libtinfo.so.5拷贝进去即可,或者下载相近版本......
  • linux安装MySQL数据库初始化报错
    在使用如下初始化命令进行数据库初始化时报错,./bin/mysqld--user=mysql--basedir=/usr/local/mysql/mysql/--datadir=/usr/local/mysql/mysql/data/--initialize--lower-case-table-names=1; 权限不足导致,修改命令为:./bin/mysqld--user=root--basedir=/usr/local/mysql/m......
  • mysql 统计 一行数据多个列 中各种值的 数量
    表数据 统计每个name的指标中红/黄/绿/灰灯数量.  分组使用sum()函数 selectname,zhibiao1as'指标1',zhibiao2as'指标2',zhibiao3as'指标3',sum(casewhenzhibiao1='红'then1else0end)+sum(casewhenzhibiao2='红'......
  • mysql语句查询最大值并获取
    publicintexadd(examexam)throwsException{Connectionconnection=DBUtil.dbCon();Stringsql="selectmax(eid)eidfromjuan";PreparedStatementpstmt=null;......
  • mysql连接和导出删掉存在的表
    importpandasaspdimportnumpyasnpimportpymysql%%打开数据库连接conn=pymysql.connect(host='地址',user="用户",passwd="密码",db="数据库")sql1=''''''sql_data1=pd.read_sql_query(sql1......
  • 大数据实验(Mysql、hbase、redis、MongoDBjava客户端连接)
    1.MySQL启动:虚拟机输入mysql-uroot-p输入密码:hadoop(黑马的mysql密码是hadoop)pom.xml需要引入mysql<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></proper......