msyql5.7.41安装审计插件错误

因为数据库需要升级,并且需要开启审计日志,所以记录一下mysql5.7.24升级到5.7.41并且开启审计

mysql从5.7.24升级到5.7.41

1.先查询到已经安装到了哪些包


[root~]# rpm -qa|grep mysql
mysql-community-server-5.7.24-1.el7.x86_64
mysql-community-common-5.7.41-1.el7.x86_64
mysql-community-libs-5.7.24-1.el7.x86_64
mysql-community-devel-5.7.24-1.el7.x86_64
mysql-community-client-5.7.24-1.el7.x86_64

2.根据如下顺序安装(前提是数据必须备份好之后再进行如下操作!!!!

common---->libs---->devel---->client---->server

如果如下提示有依赖问题:

[root~]# rpm -Uvh mysql-community-common-5.7.41-1.el7.x86_64.rpm 
warning: mysql-community-common-5.7.41-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
error: Failed dependencies:
        mysql-community-common(x86-64) = 5.7.24-1.el7 is needed by (installed) mysql-community-server-5.7.24-1.el7.x86_64

那么就加上“--nodeps”命令强行安装

[root~]#  rpm -Uvh --nodeps mysql-community-common-5.7.41-1.el7.x86_64.rpm 
[root~]#  rpm -Uvh mysql-community-libs-5.7.41-1.el7.x86_64.rpm 
[root~]#  rpm -Uvh mysql-community-devel-5.7.41-1.el7.x86_64.rpm 
[root~]#  rpm -Uvh mysql-community-client-5.7.41-1.el7.x86_64.rpm 
[root~]#  rpm -Uvh mysql-community-server-5.7.41-1.el7.x86_64.rpm 
[root~]#  rpm -qa|grep mysql
mysql-community-common-5.7.41-1.el7.x86_64
mysql-community-server-5.7.41-1.el7.x86_64
mysql-community-libs-5.7.41-1.el7.x86_64
mysql-community-client-5.7.41-1.el7.x86_64
mysql-community-devel-5.7.41-1.el7.x86_64

如上所示mysql就已经完成升级,默认就完成了,不需要重启

mysql升级到5.7.41后安装审计插件

        之前我的mysql5.7.24使用的是Mariadb5.5.58中的server_audit.so是正常的这里就不在赘述了,参考的相关文档是:MySQL审计工具Audit Plugin安装使用

        现在我的mysql升级到了5.7.41之后使用这个插件就报错了

1.使用命令的方式执行安装会报如下错误:

INSTALL PLUGIN server_audit SONAME 'server_audit.so';
ERROR 2013 (HY000): Lost connection to MySQL server during query

这种错误感觉完全摸不着头脑,安装插件怎么会丢失连接呢!

2.通过配置文件(my.cnf)加载的方式引入插件也会有如下错误:

plugin-load-add=server_audit.so

将以上内容添加到配置文件中,启动mysql,然后mysql就无法启动了,下面是错误日志

This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
Attempting to collect some information that could help diagnose the problem.
As this is a crash and something is definitely wrong, the information
collection process might fail


key_buffer_size=8388608
read_buffer_size=131072
max_used_connections=0
max_threads=151
thread_count=0
connection_count=0
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 68197 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.

Thread pointer: 0x30e9ce0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 7ffeea4016a0 thread_stack 0x40000
/usr/sbin/mysqld(my_print_stacktrace+0x3b)[0xf5acab]
/usr/sbin/mysqld(handle_fatal_signal+0x486)[0x7e8bd6]
/lib64/libpthread.so.0(+0xf630)[0x7fd5ef24b630]
/usr/lib64/mysql/plugin/server_audit.so(get_db_mysql57+0x2f)[0x7fd5da2071cf]
/usr/lib64/mysql/plugin/server_audit.so(+0xa2db)[0x7fd5da2072db]
/usr/sbin/mysqld(_Z18mysql_audit_notifyP3THD30mysql_event_general_subclass_tPKciS3_m+0x336)[0x7e9f66]
/usr/sbin/mysqld(my_message_sql+0x144)[0x7d9244]
/usr/sbin/mysqld(my_error+0xe0)[0xf550d0]
/usr/sbin/mysqld(_Z16open_table_errorP11TABLE_SHAREiii+0x35c)[0xdb7bbc]
/usr/sbin/mysqld(_Z14open_table_defP3THDP11TABLE_SHAREj+0x39b)[0xdb91fb]
/usr/sbin/mysqld(_Z15get_table_shareP3THDP10TABLE_LISTPKcmjPij+0x16f)[0xcbeb7f]
/usr/sbin/mysqld(_Z10open_tableP3THDP10TABLE_LISTP18Open_table_context+0xa52)[0xcc6332]
/usr/sbin/mysqld(_Z11open_tablesP3THDPP10TABLE_LISTPjjP19Prelocking_strategy+0x5f2)[0xcc7fd2]
/usr/sbin/mysqld(_ZN22PFS_engine_table_share15check_one_tableEP3THD+0x1b6)[0x14aec36]
/usr/sbin/mysqld(_ZN22PFS_engine_table_share16check_all_tablesEP3THD+0x2c)[0x14aedac]
/usr/sbin/mysqld(_Z24check_performance_schemav+0x59)[0x14a9db9]
/usr/sbin/mysqld(_Z11mysqld_mainiPPc+0x23a5)[0x7e6275]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7fd5edc20555]
/usr/sbin/mysqld[0x7d85b4]

Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (0): Connection ID (thread ID): 0
Status: NOT_KILLED

