MySQL数据自动同步到Es

Logstash
  • 测试数据准备

    DROP DATABASE IF EXISTS es;
    
    CREATE DATABASE es DEFAULT CHARACTER SET utf8;
    
    USE es;
    
    CREATE TABLE book
    (
     id INT NOT NULL,
     title VARCHAR(20),
     author VARCHAR(20),
     price DECIMAL(6,2),
     PRIMARY KEY(id)
    );
    
    DROP PROCEDURE IF EXISTS batchInsertBook;
    
    DELIMITER $$
    CREATE PROCEDURE batchInsertBook(IN seed INT, IN loops INT)
    BEGIN
    	DECLARE i INT;
    	DECLARE id INT;
    	SET i = 0;
    	SET id = seed;
    	WHILE i < loops DO
    		INSERT INTO book(id, title,author, price) VALUES
    		(id, '雪山飞狐', '金庸', 50),
    		(id+1, '神雕侠侣', '金庸', 60),
    		(id+2, '三国演义', '罗贯中', 50),
    		(id+3, '西游记', '吴承恩', 40);
    		SET id = id + 4;
    		SET i = i + 1;
    	END WHILE;
    END $$
    DELIMITER ;
    
    -- 禁用索引,加快数据导入速度
    ALTER TABLE book DISABLE KEYS;
    
    -- 调用存储过程导入数据
    CALL batchInsertBook(1, 100);
    
    -- 添加索引
    ALTER TABLE book ENABLE KEYS;
    
    -- 修改表的引擎为innodb
    ALTER TABLE book ENGINE INNODB;
    
    mysql> select count(*) from book;
    +----------+
    | count(*) |
    +----------+
    |    40000 |
    +----------+
    1 row in set (0.03 sec)
    
  • docker安装logstash

    # 拉取镜像
    docker pull logstash:7.12.1
    
  • 在宿主机配置目录

    mkdir -p /root/logstash
    
  • 在宿主机创建/root/logstash/logstash.yml,内容为空即可,该步骤不能省略

  • 在宿主机创建/root/logstash/logstash.conf

    input {
      jdbc {
    	jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.27.jar"
    	jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    	jdbc_connection_string => "jdbc:mysql://192.168.126.1:3306/es?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8"
    	jdbc_user => "root"
    	jdbc_password => "root"
    	schedule => "* * * * *" 
    	statement => "SELECT * FROM book"
    	type => "jdbc"
      }
    }
    
    filter {
    }
    
    output {
        stdout {
            codec => json_lines
        }
    }
    
    • 本次连接的是windows上的MySQL,通过IpV4的IP地址连接

      测试连通性

    • 上传maven仓库中的jar

      # \apache-maven-3.9.6\repository\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar
      [root@localhost logstash]# ls
      mysql-connector-java-8.0.11.jar
      [root@localhost logstash]# chmod 644 mysql-connector-java-8.0.11.jar
      
    • 开启windowsroot远程登录

      mysql -uroot -proot
      use mysql;
      update user set host = '%' where user = 'root';
      FLUSH PRIVILEGES;
      
      mysql> select host,user from user;
      +-----------+------------------+
      | host      | user             |
      +-----------+------------------+
      | %         | root             |
      | localhost | mysql.infoschema |
      | localhost | mysql.session    |
      | localhost | mysql.sys        |
      +-----------+------------------+
      4 rows in set (0.00 sec)
      
  • 启动logstash容器

    docker run -d  \
    	--name logstash \
        -v ~/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml \
        -v ~/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
        -v ~/logstash/mysql-connector-java-8.0.11.jar:/usr/share/logstash/mysql-connector-java-8.0.11.jar \
        logstash:7.12.1
    
  • 查看日志

    # 查看数据同步
    docker logs -f logstash
    

  • 将数据输出到ElasticSearch

    {% note blue ‘fas fa-bullhorn’ modern %}

    既然我们能从mysql中读取数据,并输出到stdout,那么我们同样可以从mysql中读取数据,然后将数据输出到ElasticSearch,修改logstash.conf,内容如下

    {% endnote %}

    input {
      jdbc {
    	jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.11.jar"
    	jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    	jdbc_connection_string => "jdbc:mysql://192.168.126.1:3306/es?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8"
    	jdbc_user => "root"
    	jdbc_password => "root"
    	schedule => "* * * * *"
    	statement => "SELECT * FROM book"
    	type => "jdbc"
      }
    }
    
    filter {
        
    }
    
    output {
        elasticsearch {
        	hosts => ["192.168.32.128:9200"]
        	index => "book"
        	document_id => "%{id}"
        }
        stdout {
            codec => json_lines
        }
    }
    
  • 确保es是启动的

  • 重启

    [root@192 logstash]# docker restart logstash
    logstash
    
  • 进入如下界面

  • 查看是否同步到es

    以上的这种同步数据的方式,我们称之为“全量同步”

  • 增量同步

    • 修改logstash.conf,内容如下

      input {
        jdbc {
      	jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.11.jar"
      	jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
      	jdbc_connection_string => "jdbc:mysql://192.168.126.1:3306/es?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8"
      	jdbc_user => "root"
      	jdbc_password => "root"
      	schedule => "* * * * *"
       	type => "jdbc"
       	# 记录查询结果中,某个字段的值
      	use_column_value => true
      	# 记录id字段的值,用于增量同步
      	tracking_column => "id"
      	# 指明要记录的字段的类型
      	tracking_column_type => numeric
      	# 指定要记录上一次查询的数据
      	record_last_run => true
         # :sql_last_value代表上次查询出来的最大的“tracking_column”中的值
      	statement => "SELECT * FROM book where id > :sql_last_value"
      	last_run_metadata_path => "syncpoint_table"
      	
        }   
      }
      
      filter {
      }
      
      output {
          elasticsearch {
          	hosts => ["192.168.32.128:9200"]
          	index => "book"
          	document_id => "%{id}"
          }
          stdout {
            codec => json_lines
          }
      }
      

      增量同步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/469815.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

