Mysql8社區版日誌審計插件 過去從Mysql官方自帶general.log日誌的相比其他插件性能是最差的,我們考慮參考行業中較好的插件是MariaDB Audit Plugin, 可惜並不相容mysql 5.7與mysql 8.0以上版本。亞馬遜RDS for MySQL的開發團隊已經folk了 ...
Mysql8社區版日誌審計插件
過去從Mysql官方自帶general.log日誌的相比其他插件性能是最差的,我們考慮參考行業中較好的插件是MariaDB Audit Plugin, 可惜並不相容mysql 5.7與mysql 8.0以上版本。
亞馬遜RDS for MySQL的開發團隊已經folk了MariaDB審計日誌插件,並確保與MySQL 8 API相容,以便在其RDS for MySQL資料庫系列上使用。最近,他們已經在GitHub上公開了這個項目的代碼庫。該插件的源代碼在Github上公開發佈,作為對MySQL和MariaDB用戶社區的一項服務。AWS不為該插件提供任何保證或支持。目標受眾是具有C++技能的軟體開發人員,他們能夠獨立編譯和使用該插件。這個插件不是官方的,與MySQL沒有關係。
國外一個同仁已基於AWS源碼編譯二進位版本 ,分為Mysql 8.0與5.7分支。
Mysql 8.0插件運行機制
配置
1.為了能夠使用審計插件,你需要在MySQL資料庫伺服器的plugin_dir中粘貼server_audit.so文件。
mysql> select @@plugin_dir;
+————————–-----------------+
| @@plugin_dir |
+————————–-----------------+
| /usr/lib64/mysql/plugin/ |
+————————–-----------------+1 row in set (0.00 sec)
2.將server_audit.so粘貼在那裡:
mysql>! ls -lh /usr/lib64/mysql/plugin/ total 8.5M -rw-r–r–. 1 root root 597K Jul 26 18:47 server_audit.so
...
啟用插件
mysql>set global server_audit_logging = ON;
Query OK, 0 rows affected (0.00 sec)
啟用查詢事件
mysql> set global server_audit_events = ‘QUERY’;
Query OK, 0 rows affected (0.00 sec)
審計日誌文件
mysql> ! ls -lh /var/lib/mysql
total 188M
-rw-r-----. 1 mysql mysql 1.7K Jul 26 18:50 server_audit.log
Server_audit.log
日誌文件表示為 UTF-8 格式的逗號分隔變數 (CSV) 文件。日誌文件條目不按先後順序排列。要對條目進行排序,請使用時間戳值。要查看最新事件,您可能需要查看所有日誌文件。
mysql> ! cat /var/lib/mysql/server_audit.log
20220726 18:48:35,localhost.localdomain,root,localhost,10,3,QUERY,,’set global server_audit_logging = ON’,0,,
20220726 18:48:56,localhost.localdomain,root,localhost,10,4,QUERY,,’set global server_audit_events = ’QUERY”,0,,
20220726 18:49:02,localhost.localdomain,root,localhost,10,5,QUERY,,’create database test’,0,,
20220726 18:49:04,localhost.localdomain,root,localhost,10,6,QUERY,,’SELECT DATABASE()’,0,,
20220726 18:49:04,localhost.localdomain,root,localhost,10,8,QUERY,,’show databases’,0,,
20220726 18:49:04,localhost.localdomain,root,localhost,10,9,QUERY,,’show tables’,0,,
20220726 18:49:32,localhost.localdomain,root,localhost,10,10,QUERY,,’create table example_table (id int unsigned primary key auto_increment)’,0,,
20220726 18:49:43,localhost.localdomain,root,localhost,10,11,QUERY,,’insert into example_table(null)’,1064,,
20220726 18:49:48,localhost.localdomain,root,localhost,10,12,QUERY,,’insert into sidnei values (null)’,0,,
20220726 18:49:57,localhost.localdomain,root,localhost,10,18,QUERY,,’select * from example_table’,0,,
日誌格式說明:
要獲得關於插件配置的更多細節,請閱讀AWS RDS插件文檔。
容器版Mysql
將提前準備的server_audit.so 文件放到 伺服器目錄
並且將此文件放到容器內部
docker cp ./server_audit.so mysql:/tmp/
安裝
MariaDB Audit Plugin 插件
進入mysql容器
docker exec -it mysql /bin/bash
mysql -u root -p
密碼
查看插件安裝目錄
show variables like '%plugin%';
Plugin_dir 就是插件的目錄 一般為/usr/lib/mysql/plugin
將剛纔tmp目錄下的so文件放到對應插件目錄
mv /tmp/server_audit.so /usr/lib/mysql/plugin/
執行安裝命令
install plugin server_audit SONAME 'server_audit.so'
查看插件配置信息
show variables like '%audit%'
預設審計日誌是關閉狀態
開啟日誌記錄
set global server_audit_logging=on
可以配置日誌目錄
預設是
data目錄的server_audit.log文件
set global server_audit_file_path=’/var/log/mysql/server_audit.log’
設置日誌文件大小和個數
set global server_audit_file_rotate_size = 100000000
示例
sysbench性能測試
cpu型號 : Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz
cpu數量 :2核 (4個)
記憶體 :free -h
4g
硬碟:機械硬碟
MySQL版本 mysql> mysql version;
8.0.27
未啟用插件
SQL statistics:
queries performed:
read: 459116
write: 131176
other: 65588
total: 655880
transactions: 32794 (98.26 per sec.)
queries: 655880 (1965.26 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 333.7351s
total number of events: 32794
Latency (ms):
min: 28.21
avg: 1998.06
max: 77351.35
95th percentile: 6960.17
sum: 65524533.03
Threads fairness:
events (avg/stddev): 163.9700/14.71
execution time (avg/stddev): 327.6227/11.91
開啟插件
SQL statistics:
queries performed:
read: 238182
write: 68052
other: 34026
total: 340260
transactions: 17013 (53.20 per sec.)
queries: 340260 (1064.04 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 319.7790s
total number of events: 17013
Latency (ms):
min: 40.41
avg: 3755.89
max: 103907.93
95th percentile: 10917.50
sum: 63898979.23
Threads fairness:
events (avg/stddev): 85.0650/9.14
execution time (avg/stddev): 319.4949/0.02
結論
使用審計插件必然有MySQL SERVER性能損失,這是一個安全與性能的權衡點。 如果你使用的是MySQL 8社區版,並且需要啟用審計日誌,來自AWS開發團隊的插件可以是一個不錯的選擇。然而,你應該記住,這個插件沒有AWS的支持--他們在README.md中說的很清楚。在資料庫伺服器不是那麼關鍵的情況下,它可能是有用的。如果一個非常重要的資料庫伺服器在生產中發生了一些錯誤,修複錯誤可能需要時間。如果你需要使用這個功能,我建議遷移到MariaDB伺服器,因為你可以在MariaDB社區的支持下使用一個非常成熟的插件。還有一些插件參考。
其他參考
- MariaDB Audit Plugin in the MariaDB documentation
- MariaDB Audit Plugin support in Amazon RDS documentation
今天先到這兒,希望對雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 項目管理, 產品管管,團隊建設 有參考作用 , 您可能感興趣的文章:
領導人怎樣帶領好團隊
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
視頻直播平臺的系統架構演化
微服務與Docker介紹
Docker與CI持續集成/CD
互聯網電商購物車架構演變案例
互聯網業務場景下消息隊列架構
互聯網高效研發團隊管理演進之一
消息系統架構設計演進
互聯網電商搜索架構演化之一
企業信息化與軟體工程的迷思
企業項目化管理介紹
軟體項目成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共用
高效能的團隊建設
項目管理溝通計劃
構建高效的研發與自動化運維
某大型電商雲平臺實踐
互聯網資料庫架構設計思路
IT基礎架構規劃方案一(網路系統規劃)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之採購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之性能實時度量系統演變
如有想瞭解更多軟體設計與架構, 系統IT,企業信息化, 團隊管理 資訊,請關註我的微信訂閱號:
作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
該文章也同時發佈在我的獨立博客中-Petter Liu Blog。