通过如果mysql要想记录数据中所有的操作,则必须要开启gener_log日志,但是由于该日志开启后会严重影响性能,所以,这里我们可以使用审计插件(audit),不过由于mysql社区版本没有这个插件,该插件被放到了mysql的企业版本中,因此对于对于mysql社区版就不能使用了。
不过天无绝人之路,mysql的兄弟maridb却对于这个插件是开源的,因此,我们可以将mariab aduit plugin安装到mysql中进行使用
安装地址:https://mariadb.com/kb/en/mariadb-audit-plugin-installation/
这里需要说明一点:目前maridb已经不再单独地将该插件拿出来让下载,因此我们要想下载它就必须要下载maridb数据库,然后再将它提取出来安装到mysql中
maridb下载地址:https://downloads.mariadb.org/mariadb/+releases/
下载后将插件:server_audit.so文件放在mysql的安装插件的目录下,如果不知道自己插件目录,可以执行show variables like '%plug%';命令查看安装路径
当移到完成后再进行安装插件:
安装命令:
INSTALL PLUGIN server_audit SONAME 'server_audit.so';
这里也可以直接在配置文件中添加,然后重启mysql服务器即可。
[mysqld]
plugin-load=server_audit=server_audit.so
server_audit=FORCE_PLUS_PERMANENT
这里是整个安装流程(其中还有一些报错信息):http://www.hellojava.com/a/91290.html
配置:
root@localhost:(none) 23:01:59>show variables like '%server_audit%'; +-------------------------------+-----------------------+ | Variable_name | Value | +-------------------------------+-----------------------+ | server_audit_events | | | server_audit_excl_users | | | server_audit_file_path | server_audit.log | | server_audit_file_rotate_now | OFF | | server_audit_file_rotate_size | 1000000 | | server_audit_file_rotations | 9 | | server_audit_incl_users | | | server_audit_loc_info | | | server_audit_logging | OFF | | server_audit_mode | 1 | | server_audit_output_type | file | | server_audit_query_log_limit | 1024 | | server_audit_syslog_facility | LOG_USER | | server_audit_syslog_ident | mysql-server_auditing | | server_audit_syslog_info | | | server_audit_syslog_priority | LOG_INFO | +-------------------------------+-----------------------+
以上是默认值
参数说明:
server_audit_output_type:指定日志输出类型,可为SYSLOG或FILE
server_audit_logging:启动或关闭审计
server_audit_events:指定记录事件的类型,可以用逗号分隔的多个值(connect,query,table),如果开启了查询缓存(query cache),查询直接从查询缓存返回数据,将没有table记录
server_audit_file_path:如server_audit_output_type为FILE,使用该变量设置存储日志的文件,可以指定目录,默认存放在数据目录的server_audit.log文件中
server_audit_file_rotate_size:限制日志文件的大小
server_audit_file_rotations:指定日志文件的数量,如果为0日志将从不轮转
server_audit_file_rotate_now:强制日志文件轮转
server_audit_incl_users:指定哪些用户的活动将记录,connect将不受此变量影响,该变量比server_audit_excl_users优先级高
server_audit_syslog_facility:默认为LOG_USER,指定facility
server_audit_syslog_ident:设置ident,作为每个syslog记录的一部分
server_audit_syslog_info:指定的info字符串将添加到syslog记录
server_audit_syslog_priority:定义记录日志的syslogd priority
server_audit_excl_users:该列表的用户行为将不记录,connect将不受该设置影响
server_audit_mode:标识版本,用于开发测试
示例:在mysql的配置文件添加:
#audit server_audit_events='CONNECT,QUERY,TABLE' // server_audit_logging=on server_audit_file_path =/opt/logs/mysql/auditlogs/ ##这个可以自己定义 server_audit_file_rotate_size=200000000 server_audit_file_rotations=200