
上文,笔者使用一个简单的测试案例验证审计插件的功能:一文搞懂MySQL开源审计功能

一. 为什么要做性能测试?
1. 从测试的角度看,软件支持的特性和功能并不是唯一的问题,而性能测试的目标不仅仅是发现错误,还有消除性能的瓶颈。
2. 从个人学习的角度看,笔者想通过性能测试更全面地了解一个关键参数的调整、一款软件的选择是否真的能够提升性能。只有测试时考虑全面,上生产时才能更有信心,而不是道听途说,人云亦云。自己动手实践,对知识的理解更加深刻。
二. 等保测评的要求

1) 开启审计,审计事件类型全面。
2) 不影响数据库性能。
3) 审计日志至少保存6个月以上。
硬件配置
DB参数配置
测试要求
测试指标
其他

阿里云RDS 部分售卖配置参考。

2. 参数配置
阿里云RDS有几个参数模板,RDS 数据库将使用高可用_高性能模板。


sysbench oltp.lua --mysql-host=192.168.117.131 --mysql-port=3308 \
--mysql-user=root --mysql-password=123456 \
--oltp-test-mode=complex --mysql-db=test_load \
--oltp-tables-count=10 --oltp-table-size=2000000 \
--threads=200 --time=300 --report-interval=5 prepare
sysbench oltp.lua --mysql-host=192.168.117.131 --mysql-port=3308 \
--mysql-user=root --mysql-password=123456 \
--oltp-test-mode=complex --mysql-db=test_load \
--oltp-tables-count=10 --oltp-table-size=2000000 \
--threads=200 --time=300 --report-interval=5 \
run >> sysbench_`date +%Y%m%d_%H%M%S`.log
sysbench oltp.lua --mysql-host=192.168.117.131 --mysql-port=3308 \
--mysql-user=root --mysql-password=123456 \
--oltp-test-mode=complex --mysql-db=test_load \
--oltp-tables-count=10 --oltp-table-size=2000000 \
--threads=200 --time=300 --report-interval=5 cleanup

性能测试的演示顺序
1. MySQL-Null
2. init-connect + binlog
3. general.log
4. McAfee 插件
5. MariaDB 插件
6. 阿里云 RDS-Null
7. 作图 : Python + Highcharts
Part 01
MySQL-Null

1.2 QPS_TPS_CPU使用率
测试环境在没审计的情况,QPS在2w3左右,TPS在1150左右,Cpu使用率在75%左右,这其实也是测试环境的性能瓶颈。
如果再增加并发量,就真的吃不消了。

Part 02
init-connect + binlog

Part 03
general.log
root@localhost:mysql.sock [(none)]>set global general_log_file = '/mysql/log/3308/general/general_3308.log';
root@localhost:mysql.sock [(none)]>set global general_log=ON;
root@localhost:mysql.sock [(none)]>show variables like 'general%';
+------------------+------------------------------------------+
| Variable_name | Value |
+------------------+------------------------------------------+
| general_log | ON |
| general_log_file | /mysql/log/3308/general/general_3308.log |
+------------------+------------------------------------------+
3.2 general日志
日志信息如图,可读性还是挺不错的,关联 init-connect 审计表 的conn_id字段可以获取会话的登陆信息。但还不如直接使用init-connect的方式。

3.3 QPS_TPS_CPU使用率
开启general.log 后,不仅Cpu使用率下降了,而且支持的事务量也下降了。根据TPS计算,DB性能下降了30%左右,这样谁还敢开启general.log用于审计。

此外,在数据库没有审计的情况下,有些等保测评机构要求开启general.log,这看似为了安全,实际上是一种"饮鸩止渴"的做法。
Part 04
McAfee 插件

4.2 QPS_TPS_CPU使用率
QPS、TPS、CPU使用率均有一定的下降幅度,但是在可接受的范围内。

Part 05
MariaDB 插件

5.2 QPS_TPS_CPU使用率
QPS、TPS、CPU使用率只有小幅度下降。结合比较全面的审计功能,不得不说MariaDB审计插件真是一款良心插件呀

Part 06
阿里云RDS-Null
6.1 性能指标
由于无法登陆RDS的操作系统,只能通过性能趋势观察CPU使用率,从图中可以看出,RDS压测期间Cpu使用率基本上在50%内,所以用Python作图时,Cpu使用率的数据统一定为50%

6.2 QPS_TPS_CPU使用率
在不使用开源插件的情况下,阿里云RDS的QPS和TPS是测试环境的3倍。

Part 07
作图 : Python + Highcharts
Highcharts 是一个用纯 JavaScript 编写的一个图表库, 能够很简单地在在 Web 网站或是 Web 应用程序添加有交互性的图表。
Highcharts支持直线图、曲线图、区域图、柱状图、饼状图等多达 20 种图表,其中很多图表可以集成在同一个图形中形成混合图。
链接
7.2 数据动态图Demo展示
个人比较喜欢漂亮的图表,所以,特意研究了下Highcharts如何使用。


1. 对于社区版MySQL的 审计而言,如果没有旁路软件,那么就使用MariaDB的审计插件(上线后,需要对以上检测项观察一段时间)。但这种方式仅仅只是用于审计,相对于产品服务来说,缺少分析功能。
2. 旁路方式,以阿里云RDS为例,数据库审计服务通过旁路监听模式,支持完全独立于数据库的部署。在不影响数据库日常运行效能的前提下,实现灵活的审计与监控。举例:
1) 具备风险状况、运行状况、性能状况、语句分布的实时监控能力。
2) 分析、追查数据库安全事件等等。
3. 如需要本文作图的源码[Python+Highcharts],请在公众号回复:作图

· Python系列 | 推荐 ·
· 自动化运维系列 | 推荐 ·

原文作者:Python自动化运维;如有侵权,请联系管理员删除。