飞桨AI应用@riscv OpenKylin

在riscv编译安装飞桨PaddlePaddle参见&#xff1a; 算能RISC-V通用云编译飞桨paddlepaddleopenKylin留档_在riscv下进行paddlelite源码编译-CSDN博客 安装好飞桨&#xff0c;就可以用飞桨进行推理了。刚开始计划用ONNX推理&#xff0c;但是在算能云没有装上&#xff0c;所以最…

第六篇:视频广告格式上传指南(上) - IAB视频广告标准《数字视频和有线电视广告格式指南》

第六篇&#xff1a; 视频广告格式和上传指南&#xff08;上&#xff09; --- 我为什么要翻译介绍美国人工智能科技公司IAB系列技术标准&#xff08;2&#xff09; 流媒体数字视频的广告格式分为线性和非线性两大类。任何一个广告都可以与显示在视频播放器外部的伴随横幅一起提…

教你读懂cert-manager官网并且使用letsencrypt(一)。

这一篇文章主要讲如果通过cert-manager letsencrypt的方式 自动管理你的证书。 一、怎么装&#xff1f; Installation - cert-manager Documentation 选个符合你环境的&#xff0c;推荐helm来管理你的应用。 二、怎么用&#xff1f; 官网说的&#xff1a; 意思就是你安装了…

Positive Technologies 专家发现的漏洞已在 ABB 控制器中得到修复

&#x1f31f; 我们的同事一如既往地表现出色&#xff1a;应用分析专家 Natalia Tlyapova 和 Denis Goryushev 因发现 Freelance AC 900F 和 AC 700F 控制器中的两个漏洞而受到 ABB 的表彰。 这些设备用于自动化大规模连续循环生产设施和构建企业配送控制系统。利用这些漏洞的…

java算法第28天 | 93.复原IP地址 78.子集 90.子集II

93.复原IP地址 思路&#xff1a; 这里startIndex为插入‘.’的位置&#xff0c;使用回溯法遍历所有插入的位置&#xff0c;直接在原始字符串上操作。要注意的是开闭区间的规定&#xff08;这里我规定的是左闭右闭区间&#xff09;。还要明确什么时候能return。 class Solution…

应用案例多且广 八轴测径仪凭什么备受轧钢客户青睐?

在当今高速发展的工业领域&#xff0c;高效、精准的在线测量设备已经成为了企业提高生产效率和产品质量的重要保障。八轴测径仪&#xff0c;作为一款高精度、高效率的在线测量设备&#xff0c;广泛应用于钢铁、冶金、机械制造等行业。 它采用了先进的光学测量技术和智能算法&am…

前端 - 基础 表单标签 -- 表单元素( input - type属性) 文本框和密码框

表单元素 &#xff1a; 在表单域中可以定义各种表单元素&#xff0c;这些表单元素就是允许用户在表单中输入或选择 的内容控件。 表单元素的外观也各不一样&#xff0c;有小圆圈&#xff0c;有正方形&#xff0c;也有方框&#xff0c;乱七八糟的&#xff0c;各种各样&#xf…

网络工程师之路由交换技术篇

