翼度科技»论坛 编程开发 mysql 查看内容

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

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
MySQL总共支持四种连接方式访问数据库,如下表格所示,其中Linux平台环境下,主要有两种连接方式,一种是TCP/IP连接方式,另外一种是socket方式。Name pipe和Share memory是Windows平台下独有的连接方式。
那么,MySQL数据库中,我们能否查看会话具体使用的连接方式呢(例如,使用TCP/IP连接方式)?如果有的话,总共有哪一些方法呢? 下面简单总结一下。
方法1:status命令查看

如下所示,socket方式连接数据库的话,会有UNIX socket这样的信息(红色部分信息)
  1. mysql> status;
  2. --------------
  3. mysql  Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)

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

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

  23. mysql> 
复制代码
如下所示,TCP/IP方式连接数据库的话,会有xxx.xxx.xxx.xxx via TCP/IP以及TCP port这样的信息(红色部分的信息)
  1. mysql> status
  2. --------------
  3. mysql  Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)

  4. Connection id:          10
  5. Current database:
  6. Current user:           test@10.160.2.55
  7. SSL:                    Cipher in use is TLS_AES_256_GCM_SHA384
  8. Current pager:          stdout
  9. Using outfile:          ''
  10. Using delimiter:        ;
  11. Server version:         8.0.33 MySQL Community Server - GPL
  12. Protocol version:       10
  13. Connection:             10.160.2.53 via TCP/IP
  14. Server characterset:    utf8mb4
  15. Db     characterset:    utf8mb4
  16. Client characterset:    utf8mb4
  17. Conn.  characterset:    utf8mb4
  18. TCP port:               3306
  19. Binary data as:         Hexadecimal
  20. Uptime:                 4 hours 8 min 47 sec

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

  23. mysql> 
复制代码
但是status命令有一个很大的弊端,只能查看当前会话的连接方式,不能查看其它会话的连接信息,而我们一般主要是查看其它会话的连接方式。所以,这个命令非常有局限性。
方法2:通过通用查询日志(general log)查看

如下所示,你在通用查询日志(general log)中,你可以看到会话的连接的方式(红色部分信息),但是一般情况下,MySQL数据库并不会开启通用查询日志,所以对于这种方法,我们仅需知道有这么一种方法,但是其实很少使用,就像你知道走路能走到北京去一样,你根本不可能选择这种方法。
  1. 2023-11-09T16:16:13.614201+08:00 11 Query show variables like '%general_log%'
  2. 2023-11-09T16:16:26.614163+08:00 11 Query select user,host from mysql.user
  3. 2023-11-09T16:18:21.214091+08:00 11 Query show variables like '%port%'
  4. 2023-11-09T16:18:42.378325+08:00 12 Connect test@10.160.3.104 on using SSL/TLS
  5. 2023-11-09T16:18:42.378492+08:00 12 Connect Access denied for user 'test'@'10.160.3.119' (using password: YES)
  6. 2023-11-09T16:18:47.802135+08:00 13 Connect test@10.160.3.104 on using SSL/TLS
  7. 2023-11-09T16:18:47.802659+08:00 13 Query select @@version_comment limit 1
  8. 2023-11-09T16:18:57.006583+08:00 11 Quit
  9. 2023-11-09T16:19:28.448989+08:00 14 Connect root@localhost on using Socket
  10. 2023-11-09T16:19:28.449468+08:00 14 Query select @@version_comment limit 1
  11. 2023-11-09T16:19:30.701042+08:00 14 Quit
复制代码
方法3:MySQL的Enterprise Audit log查看

这种方法仅仅适用于MySQL企业版,MySQL社区版无法使用这种方法,所以也有一定的局限性。如下所示:
  1. <AUDIT_RECORD>
  2.   <TIMESTAMP>2023-11-09T10:28:58 UTC</TIMESTAMP>
  3.   <RECORD_ID>16_2023-11-09T10:28:00</RECORD_ID>
  4.   <NAME>Connect</NAME>
  5.   <CONNECTION_ID>8</CONNECTION_ID>
  6.   <STATUS>0</STATUS>
  7.   <STATUS_CODE>0</STATUS_CODE>
  8.   <USER>root</USER>
  9.   <OS_LOGIN/>
  10.   <HOST>localhost</HOST>
  11.   <IP/>
  12.   <COMMAND_CLASS>connect</COMMAND_CLASS>
  13.   <CONNECTION_TYPE>Shared Memory</CONNECTION_TYPE>
  14.   <PRIV_USER>root</PRIV_USER>
  15.   <PROXY_USER/>
  16.   <DB/>
  17. </AUDIT_RECORD>
复制代码
方法4:通过performance_schema.threads查看

performance_schema.threads中有个字段connection_type,它记录了会话的连接方式,所以,我们可以通过这个表查看会话的连接方式。而且这种方法最方便,实用。
CONNECTION_TYPE的取值如下:
  1.     The protocol used to establish the connection, or NULL for background threads. Permitted values are:
  2.     
  3.       TCP/IP (TCP/IP connection established without encryption), 
  4.       SSL/TLS (TCP/IP connection established with encryption), 
  5.       Socket (Unix socket file connection), 
  6.       Named Pipe (Windows named pipe connection), 
  7.       Shared Memory (Windows shared memory connection).
复制代码
查看所有非后台线程的连接方式:
  1. select processlist_id
  2.      , processlist_user
  3.      , processlist_host
  4.      , thread_id
  5.      , connection_type 
  6. from performance_schema.threads
  7. where processlist_user is not null
  8. order by thread_id;
复制代码
--查看某个会话的连接方式:
  1. select processlist_id
  2.      , processlist_user
  3.      , processlist_host
  4.      , thread_id
  5.      , connection_type 
  6. from performance_schema.threads
  7. where processlist_user is not null
  8.   and processlist_id=xxx  --xxx用具体会话ID替换
  9. order by thread_id;
复制代码
扫描上面二维码关注我如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
来源:https://www.cnblogs.com/kerrycode/p/17822194.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具