2019独角兽企业重金招聘Python工程师标准>>>
1. ES和MySQL同步方法
-
编程式
- 使用之前的elasticdump,手动变成生成json文件,编写shellscript导入ES。后续的数据新增使用PHP或kava客户端进行编程触发同步。
-
使用插件(没有什么特别好的插件)
- 国人编写的go-mysql-elasticsearch(go开发)
- 官方推荐基于logstash的插件logstash-input-jdbc
-
自己写
- 采用阿里巴巴的一个开源项目canal,可以模拟mysql从服务器。封装了bin-log分析,我们可以自己开发一个客户端可以更好地控制数据同步。
2. logstash-input-jdbc同步方法
-
下载mysql+java驱动包:https://dev.mysql.com/downloads/connector/j/
-
配置文件
input {jdbc {jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"jdbc_driver_class => "com.mysql.jdbc.Driver"jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"jdbc_user => "mysql"parameters => { "favorite_artist" => "Beethoven" }schedule => "* * * * *"statement => "SELECT * from songs where artist = :favorite_artist"}}
- 文档:https://www.elastic.co/guide/en/logstash/master/plugins-inputs-jdbc.html
- 关于 schedule => "* * * * *"
- 类似于Linux的crond的配置
- 从左往右 分 时 日 月 年 (最小单位:分)
- 全部写*表示每分钟都更新
-
- 5 * * * 表示每天5点钟更新
-
- 5 * 1 * 表示一月份每天5点更新
-
准备数据,创建mysql表jt_news
CREATE TABLE `jt_news` (`news_id` int(11) NOT NULL AUTO_INCREMENT,`news_title` varchar(64) DEFAULT NULL,`news_abstract` varchar(64) DEFAULT NULL,`news_updatetime` datetime DEFAULT NULL,`news_clicknum` int(3) DEFAULT NULL,`news_class` varchar(64) DEFAULT NULL,PRIMARY KEY (`news_id`)) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `jt_news` VALUES (1,'Java开发新闻','Java新闻摘要','2017-09-28 11:14:49',11,'编程语言'),(2,'PHP开发新闻','PHP新闻摘要','2017-09-28 11:15:13',13,'web开发'),(3,'js前后端分离','Javascript','2017-09-28 11:15:38',1,'web开发');
-
创建索引(mapping)
PUT jtthink-test{"mappings": {"jt_news": {"properties": {"news_title": {"type": "text","analyzer": "ik_max_word"},"news_abstract": {"type": "text","analyzer": "ik_max_word"},"news_updatetime": {"type": "date"},"news_clicknum": {"type": "integer"},"news_class": {"type": "keyword"}}}}}
-
创建配置文件 mysql.conf
-
在logstash/bin下创建(该目录可变)
-
文件内容
input {jdbc {jdbc_driver_library => "/usr/local/drivers/mysql-connector-java-5.1.44/mysql-connector-java-5.1.44-bin.jar"jdbc_driver_class => "com.mysql.jdbc.Driver"jdbc_connection_string => "jdbc:mysql://localhost:3306/jtthink"jdbc_user => "root"jdbc_password => "shadowolf1995."statement => "SELECT * from jt_news order by news_id desc"tracking_column => "news_updatetime"tracking_column_type => "timestamp"schedule => "* * * * *"}}filter {}output {stdout {codec => rubydebug}elasticsearch {hosts => ["127.0.0.1:9201"]index => "jtthink-test"document_id => "%{news_id}"}}
-
-
启动logstash
./logstash -f mysql.conf
-
使用kibana创建index jtthink-test,查看数据。