排查 Maxwell can not find database 并且使用 MySQL binlog 解决相关问题
目前我们在使用 Maxwell 在读线上机器的 binlog 同步我们的离线数据库。
这次错误定位上,首先线要确定问题是发生在生产者 还是队列 还是消费者。经过查看各机器上任务的运行日志,定位到了问题出在了任务的生产者上。
于是我试图去调看生产者上的 Maxwell 日志。之前一直跑得好好的 Maxwell 错误日志里面打出了这样一段内容:
17:53:24,420 INFO OpenReplicator - starting replication at mysql-bin.000055:17870889
17:53:24,944 INFO TaskManager - stopping 3 tasks
17:53:24,944 ERROR TaskManager - cause:
com.zendesk.maxwell.schema.ddl.InvalidSchemaError: Couldn't find database 'remain_db'
at com.zendesk.maxwell.schema.Schema.findDatabaseOrThrow(Schema.java:52) ~[maxwell-1.10.3.jar:1.10.3]
at com.zendesk.maxwell.schema.ddl.TableCreate.resolve(TableCreate.java:34) ~[maxwell-1.10.3.jar:1.10.3]
at com.zendesk.maxwell.schema.ddl.TableCreate.resolve(TableCreate.java:13) ~[maxwell-1.10.3.jar:1.10.3]
可以看到 Maxwell 尝试去读 MySQL binlog.00055:17870889 这条 position 的内容是需要 find 一个叫 remain_db 的东西,由于没有 remain_db 所以这个行为失败了,导致整个同步的生产者卡住了。
排查这个问题我们需要知道一件事情,就是 Maxwell 会主动在被同步的数据库上面建立一个自己的数据库叫 Maxwell like this:

Maxwell 数据库里面会记录各种自己同步的时候会需要用到的信息,当他在同步到主数据库有建库建表相关 dll 的时候,他会使用相关语句在 自己的数据库把这些东西建出来。这里提示的找不到 remain_db 就是因为 Maxwell 自己数据库维护的 databases 表里面没有 remain_db 这个数据库的记录,所以就报错了。
正常维护的时候为啥会有漏掉的 DDL ? 仔细想想如果 binlog 没有出过问题是不应该发生这种情况的。所以如果着么思考的话应该很容易的定位到问题出在了 binlog 日志上面。后来我通过的 MySQL 的配置文件的查看配置的时候发现了问题所在,原来是我们数据库指定只同步了某一个数据库,但是之前有人在数据库 use 某个库的时候还执行了别的库的创建操作,导致这个创建行为的 DDL 被错误的同步到了 user 表的 binlog 上,也导致了这次错误。
发现了错误解决起来就相对容易了,由于错误信息以及 Maxwell 的数据表中都明确记录了 binlog 的中断位置,我只需要前往中断位置跳过相关语句就可以了。
具体的 binlog 查看操作命令可以参考 reference 里面的内容 这里只提几个最实用的,例如我会实用
mysqlbinlog --start-position=205 --stop-position=314 mysql-bin.000001
来指定开始结束位置获取中间的 binlog 信息 我也可以使用 mysqlbinlog mysql-bin.0000001 | grep 'xxxx' 来获取我关注的信息
另外还可以在 mysql shell 里面使用类似语句:
show binlog events from 4 limit 2;
来查看指定 position 位置的以及指定多少条数来查看相关的 binlog 日志。
Reference:
http://soft.dog/2016/06/13/dig-mysql-binlog/#%E5%91%BD%E4%BB%A4%E6%B1%87%E6%80%BB MySQL binlog 查看方法
排查 Maxwell can not find database 并且使用 MySQL binlog 解决相关问题的更多相关文章
- MySQL Binlog 解析工具 Maxwell 详解
maxwell 简介 Maxwell是一个能实时读取MySQL二进制日志binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka,Kinesis.RabbitMQ.Redis.Goog ...
- 一次org.springframework.jdbc.BadSqlGrammarException ### Error querying database Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException问题排查过程
先说结论: 因为在表设计中有一个商品描述字段被设置为desc,但desc是mysql中的关键字,如select id,name,desc,price from product;这条sql语句在查询时的 ...
- Database operations of Mysql
update 表名 set 字段名=replace(同一个字段名,原字符串,新字符串); --修改记录. 一.初始化 # cd /usr/local/mysql # chown -R mysql:m ...
- org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manu
这个是sql 语句 错误 仔细检查 SQL语句是否写错了 org.apache.ibatis.exceptions.PersistenceException: ### Error queryi ...
- org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent succ
数据库 没有开启 连接失败 org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause ...
- Error updating database. Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: 'as3'
执行更新时的出错信息 Whitelabel Error Page This application has no explicit mapping for /error, so you are see ...
- [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up IDEA2019的database插件无法链接mysql的解决办法(08001错误)
[08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up. 点击这里 ...
- windows server2008 IIS下目录 [ application/database.php ] 不可写!解决
windows server2008目录 [ application/database.php ] 不可写!解决 在服务器上找到网站根目录 网站用的thinkphp的框架 属性 -- ...
- go database/sql sql-driver/mysql 操作
这里使用的是github.com/Go-SQL-Driver/MySQL, 所以需要下载一个github.com/Go-SQL-Driver/MySQL 引入 database/sql 和 githu ...
随机推荐
- UVA10384-The Wall Pushers(迭代加深搜索)
Problem UVA10384-The Wall Pushers Accept: 199 Submit: 1546Time Limit: 10000 mSec Problem Descripti ...
- html 传递参数中文乱码 js获取参数乱码
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code HTML传递中文参数时,有乱码导致接收不到正确的数据.JS中可以使用encodeURI ...
- Linux systemctl命令笔记
指令格式 systemctl [command] [unit] 常用指令 1.启动 $ systemctl start 2.停止 $ systemctl stop 3.重启 $ systemctl r ...
- 二.css介绍
一.三种引入样式1.内嵌样式:写在html中 style标签里面2.行内样式:写在具体的标签的style属性3.引入外部样式表:可以将样式规则写在外部文件,再引入到html中 <link typ ...
- 上下文管理协议with open as
我们知道在操作文件对象的时候可以这么写 with open('a.txt') as f: '代码块' 上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明_ ...
- Debian 8.9 搭建wordpress个人博客
想自己搭个博客玩玩,就搭建了此博客,过程可谓艰辛啊! 先在阿里云买了个 轻量应用服务器 1个月10块钱,好贵.... 用 windows sever 下载不了phpstudy,也不知道怎么回事... ...
- Java中的hashCode() 和 equals()的若干问题解答
一.hashCode()的作用 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int ...
- 【转】【强化学习】Deep Q Network(DQN)算法详解
原文地址:https://blog.csdn.net/qq_30615903/article/details/80744083 DQN(Deep Q-Learning)是将深度学习deeplearni ...
- WPF效果(GIS二维篇)
距离上次发东西已经过去了貌似不知多少天了,突然发现自己懒得总结了.这毛病感觉不好,还得写点东西来充实一下自己,不然这样整天浑浑噩噩的过日子,也太平淡了,不管怎么说,起码得给自己的经历留下点东西吧.闲话 ...
- vue 项目中添加阿里巴巴矢量图
1. 选择需要的图标,添加到购物车 2. 打开购物车,添加至我的项目 3. 打开项目列表 - 更多操作 - 编辑项目 修改FontClass/Symbol前缀,自定义一个名称,例如:v-icon-cu ...