logstash一次同步Mysql多张表到ES深入详解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 题记一次同步多张表是开发中的一般需求。之前研究了很久找到方法,但没有详细总结。博友前天在线提问,说明这块理解的还不够透彻。我整理下,一是为了尽快解决博友问题,二是加深记忆,便于未来产品开发中快速上手。

1、同步原理

原有ES专栏中有详解,不再赘述。详细请参考我的专栏:

深入详解Elasticsearch

以下是通过ES5.4.0, logstash5.4.1 验证成功。

可以确认的是2.X版本同样可以验证成功。


2、核心配置文件

input {

 stdin {

 }


 jdbc {

 type => "cxx_article_info"

 # mysql jdbc connection string to our backup databse 后面的test对应mysql中的test数据库

 jdbc_connection_string => "jdbc:mysql://110.10.15.37:3306/cxxwb"

 # the user we wish to excute our statement as

 jdbc_user => "root"

 jdbc_password => "xxxxx"


 record_last_run => "true"

 use_column_value => "true"

 tracking_column => "id"

 last_run_metadata_path => "/opt/logstash/bin/logstash_xxy/cxx_info"

 clean_run => "false"


 # the path to our downloaded jdbc driver

 jdbc_driver_library => "/opt/elasticsearch/lib/mysql-connector-java-5.1.38.jar"

 # the name of the driver class for mysql

 jdbc_driver_class => "com.mysql.jdbc.Driver"

 jdbc_paging_enabled => "true"

 jdbc_page_size => "500"

 statement => "select * from cxx_article_info where id > :sql_last_value"

#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新

 schedule => "* * * * *"

#设定ES索引类型

 }


 jdbc {

 type => "cxx_user"

 # mysql jdbc connection string to our backup databse 后面的test对应mysql中的test数据库

 jdbc_connection_string => "jdbc:mysql://110.10.15.37:3306/cxxwb"

 # the user we wish to excute our statement as

 jdbc_user => "root"

 jdbc_password => "xxxxxx"


 record_last_run => "true"

 use_column_value => "true"

 tracking_column => "id"

 last_run_metadata_path => "/opt/logstash/bin/logstash_xxy/cxx_user_info"

 clean_run => "false"


 # the path to our downloaded jdbc driver

 jdbc_driver_library => "/opt/elasticsearch/lib/mysql-connector-java-5.1.38.jar"

 # the name of the driver class for mysql

 jdbc_driver_class => "com.mysql.jdbc.Driver"

 jdbc_paging_enabled => "true"

 jdbc_page_size => "500"

 statement => "select * from cxx_user_info where id > :sql_last_value"

#以下对应着要执行的sql的绝对路径。

#statement_filepath => "/opt/logstash/bin/logstash_mysql2es/department.sql"

#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新

schedule => "* * * * *"

#设定ES索引类型

 }


}


filter {

mutate {

 convert => [ "publish_time", "string" ]

}


date {

 timezone => "Europe/Berlin"

 match => ["publish_time" , "ISO8601", "yyyy-MM-dd HH:mm:ss"]

}

#date {

# match => [ "publish_time", "yyyy-MM-dd HH:mm:ss,SSS" ]

 # remove_field => [ "publish_time" ]

 # }

json {

 source => "message"

 remove_field => ["message"]

 }

}


output {


if [type]=="cxxarticle_info" {

 elasticsearch {

#ESIP地址与端口

 hosts => "10.100.11.231:9200"

#ES索引名称(自己定义的)

 index => "cxx_info_index"

#自增ID编号

# document_id => "%{id}"

 }

}


if [type]=="cxx_user" {

 elasticsearch {

#ESIP地址与端口

 hosts => "10.100.11.231:9200"

#ES索引名称(自己定义的)

 index => "cxx_user_index"

#自增ID编号

# document_id => "%{id}"

 }

}


}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

3、同步成功结果

[2017-07-19T15:08:05,438][INFO ][logstash.pipeline ] Pipeline main started

The stdin plugin is now waiting for input:

[2017-07-19T15:08:05,491][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}

[2017-07-19T15:09:00,721][INFO ][logstash.inputs.jdbc ] (0.007000s) SELECT count(*) AS `count` FROM (select * from cxx_article_info where id > 0) AS `t1` LIMIT 1

[2017-07-19T15:09:00,721][INFO ][logstash.inputs.jdbc ] (0.008000s) SELECT count(*) AS `count` FROM (select * from cxx_user_info where id > 0) AS `t1` LIMIT 1

[2017-07-19T15:09:00,730][INFO ][logstash.inputs.jdbc ] (0.004000s) SELECT * FROM (select * from cxx_user_info where id > 0) AS `t1` LIMIT 500 OFFSET 0

[2017-07-19T15:09:00,731][INFO ][logstash.inputs.jdbc ] (0.007000s) SELECT * FROM (select * from cxx_article_info where id > 0) AS `t1` LIMIT 500 OFFSET 0

[2017-07-19T15:10:00,173][INFO ][logstash.inputs.jdbc ] (0.002000s) SELECT count(*) AS `count` FROM (select * from cxx_article_info where id > 3) AS `t1` LIMIT 1

[2017-07-19T15:10:00,174][INFO ][logstash.inputs.jdbc ] (0.003000s) SELECT count(*) AS `count` FROM (select * from cxx_user_info where id > 2) AS `t1` LIMIT 1

[2017-07-19T15:11:00,225][INFO ][logstash.inputs.jdbc ] (0.001000s) SELECT count(*) AS `count` FROM (select * from cxx_article_info where id > 3) AS `t1` LIMIT 1

[2017-07-19T15:11:00,225][INFO ][logstash.inputs.jdbc ] (0.002000s) SELECT count(*) AS `count` FROM (select * from cxx_user_info where id > 2) AS `t1` LIMIT 1


1

2

3

4

5

6

7

8

9

10

11

12

13

4、扩展

1)多个表无非就是在input里面多加几个类型,在output中多加基础

类型判定。

举例:


if [type]=="cxx_user"  

1

2)input里的type和output if判定的type**保持一致**,该type对应ES中的type。


后记

死磕ES,有问题欢迎大家提问探讨!

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
分布式计算 大数据 关系型数据库
MaxCompute产品使用问题之如何查看数据离线同步每天从MySQL抽取的数据量
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
4天前
|
分布式计算 大数据 关系型数据库
MaxCompute产品使用问题之如何实现MySQL的实时增量同步
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
7天前
|
canal 关系型数据库 MySQL
蓝易云 - 详解canal同步MySQL增量数据到ES
以上就是使用Canal同步MySQL增量数据到Elasticsearch的基本步骤。在实际操作中,可能还需要根据具体的业务需求和环境进行一些额外的配置和优化。
26 2
|
3天前
|
分布式计算 大数据 关系型数据库
MaxCompute产品使用问题之mysql读取从mc里的每10分钟计算好的结果数据表,如何同步数据过去
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
2天前
|
SQL 关系型数据库 MySQL
关系型数据库mysql的CSV
【6月更文挑战第18天】
19 6
|
1天前
|
关系型数据库 MySQL 数据库
Django与MySQL:配置数据库的详细步骤
Django与MySQL:配置数据库的详细步骤
|
2天前
|
存储 监控 关系型数据库
关系型数据库mysql的BLACKHOLE
【6月更文挑战第18天】
19 4
|
1天前
|
消息中间件 关系型数据库 Serverless
函数计算产品使用问题之如何通过vpc来连接rds数据库
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
1天前
|
存储 关系型数据库 MySQL
|
2天前
|
存储 SQL 关系型数据库

热门文章

最新文章