开发者社区> 问答> 正文

使用Canal同步MySQL数据到Kafka 得到的数据中sql字段无值

	"data": [{
		"id": "13",
		"username": "13",
		"password": "6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9",
		"name": "Canal Manager",
		"roles": "admin",
		"introduction": null,
		"avatar": null,
		"creation_date": "2019-07-14 00:05:28"
	}],
	"database": "canal_manager",
	"es": 1568972368000,
	"id": 11,
	"isDdl": false,
	"mysqlType": {
		"id": "bigint(20)",
		"username": "varchar(31)",
		"password": "varchar(128)",
		"name": "varchar(31)",
		"roles": "varchar(31)",
		"introduction": "varchar(255)",
		"avatar": "varchar(255)",
		"creation_date": "timestamp"
	},
	"old": null,
	"pkNames": ["id"],
	"sql": "",
	"sqlType": {
		"id": -5,
		"username": 12,
		"password": 12,
		"name": 12,
		"roles": 12,
		"introduction": 12,
		"avatar": 12,
		"creation_date": 93
	},
	"table": "canal_user",
	"ts": 1568972369005,
	"type": "DELETE"
}

得到数据中sql字段为空,请问怎么才可以得到源库中执行的sql语句

展开
收起
1374265103578233 2020-03-25 21:30:35 2344 0
1 条回答
写回答
取消 提交回答
  • 这个应该跟你的binlog记录模式有关系,binlog有3中模式,ROW(行模式), Statement(语句模式), Mixed(混合模式)三种模式的用法如下:  ROW(行模式):记录那条数据修改了,注意:记录的是这条记录的全部数据,即使只更新了一个字段,binlog里也会记录所有字段的数据 优点:他不记录sql语句的上下文信息,日志内容会非常清楚的记录每条数据详细的变更细节,即使只更新了一个字段,binlog里也会记录所有字段的数据。 缺点:binlog日志会非常大,mysql主从同步时,会产生大量磁盘IO

    Statement(语句模式): 每一条会修改数据的sql都会记录在binlog中。 优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。 缺点:由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同 的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题。

    Mixed(混合模式):在Mixed模式下,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。

    你有可能模式选的ROW,导致只有数据变化,没有sql语句

    2020-03-29 11:35:54
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第16讲】:Spring Boot 2.0 实战Apache Kafka百万级高并发消息中间件与原理解析 立即下载
MaxCompute技术公开课第四季 之 如何将Kafka数据同步至MaxCompute 立即下载
消息队列kafka介绍 立即下载

相关镜像