需求:客户要求mysql数据库需要记录数据库‘增删改’操作日志,作为数据库审计使用。
方案:使用MariaDB的server_audit插件来实审计功能。
环境:1、MariaDB,版本:10.3.32,主要是用来获取server_audit.so插件。
2、MySQL,版本:5.7.19,使用pxc搭建在k8s集群中。
实现过程:
1、安装MariaDB。
yum install MariaDB-server
2、查找插件
find / -name server_audit.so
3、复制插件到k8s集群服务器中,并复制到pxc的主节点pod中(传统部署的mysql跳过这一步)。
kubectl cp server_audit.so pxc-cluster-0:/
4、进入pod,将server_audit.so插件移动至mysql的plugin目录中并添加权限。
4.1、进入pxc-cluster-0的pod中(传统部署mysql跳过这一步)。
kubectl exec -it pxc-cluster-0 bash
4.2、登录mysql,查询plugin目录地址。
mysql -uroot -p****** mysql> show global variables like 'plugin_dir';
4.3、在pod中,将server_audit.so移动到plugin目录下并修改权限
mv server_audit.so /usr/lib/mysql/plugin/ chmod 777 /usr/lib/mysql/plugin/server_audit.so
5、在数据库中执行命令安装插件。
mysql> install plugin server_audit soname 'server_audit.so';
6、查看插件当前信息
mysql> show variables like "server_audit%";
部分配置参数说明:
server_audit_events :设置定记录事件的类型,可以用逗号分隔的多个值如: set global server_audit_events='CONNCET,QUERY'; 更多参数值见管网。 server_audit_excl_users :设置不记录用户,但connect信息不受该配置影响。 server_audit_file_path : 记录日志文件名称,可以指定目录,默认存储在数据目录中。 server_audit_file_rotate_now OFF : 手动切割日志,将该值设置为"on"时,日志将被切割,切割完成后,该值自动设置回"OFF"。 server_audit_file_rotate_size : 设置日志文件大小,单位为B,1073741824为1G。 server_audit_file_rotations : 设置日志文件数量,如果为0,将不会切割文件。 server_audit_incl_users : 设置记录用户,但connect信息不受该配置影响,优先级高于server_audit_excl_users。 server_audit_logging : 插件开关。
参数详细信息见管网:https://mariadb.com/kb/en/mariadb-audit-plugin-options-and-system-variables/
7、命令开启日志记录(重启失效)。
mysql> set global server_audit_logging=on;
8、添加配置文件配置(永久生效,根据个人需求进行配置)。
server_audit_logging = ON #启动开启日志记录 server_audit = FORCE_PLUS_PERMANENT #防止插件被卸载 server_audit_file_path = server_audit.log #设置记录日志文件名称为server_audit.log server_audit_file_rotate_size = 1073741824 #设置单个日志文件大小最大为1G server_audit_file_rotations = 15 #设置日志文件保留个数最多为15个 server_audit_events = 'QUERY_DML_NO_SELECT' #设置记录时间为QUERY_DML_NO_SELECT
9、部署完成
传统部署的mysql的日志审计,将其他2个节点数据库从4-8步骤全部配置好,有日志记录后就完成了。
k8s部署的集群则在配置完成一个pod后,找到该pod的容器,将容器commit为新的镜像,最后更换k8s集群中mysql使用的镜像,重启即可。