如何檢視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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python連線clickhouse資料庫的兩種方式小結Python資料庫
- 117 遠端連線mysql資料庫的幾種方式MySql資料庫
- 兩種檢視錶空間使用情況的方法
- linux系統檢視網路連線情況Linux
- 如何連線MySQL資料庫MySql資料庫
- Mysql兩種情況下更新欄位中部分資料的方法MySql
- 檢視mysql資料庫連線數、併發數相關資訊MySql資料庫
- golang兩種資料庫連線池實現Golang資料庫
- HTTP代理的兩種連線方式HTTP
- MySQL 資料庫定時備份的幾種方式MySql資料庫
- 檢視oracle資料庫的連線數以及使用者檢視Oracle資料庫
- NoClassDefFoundError的兩種情況Error
- 使用RMySQL包來連線MySQL資料庫MySql資料庫
- MYSQL++ 資料庫連線超時的解決辦法LTMySql資料庫
- Wordpress獨立站資料庫連線錯誤的三種解決方式資料庫
- MySQL建立資料庫的兩種方法MySql資料庫
- 連線資料庫-mysql資料庫MySql
- 資料庫篇:mysql事務原理之MVCC檢視+鎖資料庫MySqlMVC
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- DBSync如何連線並同步MySQL資料庫MySql資料庫
- 資料庫連線 系列一:laravel框架如何連線兩個資料庫(不同伺服器)資料庫Laravel框架伺服器
- MySQL資料庫事務各隔離級別加鎖情況--read uncommittMySql資料庫MIT
- MySQL資料庫事務各隔離級別加鎖情況--Repeatable ReaMySql資料庫
- MySQL資料庫-鎖詳解MySql資料庫
- jmap檢視java程式佔用的資料庫連線數Java資料庫
- oracle資料庫透過sqlplus連線的幾種方式介紹Oracle資料庫SQL
- 檢視temp表空間的消耗明細情況
- Python操作MySQL資料庫的5種方式PythonMySql資料庫
- MySql資料庫備份的幾種方式MySql資料庫
- Python連線MySQL資料庫PythonMySql資料庫
- django | 連線mysql資料庫DjangoMySql資料庫
- pycharm連線MySQL資料庫PyCharmMySql資料庫
- [資料庫][SQL]圖解各種連線join資料庫SQL圖解
- 聊聊時序資料庫發展情況資料庫
- HGAdmin無法連線本地資料庫解決方式資料庫
- 檢視SQLServer的LCK資源等待情況SQLServer
- Android連線網路資料庫的方式Android資料庫
- 連線別人的MySql資料庫MySql資料庫