The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash.

通过以上的错误只能看出来是mysql奔溃了,没有什么实质的错误内容,我在平台也请教了大佬,可是大佬说的办法都太复杂了,触及了我的知识盲区😂,下面是我们的对话,希望也可以给你提供点思路

  • 与数据交流的路上作者回复:

    确实是崩溃了,有可能是几点啊
    1.看下资源是否充足,找一下系统日志(syslog)看是否有oom的信息,如果oom看下资源能不能调整下,mysql配置能不能降低点如buffer-pool等使其占有更少的资源
    2.把数据库的ssl关闭试下是否可以正常,也有可能是ssl触发的bug
    如果都不成功可能就是触发已有bug了,我再看看

以上的审计插件的问题,是我无法解决了,也许你认为是我选择的版本问题,导致无法安装,或者安装失败了,我也同样考虑了这个问题。随后我就试了其他的版本得到如下小结:

  当前的msyql5.7.41版本,如果使用Mariadb的10.6版本或者以上会报出不兼容找不到相关内容等错误(实际就是不兼容),如果使用10.6以下的版本官方认为是支持的,但是数据库依然安装不上会奔溃

遇到这种问题我也不知道是不是我的服务器有问题,还是mysql有问题,已经解决不了了!

3.最终解决办法

目前只能更换别的审计插件

经过查找发现aws(亚马逊)有开源审计插件,但是这个插件也是蛋疼,竟然是mysql插件的源码,需要我自己编译成.so插件文件,可是这是c++语言啊!!!这谁会。。。。

只能尝试一下自己编译出来

1.下载mysql源码,我的操作系统是centos在官方没有找到直接的对应下载地址,最后选择的是通用linux版本的源码,下载地址

我这里选择的是不带boost的版本,导致我走了很多弯路,如果你下载的是下面哪个mysql-boost的版本也许会方便很多

2.解压压缩包,将上面提到的亚马逊插件目录复制到mysql解压目录/plugin目录下,这样就可以跟随mysql编译的时候一起编译了(git上有提到怎样同步)

3.进入到解压后的目录里BUILD目录中执行

cmake ..

 4.我在执行到这里的时候就报出来了很多的错误,忘记记录了,主要是关于boost的版本问题,根据错误信息,我下载了最新的版本的 boost_1_82_0,但是我忽略了错误信息,因为错误信息中要求安装的是boost_1_59_0我认为只要是新版本应该没有问题,结果还是报错,错误信息中提示的是mysql源码目录下cmake/boost.cmake 中提示找不到对应的版本,

       1) 我先修改了该文件指定的1_59_0为1_82_0,依然报错找不到,查看boost.cmake源码发现回去找压缩包,原来我下载的包不需要解压安装

      2)然后使用命令再次编译,并且执行压缩包所在的目录

cmake  -DWITH_BOOST=/opt/installPackge/mysqlAudit ..

        这个时候我发现还是有错误,查看源码对应关系发现BOOST_INCLUDE_DIR里面就是boost_1_59_0,所以还是需要boost_1_59_0版本才行,否则无法对应关系

        3)最后需要的是下载boost_1_59_0版本再执行上一步的命令

5.上面解决了问题就可以执行编译命令了

make

也可以使用如下执行线程数编译

make -j8

这样编译出现的问题说是需要c++11以上的版本才可以,我的解决办法参考的是Centos7 离线升级gcc/切换gcc

然后还是报错版本不够,根据查询得到解决办法是在mysql源码目录/CMakeLists.txt文件中添加如下内容

add_compile_options(-std=c++11)

6.基本上就可以编译成功了,编译完成的server_audit.so文件在mysql的源码目录下BUILD/plugin/server_audit下

我已经使用了编译好的文件,可以正常运行在mysql5.7.41上(最后需要提示的是也是我遇到的问题,明明在配置文件中开启日志审计server_audit_logging=on但是就是不生效,原因是没有给日志目录授权给mysql用户需要执行sudo chown -R mysql:mysql /opt/auditlogs/)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值