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
          }
      }
      

      增量同步

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

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

相关文章

关系数据库:关系数据结构基础与概念解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

代码随想录算法训练营第二十八天|93. 复原 IP 地址,78. 子集,90. 子集 II

93. 复原 IP 地址 题目 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&#xff0c;但是 “0.0…

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

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

【深度学习】深度学习md笔记总结第1篇:深度学习课程,要求【附代码文档】

深度学习笔记完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;深度学习课程&#xff0c;深度学习介绍要求,目标,学习目标,1.1.1 区别。TensorFlow介绍&#xff0c;2.2 图与TensorBoard学习目标,2.2.1 什么是图结构,2.2.2 图相关操作,2.2.3 TensorBoard:可视…

数据资产管理解决方案:构建高效、安全的数据生态体系

在数字化时代&#xff0c;数据已成为企业最重要的资产之一。然而&#xff0c;如何有效管理和利用这些数据资产&#xff0c;却是许多企业面临的难题。本文将详细介绍数据资产管理解决方案&#xff0c;帮助企业构建高效、安全的数据生态体系。 一、引言 在信息化浪潮的推动下&a…

Linux之线程同步

目录 一、问题引入 二、实现线程同步的方案——条件变量 1、常用接口&#xff1a; 2、使用示例 一、问题引入 我们再次看看上次讲到的多线程抢票的代码&#xff1a;这次我们让一个线程抢完票之后不去做任何事。 #include <iostream> #include <unistd.h> #inc…

PB-03F模组蓝牙基础+主从机指令的使用

文章目录 前言一、蓝牙基础指令1. ATBLEMAC 设置和查询蓝牙 MAC 地址2. ATBLEMODE 查询和设置蓝牙模式3. ATBLERFPWR 蓝牙设置或查询发射功率4. ATBLESTATE 查询连接状态5. ATBLEDISCON 断开蓝牙连接6. ATBLEMTU 查询或者设置 MTU7. ATBLESEND 向蓝牙透传通道发送数据8. ATTRAN…

mapstruct学习笔记-pojo之间的转换

1、前言 mapstruct中常用注解如Mapping,AfterMapping,BeanMapping等的使用,通过案例说明各式各样的业务pojo对象之间如何借助mapstruct完成相互之间的转换,减少代码量的同时也能突出业务逻辑流程,让你的代码里写起来更有规范可言。 2、简介 Reference Guide – MapStruct 3…

1-postgresql数据库高可用脚本详解

问题&#xff1a; pgrep -f postgres > /dev/null && echo 0 || pkill keepalived 这是什么意思 建议换成 pgrep -f postmaster > /dev/null && echo 0 || pkill keepalived 回答 这条命令是一个复合命令&#xff0c;包含条件执行和重定向的元素。让我们…

网站引用图片但它域名被墙了或者它有防盗链,我们想引用但又不能显示,本文附详细的解决方案非常简单!

最好的办法就是直接读取图片文件&#xff0c;用到php中一个常用的函数file_get_contents(图片地址)&#xff0c;意思是读取远程的一张图片&#xff0c;在输出就完事。非常简单&#xff5e;话不多说&#xff0c;直接上代码 <?php header("Content-type: image/jpeg&quo…

rviz上不显示机器人模型(模型只有白色)

文档中的是base_footprint&#xff0c;需要根据自己所设的坐标系更改&#xff0c;我的改为base_link 如何查看自己设的坐标系&#xff1a; 这些parent父坐标系就是 同时打开rviz后需要更改成base_link

openEuler 欧拉系统nginx正向代理 http https —— 筑梦之路

正向代理 Nginx正向代理&#xff0c;通过服务器代理客户端去重定向请求访问到目标服务器的一种代理服务。对于目标服务器来说浏览器/客户端是隐藏的。Nginx 正向代理默认只支持http 协议&#xff0c;不支持 https 协议&#xff0c;需借助"ngx_http_proxy_connect_module&q…

【数据结构取经之路】栈

目录 引言 栈的性质 顺序栈 栈的基本操作 初始化 销毁 插入 删除 判空 取栈顶元素 栈的大小 完整代码&#xff1a; 引言 栈(stack)&#xff0c;可以用数组实现&#xff0c;也可以用链表实现。用数组实现的栈叫顺序栈&#xff0c;用链表实现的栈叫链式栈&#…

使用uniapp,uni-data-select组件时,内容长度没超过容器宽度时候虽然能显示全内容但是数据后边会出现三个点,逼死强迫症

项目场景&#xff1a; 微信小程序开发&#xff0c;使用uniapp&#xff0c;uni-data-select组件时&#xff0c;内容长度没超过容器宽度时候虽然能显示全内容但是数据后边会出现三个点&#xff0c;逼死强迫症 解决方案&#xff1a; 找到组件的源代码&#xff0c;然后删除那三个…

鸿蒙实战开发:【FaultLoggerd组件】讲解

简介 Faultloggerd部件是OpenHarmony中C/C运行时崩溃临时日志的生成及管理模块。面向基于 Rust 开发的部件&#xff0c;Faultloggerd 提供了Rust Panic故障日志生成能力。系统开发者可以在预设的路径下找到故障日志&#xff0c;定位相关问题。 架构 Native InnerKits 接口 Si…

英伟达深夜放王炸|字节跳动游戏之路波折不断|文旅短剧风口将至|25岁QQ魅力不减,5亿人在用|云计算市场疯长152%|电商巨头齐瞄向富足悠闲银发族

新闻一分钟速览 文旅短剧风口将至&#xff0c;一地狂拍十部&#xff0c;影视界看法分歧&#xff0c;悬念丛生&#xff01;字节跳动游戏之路波折不断&#xff0c;能否逆风翻盘引关注。折叠屏手机痛症治愈&#xff0c;实力席卷高端市场&#xff0c;势头强劲&#xff01;雷军豪言…

刷题日记:面试经典 150 题 DAY6

刷题日记&#xff1a;面试经典 150 题 DAY6 392. 判断子序列167. 两数之和 II - 输入有序数组11. 盛最多水的容器15. 三数之和209. 长度最小的子数组 392. 判断子序列 原题链接 392. 判断子序列 双指针&#xff0c;i指向s&#xff0c;j指向t 如果s[i]t[j]&#xff0c;则匹配…

SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…

F-logic DataCube3 任意文件上传漏洞复现(CVE-2024-25832)

0x01 产品简介 F-logic DataCube3是一款用于光伏发电系统的紧凑型终端测量系统。 0x02 漏洞概述 F-logic DataCube3 /admin/setting_photo.php接口处存在任意文件上传漏洞 ,未经身份验证的攻击者可通过该漏洞在服务器端写入后门,获取服务器权限,进而控制整个web服务器。 …

【C++】用红黑树模拟实现set、map

目录 前言及准备&#xff1a;一、红黑树接口1.1 begin1.2 end1.3 查找1.4 插入1.5 左单旋和右单旋 二、树形迭代器&#xff08;正向&#xff09;2.1 前置 三、模拟实现set四、模拟实现map 前言及准备&#xff1a; set、map的底层结构是红黑树&#xff0c;它们的函数通过调用红…
最新文章