前面介绍过如何安装es搜索引擎,但如何保证数据库跟es索引库的数据同步问题呢,现有成熟的方法很多,以下方法根据自己需求选其一就可,本文主要介绍通过logstash如何同步
- 业务代码中通过代码实现同步
- 通过canal同步
- 通过logstash同步
1.linux安装logstash
可前往官网地址下载压缩包:点此跳转
2.解压压缩包
cd usr/local
tar zxvf logstash-x.x.x.tar.gz
sql
3.上传mysql驱动包
上传此jar包:mysql-connector-java-5.1.47.jar
4.创建sql文件,item.sql
select id,title,avatar,content from b_article where update_time >= :sql_last_value and is_publish=1
sql
5.创建同步的配置文件,mysqltoes.conf
input {
# 多张表的同步只需要设置多个jdbc的模块就行了
jdbc {
# mysql 数据库链接,shop为数据库名
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/blog_new?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true"
# 用户名和密码
jdbc_user => "root"
jdbc_password => "root"
# 驱动
jdbc_driver_library => "/usr/local/logstash-7.9.3/mysql/mysql-connector-java-5.1.47.jar"
# 驱动类名
jdbc_driver_class => "com.mysql.jdbc.Driver"
#是否分页
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
# 执行的sql 文件路径+名称
statement_filepath => "/usr/local/logstash-7.9.3/mysql/item.sql"
# 默认列名转换为小写
lowercase_column_names => "false"
# 是否开启记录上次追踪结果
use_column_value => true
# 记录上一次追踪的结果值
last_run_metadata_path => "/usr/local/logstash-7.9.3/sync/track_time"
tracking_column => "update_time"
#设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
schedule => "* * * * *"
# 索引类型
type => "_doc"
}
}
output {
elasticsearch {
#es的ip和端口
hosts => ["http://127.0.0.1:9200"]
#ES索引名称(自己定义的)
index => "blog"
#文档类型
document_type => "_doc"
#设置数据的id为数据库中的字段
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}
sql
6.启动logstash
nohup ./bin/logstash -f config/mysqltoes.conf &
sql
至此logstash安装结束,会每秒进行检测并同步,如启动不成功或没有同步可将启动方式修改为./bin/logstash -f config/mysqltoes.conf,会打印出日志