工作需要,要同步mysql数据到Elasticsearch,比较好的方案是使用logstach,还需要安装一个logstash-input-jdbc插件来进行同步
先从官网下载logstach,注意版本一定要一致,不然不支持
下载后解压,进入bin目录
新建一个logstash.conf文件,文件名随意取,启动正确到自己文件名就行。我这里是新建了一个mysql文件夹,再新建的一个mysql.conf
如果出现以下错误,有可能是这些问题:mysql.cnf文件编码格式很严格,必须是UTF-8无BOM模式编码的,而且内容对空格等要求也很严格,换行后的文件内容必须是tab的空格,键盘空格键不行(自己测试的)
如果新建的文件不是,可以使用notpad++进行转换
mysql.conf配置:
input {jdbc {jdbc_driver_library => "D:\repository\mysql\mysql-connector-java\5.1.40\mysql-connector-java-5.1.40.jar"jdbc_driver_class => "com.mysql.jdbc.Driver"jdbc_connection_string => "jdbc:mysql://xxx.xxx.xxx.xx:3306/mypinyu?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false"jdbc_user => "root"jdbc_password => "Goodlan@123"# 定时器 多久执行一次SQL,默认是一分钟schedule => "* * * * *"#是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录clean_run => "false"#或者以下方式指定sql文件 :sql_last_value为1970-01-01 00:00:00statement => "SELECT * FROM sys_user" # 执行的sql 文件路径+名称#statement_filepath => "C:\Users\admin\Desktop\logstash-5.0.2\bin\mysql\jdbc.sql"jdbc_paging_enabled => "true"jdbc_page_size => "100000"# 索引类型type => "jdbc"}stdin{}
} #filter { json { source => "message" remove_field => ["message"] } }output {elasticsearch { hosts => "localhost:9200"index=> "mypinyu"document_id => "%{id}"}stdout{# JSON格式输出codec => "json_lines"}
}
hosts:elasticsearch的地址
index:同步数据过来的索引名称
安装logstash-input-jdbc:
进入logstach/bin目录
命令:.\logstash-plugin.bat install logstash-input-jdbc
出现以下内容标识安装成功
启动logstach:
可以直接输入命令,也可以创建文件的方式
命令输入:logstash -f C:\Users\admin\Desktop\logstash-5.0.2\bin\mysql\mysql.conf
我是新建了一个run.bat文件来启动,方便点
run.bat文件内容就是 logstash -f C:\Users\admin\Desktop\logstash-5.0.2\bin\mysql\mysql.conf
双击run.bat
数据同步:
同步方式可以增量同步,也可以全量
自己配置即可。
到此完成mysql和elasticsearch的数据同步