起因前几天了解到阿里出的canal可以将MySQL的数据通过伪装成从节点读取binlog的形式将数据进行增量更新,但是我今天在试验的时候失败了,也不知道是为什么,可能是版本的问题
本次操作logstash与es的版本为7.15.1,操作平台为window10,mysql装在虚拟机里
首先来看mysql的表设计,id为唯一主键,剩下的cname和sex均为varchar
然后在es中创建索引
PUT /mytest_user
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"name": {
"type": "text"
},
"sex": {
"type": "text"
}
}
}
}
然后打开logstash的目录
将mysql的驱动放在该目录下,虚拟机里的mysql是5.7所以这里就用5.7的驱动了
然后在bin目录下创建jdbc.conf,名字随便取,只是我参考的教程里用的是这个名字
input {
stdin {
}
jdbc {
jdbc_connection_string => "jdbc:mysql://192.168.10.130:3306/test?characterEncoding=UTF-8&useSSL=false&autoReconnect=true"
jdbc_user => "root"
jdbc_password => "123456"
#指定刚刚放置的mysql的驱动位置
jdbc_driver_library => "E:logstash-7.15.1logstash-corelibjarsmysql-connector-java-5.1.47.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
codec => plain { charset => "UTF-8"}
record_last_run => true
jdbc_default_timezone => "Asia/Shanghai"
#sql自己写,字段与es中一一对应
statement => "SELECt id,cname as name,sex FROM test2"
clean_run => false
schedule => "* * * * *"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
#es地址与端口
hosts => "127.0.0.1:9200"
#索引名
index => "mytest_user"
document_type => "_doc"
#表中可以作为id的字段
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}
然后启动logstash就可以了,命令为
logstash.bat -f jdbc.conf
在bin目录下执行,千万不要忘记这个-f,然后在配置文件里该加引号的地方千万不要忘记,我自己配置的时候就是忘记了
然后你就会看到logstash一直在运行了,反正我是一直在运行
参考:
https://www.cnblogs.com/wang-yaz/p/10232417.html



