原文地址:https://lefred.be/content/extending-mysql-using-the-component-infrastructure-part-1/
作者:lefred
发布时间:2022年1月6日
这是 运用基础组件扩展MySQL 系列文章的第一篇。以下列表将随着新文章的发布而更新:
- Extending MySQL using the Component Infrastructure – part 1
- Extending MySQL using the Component Infrastructure – part 2: building the server
- Extending MySQL using the Component Infrastructure – part 3: component services
- Extending MySQL using the Component Infrastructure – part 4: error logging
- Extending MySQL using the Component Infrastructure – part 5: privileges
- Extending MySQL using the Component Infrastructure – part 6: functions
- Extending MySQL using the Component Infrastructure – part 7: messages to users
在MySQL8.0之前,添加MySQL一个特性,编写插件是唯一的方法。现在可以通过编写一个组件来快速扩展MySQL服务。
MySQL基础组件的设计是为了克服插件子系统的一些架构问题。即:
- 插件只能与服务器“对话”,而不能与其他插件“对话”
- 插件可以直接访问服务器符号文件和调用它们(没有封装)
- 插件没有显式的依赖集,因此很难正确地初始化
- 插件需要一台运行的服务器才能运转
本文是关于编写第一个可用组件系列文章的第一篇。
我们的组件
为了演示如何创建组件,但我不想创建常见的“hello world”示例。
最近,我收到一个关于如何处理MySQL病毒的问题。通常情况下,在数据插入到数据库之前就应该扫描。但是,能够对存储在MySQL中的数据进行扫描也许是一个不错的想法。
一般情况下,反病毒程序是扫描文件系统上的文件。但是,当文件被压缩或者被加密时,反病毒程序就不起作用了。
这是EIRCAR TEST病毒存储在同一字段的相同表:
标准InnoDB表:
[root@imac virus]# clamscan t1.ibd
/var/lib/mysql/virus/t1.ibd: {HEX}EICAR.TEST.3.UNOFFICIAL FOUND
----------- SCAN SUMMARY -----------
Known viruses: 8763291
Engine version: 0.103.4
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.11 MB
Data read: 0.11 MB (ratio 1.00:1)
Time: 15.812 sec (0 m 15 s)
Start Date: 2021:12:21 10:44:28
End Date: 2021:12:21 10:44:44
压缩的InnoDB表:
mysql> alter table t1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
[root@imac virus]# clamscan t1.ibd
/var/lib/mysql/virus/t1.ibd: OK
----------- SCAN SUMMARY -----------
Known viruses: 8763291
Engine version: 0.103.4
Scanned directories: 0
Scanned files: 1
Infected files: 0
Data scanned: 0.11 MB
Data read: 0.05 MB (ratio 2.00:1)
Time: 16.338 sec (0 m 16 s)
Start Date: 2021:12:21 11:00:58
End Date: 2021:12:21 11:01:15
加密的InnoDB表:
mysql> alter table t1 encryption='y';
[root@imac virus]# clamscan t1.ibd
/var/lib/mysql/virus/t1.ibd: OK
----------- SCAN SUMMARY -----------
Known viruses: 8763291
Engine version: 0.103.4
Scanned directories: 0
Scanned files: 1
Infected files: 0
Data scanned: 0.22 MB
Data read: 0.11 MB (ratio 2.00:1)
Time: 15.990 sec (0 m 15 s)
Start Date: 2021:12:21 10:53:58
End Date: 2021:12:21 10:54:14
可以看到,扫表文件系统上的.idb文件,当表被压缩或者被加密时,存储在表里同样的病毒,不会被检测到。
因此,我们将通过本系列创建的组建,使用与MySQL安装在同一个服务器上的calmAV库扫描已知病毒数据。
ClamAV®是一种用于各种情况的开源(GPL)反病毒引擎,包括邮件、web扫描以及端点安全。它为用户提供了许多实用工具,包括灵活可伸缩的多线程守护进程、命令行扫描程序和用于自动数据库更新的高级工具。
组件功能:
我们的组件将创建一个用于扫描将数据作为参数发送的函数(类似前面的用户定义函数)来扫描作为参数发送的数据:virus_scan()。
我们的组件还将创建使用新函数所需的新权限:VIRUS_SCAN。
我们的组件还将写信息到MySQL服务器的错误日志中。
我们还将添加一个函数,以便在病毒数据库更新时重新加载clamAV引擎:virus_reload_engine()。
最后,我们的组件将创建两个状态变量,用于存储clamAV加载的漏洞和最终发现的病毒数量:viruscan.clamav_signature & viruscan_virus_found.
开发需求
为了创建组件,我们需要准备MySQL Server的源代码(来自GitGub),clamav-devel 和 clamav-lib。
还需要在安装组件的MySQL服务器上准备clamav-lib。
预告一下,这是我们最后一个组件的概述:

结论
为了准备下一篇文章,您可以开始下载MySQL Server的源代码了。
在下一篇文章,我们将从源代码搭建MySQL开始配置开发环境。
享受MySQL,准备扩展它吧!
关注我
关注 @lefred
通过电子邮件订阅博客
请输入您的电子邮件地址以订阅本博客,并通过电子邮件接收新文章的通知。




