ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

使用docker实现logstash同步mysql到es

2026/8/6 21:54:47 拓冰建站 浏览量
使用docker实现logstash同步mysql到es

准备工作:

1.有mysql的连接方式,并且可以连接成功

2.有es的连接方式,并且可以连接成功

3.安装了docker


环境是Ubuntu中安装了docker

一、创建配置文件,用于容器卷挂载

# 切换目录,可自定义

cd /home/test/

# 创建logstash挂载的本地目录

mkdir logstash

cd logstash

mkdir config

mkdir pipeline

# 进入到config目录下,创建配置文件

cd config

# 创建mysql同步es数据的配置文件

vim jdbc.conf

input {jdbc {jdbc_driver_library => "/home/test/logstash/mysql-connector-j-8.0.32.jar"jdbc_driver_class => "com.mysql.cj.jdbc.Driver"jdbc_connection_string => "jdbc:mysql://localhost:3306/_test"jdbc_user => "root"jdbc_password => "root"#启用分页,默认falsejdbc_paging_enabled => "true"#页面大小jdbc_page_size => "500"#是否记录上次运行的结果record_last_run => true#记录上次运行结果的文件位置last_run_metadata_path => "/usr/share/logstash/pipeline/lastvalue.txt"#是否使用数据库某一列的值,use_column_value => truetracking_column => "id"#numeric或者timestamp#tracking_column_type => "numeric"#如果为true则会清除last_run_metadata_path记录,即重新开始同步数据clean_run => false# sql语句文件,对于复杂的查询,可以放在文件中,如:# statement_filepath => "jdbc.sql"这个文件路径要跟jdbc.sql对应上#设置监听间隔。可以设置每隔多久监听一次什么的。#官方举例:#* 5 * 1-3 * 一月到三月的每天凌晨5点每分钟执行一次。#0 * * * *   将在每天每小时的第0分钟执行。#0 6 * * *   America/Chicago每天早上6:00(UTC / GMT -5)执行。#* * * * *   分、时、天、月、年,全部为*默认含义为每分钟查询一次schedule => "* * * * *"#索引类型#type => "jdbc"statement => "SELECT * FROM testORDER BY id ASC"}
}output {elasticsearch {hosts => "localhost:9200"index => "test"user => "elastic"password => "elastic"timeout => 3000document_id => "%{id}"template => "/home/test/logstash/config/test.json"template_name => "test"}
}

# 创建test.json文件,存放要同步数据的es模板

vim test.json

{"index_patterns": ["test*"],"mappings": {"properties": {"id": { "type": "integer" },"accession": { "type": "keyword" },"name": { "type": "keyword" },"comment_text": { "type": "text" },"sequence": { "type": "text" },"keyword": { "type": "keyword" }}}
}
'

# 创建pipelines.yml,亲测不创建会报错的

vim pipelines.yml

- pipeline.id: pipeline1path.config: "/usr/share/logstash/config/jdbc.conf"

# 创建logstash.yml,亲测不创建会报错的,这个空着就行

touch logstash.yml

上面文件都创建好了,避免出现权限问题可以chmod 777 xxx。
接下来就启动logstash就可以了

二、启动容器

docker pull logstash

# 启动容器,将配置文件挂载到本地。注意这里使用-it启动,可以看到详细的启动日志

docker run -it -p 5044:5044 --privileged=true -v /home/test/logstash/config:/usr/share/logstash/config -v /home/test/logstash/pipeline:/usr/share/logstash/pipeline --name logstash logstash

 由于配置文件中使用的是定时任务,配置内容schedule => "* * * * *",启动容器就会立刻同步数据,而且会一直反复同步。
这个定时任务仅用于测试~~,实际一定会详细配置时间的。 

 


调试过程中遇到的问题:

logstash同步mysql数据到es(一、es模板问题,请求返回400)

logstash同步mysql数据到es(二、jdbc_driver_library问题)​​​​​​

logstash同步mysql数据到es(三、es模板问题)