目录
2.2、下载依赖包mysql-connector-java-8.0.30.jar
问题现象:
前言(选看)
最近在重温Elasticsearch,看来一下官网,都出到8.4.3版本了。想当初学的时候用的还是5.6.8,版本更新了很多意味着有大变动。
windows环境基于Elasticsearch8.4.0的Logstash工具实现Mysql数据库表数据备份同步!
解决方法:
1、下载Logstash工具
Elastic官网下载:
Past Releases of Elastic Stack Software | Elastic
注意版本号要和Elasticsearch的版本号相同,所以这里我下载的是8.4.0,点击WINDOWS即可开始zip包的下载:
下载完成后解压到自定义位置,如(D:\logstash-8.4.0)。
2、配置
2.1、mysql数据库可用
首先要保证mysql服务已经启动,并且是数据库可以连接的(这里用我mysq服务的mysqltest数据库中student表来做实践):
2.2、下载依赖包mysql-connector-java-8.0.30.jar
在解压后的logstash目录下新建文件夹mysql:
可以在maven仓库官网找到并下载依赖包,这里我下载的是8.0.30版本:
下载好的依赖包放入到上面新建的mysql目录下。
拓展:如何下载maven官网的依赖
这里简单提一下怎么下载依赖吧,其实回想一下我们平时是如何在Spring/Springboot项目中引入依赖的就知道了。
将上图中红框部分复制到Spring/Springboot项目的pom.xml文件中,一般就会自动下载,也可以手动点击Reimport按钮就会启动下载:
2.3、创建脚本文件find.sql
在mysql目录下,新建文件find.sql,并写入数据备份所用到的查询sql,如:
-- student 为需要导入的表
select * from student
2.4、创建配置文件mysql.conf
在mysql目录下,新建文件mysql.conf,并写入如下配置:
input {
stdin {
}
jdbc {
# mysql 数据库链接,jdbc版本比较大的要加上?后面那串字符
jdbc_connection_string => "jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true"
# 用户名和密码
jdbc_user => "用户名"
jdbc_password => "密码"
# 驱动
jdbc_driver_library => "mysql-connector-java.jar包所在路径"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
# 执行的sql 就是上一步创建的sql文件的绝对路径+文件名字
statement_filepath => "find.sql文件所在路径"
# 也可以写一个要执行sql语句,替代statement_filepath的方式
#statement => "select * from tb_article"
# 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
schedule => "* * * * *"
# 索引类型
type => "student"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
# ES的IP地址及端口
hosts => ["localhost:9200"]
# 索引名称,elasticsearch叫做索引,相当于es的数据库
index => "自定义索引名"
# 自增ID id必须是待查询的数据表的序列字段
document_id => "%{表的主键字段名}"
}
stdout {
# JSON格式输出
codec => json_lines
}
}
这里也提供一下我自己的配置以供大家参考:
input {
stdin {
}
jdbc {
# mysql 数据库链接,center为数据库名,jdbc版本比较大的要加上?后面那串字符
jdbc_connection_string => "jdbc:mysql://localhost:3306/mysql_test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true"
# 用户名和密码
jdbc_user => "root"
jdbc_password => "123456"
# 驱动
jdbc_driver_library => "D:\logstash-8.4.0\mysql\mysql-connector-java-8.0.30.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
# 执行的sql 就是上一步创建的sql文件的绝对路径+文件名字
statement_filepath => "D:\logstash-8.4.0\mysql\find.sql"
# 也可以写一个要执行sql语句,替代statement_filepath的方式
#statement => "select * from tb_article"
# 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
schedule => "* * * * *"
# 索引类型
type => "student"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
# ES的IP地址及端口
hosts => ["localhost:9200"]
# 索引名称,elasticsearch叫做索引,相当于es的数据库
index => "mysql"
# 自增ID id必须是待查询的数据表的序列字段
document_id => "%{id}"
}
stdout {
# JSON格式输出
codec => json_lines
}
}
搞定后就是这样的:
3、启动Logstash开始mysql表数据备份
打开命令行窗口,进入到zip包解压后logstash的目录bin下,输入:
//logstash -f mysql.conf文件路径,如:
logstash -f D:\logstash-8.4.0\mysql\mysql.conf
备份成功:
使用Head工具查看: