排查 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 ...
随机推荐
- AJAX问题 XMLHttpRequest.status = 0是什么含义
在调用AJAX的时候遇到了XMLHttpRequest. status为0 的情况,http协议里可是没这个状态码的,众所周知,XMLHttpRequest. Status为HTTP请求状态码,一般为 ...
- skip-thought vector 实现Sentence2vector
1.常见文本相似度计算方法 常见的短文本相似度计算方法目前有很多中,但这些短文本相似度计算方法都只是提取了短文本中的浅层特征,而无法提取短文本中的深层特征.目前常见的文本相似度计算方法有: 1)简单共 ...
- 转载:linux同步时间信息
Linux - CentOS7上的时间同步 1. 时区的概念 1.1 时区简介 地球是自西向东自转,东边比西边先看到太阳,东边的时间也比西边的早.东边时刻与西边时刻的差值不仅要以时计,而且还要以分和秒 ...
- Linux中的cat、more、less、head、tail命令
cat [OPTION]... [FILE]... -E:显示行结束符$ -n:对显示出的每一行进行编号 cat后面可以加多个文件,也就是说可以把多个文件连接起来,然后dump到标准输出. 另外cat ...
- 路飞学城-Python开发集训-第5章
面向过程:核心是过程二字,过程是解决问题的步骤,相当于设计一条流水线,是机械式的思维方式 优点:复杂的问题流程化,进而简单化 缺点:可扩展性差 面向对象:核心是对象二字,对象就是特征与技能的结合体. ...
- 四、Oracle 序列、常用函数、多表连接
一.序列定义:是oracle数据库专门用来产生连续且自动增长的数字的对象创建语法:create sequence 序列名(sq_表名) nocache(无缓存) create sequence sq_ ...
- MVC架构在Asp.net中的应用和实现
转载自:http://www.cnblogs.com/baiye7223725/archive/2007/06/07/775390.aspx 摘要:本文主要论述了MVC架构的原理.优缺点以及MVC所能 ...
- Tomcat优化之容易集合经验
Tomcat优化1. 如何加大tomcat连接数在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有: maxThreads : t ...
- NetCore实践篇:分布式监控客户端ZipkinTracer从入门到放弃之路
前言 本文紧接上篇.Net架构篇:思考如何设计一款实用的分布式监控系统?,上篇仅仅是个思考篇,跟本文没有太大的关系.但有思考,结合现有的开源组件,实践起来更易理解起来,所以看本文之前,应该先看下上篇博 ...
- elasticsearch判断索引是否存在
一.判断索引是否存在 指定索引名,判断指定的索引是否存在集群中 /** * 判断指定的索引名是否存在 * @param indexName 索引名 * @return 存在:true; 不存在:fal ...