ElasticSearch服务搭建好后,我们需要将数据库里需要进行搜索的数据同步到ElasticSearch
方案有
- 官方提供了Kibana可以安装后,在浏览器打开配置的地址以命令行的形式对index和数据进行增删改查操作
- 采用LogStash可以利用JDBC进行数据的输入和输出
- canal 主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费
业务应用中如果需要进行增量数据处理,可以采用LogStash和canal,canal是基于MySQL的Binlog日志来处理的,canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议 MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal ),canal 解析 binary log 对象(原始为 byte 流)
安装LogStash 直接下载下来解压然后进入bin目录执行就可以运行起来(如果下载因为网络问题很慢可以从这里(链接: https://pan.baidu.com/s/1jRuLoSZiz6ZEUepv9jY-_g 提取码: 7usm)下载然后上传到相应的目录),里面包含了LogStash和mysql-connector-java连接
怎样同步数据,这里需要在运行命令之前,添加相关的配置
在/你的目录/logstash-6.2.2/config/添加上配置文件,比如jdbc.config
这里贴上相关的配置,免得手写输入,上下对照,结合自己的服务器改
input {
stdin { }
jdbc {
## mysql-connector-java jar包位置
jdbc_driver_library => "/usr/local/src/logstash-6.2.3/logstash-core/lib/mysql-connector-java-5.1.46.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
## 需要同步的数据库连接
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/blog"
## 数据库用户名
jdbc_user => "root"
## 数据库密码
jdbc_password => "root"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
## 查询语句,具体的表即可
statement => "SELECT * FROM article"
schedule => "* * * * *"
}
}
output {
elasticsearch {
hosts => "localhost:9200"
## 索引名称
index => "es"
document_type => "article"
document_id => "%{id}"
}
}
解释
schedule 即是定时任务设置后,会以增量的形式同步数据
schedule : 更新频率,五个星星代表 分 时 天 月 年,
例如"* * * * *"就是每分钟,
" * /1 * * " 就是每小时,
"/10 * * * "
/10 是每十分钟
注意不加斜杠 10 是每小时的第10分,默认是最小单位是分,也就是全部5个就是每分钟执行一次,其实也可以秒级执行的,这样写
schedule => "/5 * * * * "
只要在前面再加一个 单位就是秒,这里就是每5s执行一次
后台以守护进程的方式运行
nohup ./logstash -f …/config/jdbc.conf --path.data=/usr/local/logstash-6.2.2/data/xx/