名称:binlogreader
MySQL 5.X
1.修改配置文件
server_id=109
log_bin = /var/lib/mysql/mysql-bin
binlog_format = ROW
expire_logs_days = 30
2.添加权限
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%' IDENTIFIED BY 'canal';
## 四、参数说明
-
jdbcUrl
- 描述:MySQL数据库的jdbc连接字符串,参考文档:Mysql官方文档
- 必选:是
- 默认值:无
-
username
- 描述:数据源的用户名
- 必选:是
- 默认值:无
-
password
- 描述:数据源指定用户名的密码
- 必选:是
- 默认值:无
-
host
- 描述:启动MySQL slave的机器ip
- 必选:是
- 默认值:无
-
port
- 描述:启动MySQL slave的端口
- 必选:否
- 默认值:3306
-
table
- 描述:需要解析的数据表。
- 注意:指定此参数后filter参数将无效
- 必选:否
- 默认值:无
-
filter
- 描述:过滤表名的Perl正则表达式
- 例子:
- 所有表:
_.*_
- canal schema下所有表:
canal\..*
- canal下的以canal打头的表:
canal\.canal.*
- canal schema下的一张表:
canal\.test1
- 所有表:
- 必选:否
- 默认值:无
-
cat
- 描述:需要解析的数据更新类型,包括insert、update、delete三种
- 注意:以英文逗号分割的格式填写。
- 必选:否
- 默认值:无
-
start
- 描述:要读取的binlog文件的开始位置
- 参数:
- journalName:采集起点按文件开始时的文件名称;
- timestamp:采集起点按时间开始时的时间戳;
- 默认值:无
-
pavingData
- 描述:是否将解析出的json数据拍平
- 示例:假设解析的表为tb1,数据库为test,对tb1中的id字段做update操作,id原来的值为1,更新后为2,则pavingData为true时数据格式为:
{
"type":"update",
"schema":"test",
"table":"tb1",
"ts":1231232,
"ingestion":123213,
"before_id":1,
"after_id":2
}
pavingData为false时:
{
"message":{
"type":"update",
"schema":"test",
"table":"tb1",
"ts":1231232,
"ingestion":123213,
"before":{
"id":1
},
"after":{
"id":2
}
}
}
其中”ts“是数据变更时间,ingestion是插件解析这条数据的纳秒时间
{
"job" : {
"content" : [ {
"reader" : {
"parameter" : {
"schema" : "tudou",
"password" : "abc123",
"cat" : "insert,delete,update",
"jdbcUrl" : "jdbc:mysql://kudu3:3306/tudou",
"host" : "kudu3",
"start" : {
},
"table" : [ "binlog" ],
"pavingData" : true,
"username" : "dtstack"
},
"name" : "binlogreader"
},
"writer" : {
"parameter" : {
"print" : true
},
"name" : "streamwriter"
}
} ],
"setting" : {
"restore" : {
"isRestore" : false,
"isStream" : true
},
"errorLimit" : { },
"speed" : {
"bytes" : 0,
"channel" : 1
},
"log" : {
"isLogger": false,
"level" : "trace",
"path" : "",
"pattern":""
}
}
}
}
{
"job" : {
"content" : [ {
"reader" : {
"parameter" : {
"schema" : "tudou",
"password" : "abc123",
"cat" : "insert,delete,update",
"jdbcUrl" : "jdbc:mysql://kudu3:3306/tudou",
"host" : "kudu3",
"start" : {
},
"table" : ["kudu1", "kudu2"],
"filter" : "",
"pavingData" : true,
"username" : "dtstack"
},
"name" : "binlogreader"
},
"writer" : {
"parameter" : {
"print" : true
},
"name" : "streamwriter"
}
} ],
"setting" : {
"restore" : {
"isRestore" : false,
"isStream" : true
},
"errorLimit" : { },
"speed" : {
"bytes" : 0,
"channel" : 1
},
"log" : {
"isLogger": false,
"level" : "trace",
"path" : "",
"pattern":""
}
}
}
}
{
"job" : {
"content" : [ {
"reader" : {
"parameter" : {
"schema" : "tudou",
"password" : "abc123",
"cat" : "insert,delete,update",
"jdbcUrl" : "jdbc:mysql://kudu3:3306/tudou",
"host" : "kudu3",
"start" : {
},
"filter" : "tudou\\.kudu.*",
"pavingData" : true,
"username" : "dtstack"
},
"name" : "binlogreader"
},
"writer" : {
"parameter" : {
"print" : true
},
"name" : "streamwriter"
}
} ],
"setting" : {
"restore" : {
"isRestore" : false,
"isStream" : true
},
"errorLimit" : { },
"speed" : {
"bytes" : 0,
"channel" : 1
},
"log" : {
"isLogger": false,
"level" : "trace",
"path" : "",
"pattern":""
}
}
}
}
{
"job" : {
"content" : [ {
"reader" : {
"parameter" : {
"schema" : "tudou",
"password" : "abc123",
"cat" : "insert,delete,update",
"jdbcUrl" : "jdbc:mysql://kudu3:3306/tudou",
"host" : "kudu3",
"start" : {
"journalName": "mysql-bin.000002",
"timestamp" : 1589353414000
},
"table" : ["kudu"],
"pavingData" : true,
"username" : "dtstack"
},
"name" : "binlogreader"
},
"writer" : {
"parameter" : {
"print" : true
},
"name" : "streamwriter"
}
} ],
"setting" : {
"restore" : {
"isRestore" : false,
"isStream" : true
},
"errorLimit" : { },
"speed" : {
"bytes" : 0,
"channel" : 1
},
"log" : {
"isLogger": false,
"level" : "trace",
"path" : "",
"pattern":""
}
}
}
}
采集mysql binlog 发现采集不到数据
1、查看binlog是否开启
show variables like '%log_bin%' ;
2、binlog_format 是否设置为ROW
注意 binlog_format 必须设置为 ROW, 因为在 STATEMENT 或 MIXED 模式下, Binlog 只会记录和传输 SQL 语句(以减少日志大小),而不包含具体数据,我们也就无法保存了。
3、从节点通过一个专门的账号连接主节点,这个账号需要拥有全局的 REPLICATION 权限。我们可以使用 GRANT 命令创建这样的账号:
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT
ON . TO 'canal'@'%' IDENTIFIED BY 'canal';
参考:https://blog.csdn.net/zjerryj/article/details/77152226