网络工程师之路由交换技术篇 路由交换之技术篇ARPICMPBPDUIPv6IP编址MAC其他技术点参考 以下均为个人笔记&#xff0c;摘录到csdn做备份 路由交换之技术篇 ARP Operation Code指定了ARP报文的类型&#xff0c; 包括ARP request 和ARP reply&#xff1b;取值为1或者2 &#x…

代码学习记录22--回溯算法第三天

随想录日记part22 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.17 主要内容&#xff1a;今天主要是结合类型的题目加深对回溯算法的理解&#xff1a;1.组合总和;2.组合总和 ;3.分割回文串。 39. 组合总和 40.组合总和II131.分割回文串 Topic1组合总和 题…

Leetcode 79. 单词搜索

心路历程&#xff1a; 做完这道题才发现是回溯&#xff0c;一开始想的是递归&#xff0c;判断完第i个字符后&#xff0c;只需要挨个判断第i1个字符在不在第i个字符的邻域。后来发现由于不能重复使用元素&#xff0c;所以需要维护一个visited列表&#xff0c;并且在遍历所有可能…

嵌入式3-19

1、哈希表的代码写完&#xff0c;写出给出关键字&#xff0c;找到该关键字在哈希表(指针数组)中下标的位置&#xff0c;以及在链表中的位置。(因为返回值只有一个&#xff0c;所以结果直接找到通过输出语句输出) void search(node *H,int key); 2、快速排序和折半查找的代码写…

Maven项目如何导入依赖包

一、导入依赖包 导入mysql依赖包 第一步&#xff1a;登录Maven官网 Maven官网&#xff1a;https://mvnrepository.com/search?qmysql 第二步&#xff1a;点击MySql Connector Java 第三步&#xff1a;点击任意一个版本 第四步&#xff1a;将以下内容复制到pom.xml中 导入j…

Unity发布webgl设置占满浏览器运行

Unity发布webgl设置占满浏览器运行 Unity发布webgl的时候index.html的模板文件 模板文件路径&#xff0c;根据自己的需求修改。 C:\Program Files\Unity\Hub\Editor\2021.1.18f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\WebGLTemplates\Default再桌面新建一个t…

随笔-生老病死

周末两天也没有出门&#xff0c;帮着一个朋友做了些图&#xff08;就这两天忙不过来&#xff09;&#xff0c;挣了点外快&#xff08;700&#xff09;&#xff0c;累得腰酸、眼花、脖子疼。 媳妇带着小孩出去玩&#xff0c;中间发了个视频&#xff0c;是小孩进了一个围棋培训班…

HTML基础:列表标签的3种形式以及嵌套列表

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端程序媛。 g.zh后台回复“前端工具”可免费获取开发工具&#xff0c;持续更新 今天聊聊列表标签。列表标签&#xff0c;在网页设计中可以帮助将信息以结构化的方式呈现给用户&#xff0c;提高信息的可读性…

在线教育平台帮助教培机构打造线上

随着互联网的迅猛发展&#xff0c;在线教育逐渐成为了教育行业的主流趋势。为了满足教育机构和学生对高效、便捷在线教育的需求&#xff0c;乔拓云教育系统应运而生。该系统以学员端展示课程和后台管理教务为核心功能&#xff0c;为教育机构提供了一站式解决方案&#xff0c;助…

母亲的奶牛(bfs)

农夫约翰有三个容量分别为 A , B , C A,B,C A,B,C 升的挤奶桶。 最开始桶 A A A 和桶 B B B 都是空的&#xff0c;而桶 C C C 里装满了牛奶。 有时&#xff0c;约翰会将牛奶从一个桶倒到另一个桶中&#xff0c;直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。 这一过…

晶圆制造过程中常用载具的类型

晶圆载具用于硅片生产、晶圆制造以及工厂之间晶圆的储存、传送、运输以及防护。晶圆载具种类很多,如FOUP用于晶圆制造工厂中晶圆的传送;FOSB用于硅片生产与晶圆制造工厂之间的运输;CASSETTE载具可用于工序间运送以及配合工艺使用。 OPEN CASSETTE OPEN CASSETTE主要在晶圆…

实战http请求

文章目录 使用python3的标准库发起GET请求使用python3的标准库发起POST请求使用requests库发起GET请求使用requests库发起POST请求使用java 11内置的http client发起访问百度请求使用java 11内置的http client发起访问POST请求进一步阅读与参考资料 使用python3的标准库发起GET…

3.19学习总结

一.题解分析 这是一道bfs的题目,初看毫无头绪,经过点拨后恍然大悟,我们需要记录其六个操作,对每次选择时每个操作进行入队检查,最终得到任意一个罐子里的水等于c,记录其总操作步数,并进行输出.这里的操作类似于走迷宫时,我们设置的方向数组.然后我们在输出操作时,可以用一个数组…