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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,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,有问题欢迎大家提问探讨!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
1675 0
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
350 5
|
9月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
12月前
|
监控 关系型数据库 MySQL
Flink CDC MySQL同步MySQL错误记录
在使用Flink CDC同步MySQL数据时,常见的错误包括连接错误、权限错误、表结构变化、数据类型不匹配、主键冲突和
462 17
|
搜索推荐 关系型数据库 MySQL
MySQL中的模糊匹配技巧:无需ES的高效实现
在数据库应用中,模糊匹配是一个常见的需求,尤其在处理搜索功能时。虽然Elasticsearch(ES)等搜索引擎在处理文本搜索方面表现出色,但在一些场景下,直接使用MySQL数据库实现模糊匹配也是一个经济且高效的选择。本文将分享如何在不引入ES的情况下,利用MySQL实现模糊匹配的五大步骤和十个实战案例。
893 1
|
自然语言处理 监控 关系型数据库
MySQL模糊匹配技巧:无需ES的高效实现
在数据库应用中,模糊匹配是一个常见的需求,尤其是在不引入Elasticsearch(ES)等外部搜索引擎的情况下。MySQL作为强大的关系型数据库,提供了多种实现模糊匹配的方法。本文将分享如何在MySQL中实现模糊匹配,并提供五大步骤和十个实战案例,帮助你提升查询效率和性能。
1358 1
|
3月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
133 3
|
3月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
3月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
3月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。

推荐镜像

更多