大数据组件Maxwell采集Mysql日志报错: server_id is ‘0’. Maxwell will not function without a server_id being set.
文章目录
背景:由于最近项目突然使用实时数据分析,因此架构采集使用maxwell实时采集mysqlbinlog日志并推送到kafka,然后在本地搭建了实时数仓开发环境,mysql使用docker安装,然后采用maxwell进行采集
错误现象
mysql配置文件已更新为开启binlog日志,然后启动maxwell提示这个错误,并且maxwell进程关闭
问题分析和排查
- 根据报错,第一时间反应是mysql的问题,应该是没有找到server,开始排查mysql
- 由于mysql正常,忽略了查看binlog是否开启,我直接在mysql上查询binlog开启情况,果然没开启,
show variables like 'log_%';-- 执行这个sql查看是否开启
- 检查my.cnf配置文件正常,mysql启动正常,但是似乎配置文件中的内容不生效,因为已经配置的开启binlog,实际却并没有开启,排查mysql容器
- 通过以下命令进入到mysql容器中,然后通过查看配置文件映射路径,发现自定义的配置文件存在,并且内容和宿主机一致,如下图
docker exec -it mysql /bin/bash
- 重启mysql容器,并使用客户端连接,通过查询binlog状态,依然不正确,然后考虑是否是客户端的问题,继续排查mysql容器,使用容器内mysql -uroot -p方式登录mysql,报如下错:
mysql: [Warning] World-writable config file ‘/etc/mysql/conf.d/my.cnf’ is ignored.
- 意思是这个文件被忽略掉了,通过查询文档,发现是由于这个文件的执行权限太高导致的(不理解为什么权限越大反而不行),开始对宿主机中对应的配置文件进行降级:
chmod 644 my.cnf
- 重启mysql
docker restart mysql
- 再次查询binlog开启状态,如下图: