如何檢視MySQL資料庫一段時間內的連線情況?兩種方式來解鎖~
後臺有DBA小夥伴問到一個問題:
如何檢視 MySQL 資料庫一段時間內的連線情況呢?
據小編了解,檢視方式已知至少有 兩種方式可以實現,讓我們一起往下解鎖吧~
方式一:開啟 general_log 就可以觀察到
-
開啟命令
mysql> set global general_log=ON;
-
執行一些操作
[root@mgr2 ~]# mysql -uGreatSQL -pGreatSQL -h192.168.6.217 -P3306 mysql> use test; mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | book | | student | | t1 | +----------------+ 3 rows in set (0.01 sec) mysql> select * from t1; +------+--------+ | id | name | +------+--------+ | 1 | 哈哈 | | 2 | 你好 | | 3 | 呵呵 | +------+--------+ 5 rows in set (0.00 sec) mysql> delete from test.t1 where id=4; Query OK, 1 row affected (0.02 sec)
-
檢視general_log日誌資訊,已經完整記錄到了。
2022-01-20T21:46:17.073491-05:00 32 Connect GreatSQL@192.168.6.216 on using TCP/IP 2022-01-20T21:46:17.074048-05:00 32 Query select @@version_comment limit 1 2022-01-20T21:46:20.217080-05:00 32 Query SELECT DATABASE() 2022-01-20T21:46:20.217657-05:00 32 Init DB test 2022-01-20T21:46:20.218960-05:00 32 Query show databases 2022-01-20T21:46:20.220347-05:00 32 Query show tables 2022-01-20T21:46:20.222050-05:00 32 Field List book 2022-01-20T21:46:20.222644-05:00 32 Field List student 2022-01-20T21:46:20.223106-05:00 32 Field List t1 2022-01-20T21:46:22.856100-05:00 32 Query show tables 2022-01-20T21:46:31.156616-05:00 32 Query select * from t1 2022-01-20T21:46:43.136448-05:00 32 Query delete from test.t1 where id=4
方式二:抓包
-
這裡採用 MySQL Sniffer 進行抓包。
1.MySQL Sniffer 介紹
-
MySQL Sniffer :是一個基於 MySQL 協議的抓包工具,實時抓取 MySQL Server 端的請求,並格式化輸出。
-
輸出內容:包括訪問時間、訪問使用者、來源 IP、訪問Database、命令耗時、返回資料行數、執行語句等。有批量抓取多個埠,後臺執行,日誌分割等多種使用方式,操作便捷,輸出友好。
-
開源出品:奇虎360 github
-
github地址:
2.安裝依賴包
yum install gcc gcc-c++ cmake libpcap-devel glib2-devel libnet-devel -y
3.安裝命令
git clone cd mysql-sniffer mkdir proj cd proj cmake ../ make
編譯過程中出現一些問題,參考 https://www.cnblogs.com/kerrycode/p/14948381.html 解決,感謝!
4.檢視幫助
-
安裝後工具在 bin 目錄下。
[root@mgr3 bin]# ./mysql-sniffer -help Usage ./mysql-sniffer [-d] -i eth0 -p 3306,3307,3308 -l /var/log/mysql-sniffer/ -e stderr [-d] -i eth0 -r 3000-4000 -d daemon mode. -s how often to split the log file(minute, eg. 1440). if less than 0, split log everyday -i interface. Default to eth0 -p port, default to 3306. Multiple ports should be splited by ','. eg. 3306,3307 this option has no effect when -f is set. -r port range, Don't use -r and -p at the same time -l query log DIRECTORY. Make sure that the directory is accessible. Default to stdout. -e error log FILENAME or 'stderr'. if set to /dev/null, runtime error will not be recorded -f filename. use pcap file instead capturing the network interface -w white list. dont capture the port. Multiple ports should be splited by ','. -t truncation length. truncate long query if it's longer than specified length. Less than 0 means no truncation -n keeping tcp stream count, if not set, default is 65536. if active tcp count is larger than the specified count, mysql-sniffer will remove the oldest one
5.測試
a.實時抓取某埠資訊並列印到螢幕
輸出格式為:時間,訪問使用者,來源 IP,訪問 Database,命令耗時,返回資料行數,執行語句。
-
控制檯監聽
-
執行一些操作
mysql> use test; Database changed mysql> create table t1 (id int(11) not null auto_increment, name varchar(64), primary key(id)); Query OK, 0 rows affected (0.06 sec) mysql> insert into t1 values (1,'小明'),(2,'小陳'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> delete from t1 where id=1; Query OK, 1 row affected (0.00 sec) mysql> select * from t1; +----+--------+ | id | name | +----+--------+ | 2 | 小陳 | +----+--------+ 1 row in set (0.00 sec)
-
控制檯輸出
2022-01-21 14:37:09 GreatSQL 192.168.6.216 NULL 0ms 1 select @@version_comment limit 1 2022-01-21 14:37:31 GreatSQL 192.168.6.216 NULL 0ms 2 show databases 2022-01-21 14:37:37 GreatSQL 192.168.6.216 NULL 0ms 1 SELECT DATABASE() 2022-01-21 14:37:37 GreatSQL 192.168.6.216 test 0ms 0 use test 2022-01-21 14:37:37 GreatSQL 192.168.6.216 test 0ms 2 show databases 2022-01-21 14:37:37 GreatSQL 192.168.6.216 test 11ms 0 show tables 2022-01-21 14:41:58 GreatSQL 192.168.6.216 test 60ms 0 create table t1 (id int(11) not null auto_increment, name varchar(64), primary key(id)) 2022-01-21 14:42:40 GreatSQL 192.168.6.216 test 0ms 2 insert into t1 values (1,'小明'),(2,'小陳') 2022-01-21 14:42:54 GreatSQL 192.168.6.216 test 0ms 1 delete from t1 where id=1 2022-01-21 14:43:04 GreatSQL 192.168.6.216 test 0ms 1 select * from t1
-
目前看有正常抓取到資訊
b、可以把抓包的資料儲存到檔案
-
檔名稱就是埠號,如果檔案沒內容,可以改成MySQL使用者許可權組試一下
./mysql-sniffer -i eth1 -p 33061 -l ./
[root@mgr3 bin]# more 33061.log 2022-01-21 15:00:11 NULL 192.168.6.216 test 0ms 0 use test 2022-01-21 15:00:11 NULL 192.168.6.216 test 0ms 1 SELECT DATABASE()
-
其他功能就不一一測試了
-
特別注意,以上是在 MySQL5.6 版本測試獲取的,在 8.0 版本中可能由於MySQL協議變更導致抓不到資料包,同時該工具存在一定的丟包情況。
Enjoy GreatSQL :)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69997641/viewspace-2855281/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 連線MySQL資料庫的兩種方式介紹MySql資料庫
- 檢視mysql資料庫空間使用情況MySql資料庫
- Oracle資料庫伺服器的兩種連線方式Oracle資料庫伺服器
- python連線clickhouse資料庫的兩種方式小結Python資料庫
- 【MySQL】鎖——檢視當前資料庫鎖請求的三種方法MySql資料庫
- 使用shell指令碼檢測資料庫連線訪問情況指令碼資料庫
- 檢視PG資料庫的許可權情況資料庫
- 117 遠端連線mysql資料庫的幾種方式MySql資料庫
- Oracle資料庫中表的四種連線方式講解Oracle資料庫
- mybatis連線資料庫的幾種方式MyBatis資料庫
- 檢視MySQL鎖定情況MySql
- MySQL 簡潔連線資料庫方式MySql資料庫
- 外連線轉換為內連線的情況
- 如何連線MySQL資料庫MySql資料庫
- Mysql兩種情況下更新欄位中部分資料的方法MySql
- linux系統檢視網路連線情況Linux
- MySQL必須flush privileges的兩種情況MySql
- 檢視mysql連線數 sql語句執行時間MySql
- 檢視系統中各種等待時間佔用的資料庫時間比例資料庫
- 使用shell指令碼檢視資料庫負載情況指令碼資料庫負載
- Java連線oracle資料庫的兩種常用方法JavaOracle資料庫
- HTTP代理的兩種連線方式HTTP
- 檢視過去的session鎖情況指令碼Session指令碼
- 如何實時檢視mysql當前連線數? 薦MySql
- NoClassDefFoundError的兩種情況Error
- 三種檢視MySQL資料庫版本的方法MySql資料庫
- php連線mysql資料庫的幾種方法PHPMySql資料庫
- Spring連線資料庫的幾種常用的方式Spring資料庫
- RAC時間同步的兩種方式
- 檢視mysql資料庫連線數、併發數相關資訊MySql資料庫
- 解決資料庫連線池連線mysql時,每隔8小時mysql自動斷開所有連線的問題資料庫MySql
- 兩種啟動資料庫的方式資料庫
- MySQL 資料庫定時備份的幾種方式MySql資料庫
- 檢視oracle資料庫的連線數以及使用者檢視Oracle資料庫
- 使用RMySQL包來連線MySQL資料庫MySql資料庫
- 資料庫連線的方法種種資料庫
- MyGeneration連線MySQL資料庫解決MySql資料庫
- Mysql 可能鎖表的情況MySql