参考文章
https://www.cnblogs.com/wueryuan/p/13230849.html
https://blog.csdn.net/qq_38270106/article/details/88699334
logstash下载
参考之前ES文章开头有地址
mysql驱动下载
- 在Logstash目录下新建mysql文件夹并进入
mkdir mysql
cd mysql
- 下载mysql驱动并解压缩
mysql驱动官网
点Archives找到想要的版本,5.x以上一般都可以,复制路径,在linxu里wget
wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.48.tar.gz
tar -zxvf mysql-connector-java-5.1.48.tar.gz
数据模板
PUT /wj001
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"id":{"type": "integer"}
}
}
}
Logstash配置
xxx的位置换成实际内容
新建配置文件,放到Logstash/bin下,名字叫sync_tablename.conf
input {
stdin{
}
jdbc {
# 连接的数据库地址和数据库,指定编码格式,禁用SSL协议,设定自动重连
jdbc_connection_string => "jdbc:mysql://139.9.118.xxx:3306/logstashdb?characterEncoding=UTF-8&useSSL=false&autoReconnect=true"
# 用户名密码
jdbc_user => "root"
jdbc_password => "xxx"
# jar包的位置
jdbc_driver_library => "/es/logstash-7.8.0/bin/mysql/mysql-connector-java-5.1.48/mysql-connector-java-5.1.48.jar"
# mysql的Driver
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_default_timezone => "Asia/Shanghai"
jdbc_paging_enabled => "true"
jdbc_page_size => "10"
#statement_filepath => "config-mysql/test.sql"
#注意这个sql不能出现type,这是es的保留字段
statement => "select * from myuser where name='张三' "
schedule => "* * * * *"
}
}
output {
elasticsearch {
hosts => "14.116.xxx.xxx:9200"
# index名
index => "wj001"
# type名
document_type => "_doc"
# 需要关联的数据库中有有一个id字段,对应索引的id号
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}
启动Logstash
./logstash -f mysql/sync_tablename.conf
其他
大数据量同步方案
//分批进行,每批量只执行100000条,这样offset最大值也只有100000,速度会大大提高
statement => "select * from t_wechat_message where id > :sql_last_value limit 100000"
//或者
statement => "select * from t_wechat_message where id > :sql_last_value and id < (:sql_last_value + 100000)"