数据库监控监听

嘿嘿 又知道多一点点 说来有些惭愧 现在才发现,都怪canal 哈哈

实时监控mysql表除了canal还有什么,还有很多,比如

mysql-binlog-connector-java

GitHub - liufeiit/mysql-binlog-connector-java: mysql-binlog-connector-java

 java库,基于复制协议解析读取mysql二进制日志(实时订阅/消费)

自然canal还有这个client还有下面要提到都是需要开启binlog的show variables like 'log_bin';

log_bin=mysql-bin
binlog-format=ROW#格式 statement row mixed
server-id=1#sql从哪个server写入<dependency><groupId>com.github.shyiko</groupId><artifactId>mysql-binlog-connector-java</artifactId><version>0.2.2</version>
</dependency>
binlog

row:仅保存被修改的细节,每一行数据的变化,被修改行的实际数据,不记录上下文

statement:记录每条会修改数据的sql本身,执行语句 上下文环境

mixed:混合简单的statement 复杂row,对于insert update delete的binlog事件类型=query事件

事件

query与数据库关,begin / drop  table / truncate table

table_map:记录下一个操作对应的表信息

xid:标记事务提交

write_rows插入数据 update_rows delete_rows 具体看代码,很清晰 但是也有点小问题 评论区指出吧大佬们

public static void main(String[] args) throws IOException {BinaryLogClient client = new BinaryLogClient("IP", 3306, "账号", "密码");EventDeserializer eventDeserializer = new EventDeserializer();eventDeserializer.setCompatibilityMode(EventDeserializer.CompatibilityMode.DATE_AND_TIME_AS_LONG,EventDeserializer.CompatibilityMode.CHAR_AND_BINARY_AS_BYTE_ARRAY);client.setEventDeserializer(eventDeserializer);//设置需要读取的Binlog的文件以及位置,否则,client会从"头"开始读取Binlog并监听//client.setBinlogFilename("mysql-bin.000001");//client.setBinlogPosition("/data/");Thread thread = new Thread(() -> {client.registerEventListener(event -> {final EventData data = event.getData();if (data instanceof WriteRowsEventData) {WriteRowsEventData writeRowsEventData = (WriteRowsEventData) data;} else if (data instanceof UpdateRowsEventData) {UpdateRowsEventData updateRowsEventData = (UpdateRowsEventData) data;} else if (data instanceof DeleteRowsEventData) {DeleteRowsEventData deleteRowsEventData = (DeleteRowsEventData) data;} else if (data instanceof QueryEventData) {QueryEventData queryEventData = (QueryEventData) data;String database = queryEventData.getDatabase();if ("jeecg-boot".equals(database)) {//这个地方要dubug具体看一下如何取值String sql = queryEventData.getSql();if (sql != null && sql.length() >= 10) {String[] s = sql.split(" ");String type = s[0];String tableName = null;type = type.toUpperCase();switch (type) {case "INSERT":break;case "DELETE":break;case "UPDATE":tableName = s[1];break;default:break;}if (tableName != null) {tableName = tableName.replaceAll("`", "").replaceAll("'", "").replaceAll("\\.", "").toLowerCase();if (TABLE_NAME.contains(tableName)) {}}}}}});client.registerLifecycleListener(new BinaryLogClient.LifecycleListener() {@Overridepublic void onConnect(BinaryLogClient client) {logger.info("Connected to MySQL server");}@Overridepublic void onCommunicationFailure(BinaryLogClient client, Exception ex) {logger.error("Communication failure with MySQL server", ex);}@Overridepublic void onEventDeserializationFailure(BinaryLogClient client, Exception ex) {logger.error("Event deserialization failure", ex);}@Overridepublic void onDisconnect(BinaryLogClient client) {logger.warn("Disconnected from MySQL server");// 在这里添加重新连接或其他处理逻辑}});try {client.connect();} catch (IOException e) {//}});return thread;}}

durid

这个引入依赖jar,配置文件替换驱动 基本操作就不说了

  配置文件需要配置filters监控统计拦截filters:stat监控统计 log4j日志记录 wall防御sql注入

使用log4j记录日志,引入log4j的maven坐标

@Configuration
public class DruidConfig(){@ConfigurationProperties(prefix="spring.datasource")@Beanpublic DataSource DruidDatasource(){return new DruidDataSource();}@Beanpublic ServletRegistrationBean servletRegistrationBean(){//servlet配置,web.xml对servlet配置ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");Map<String,String> hashMap = new HashMap<>();hashMap.put("loginUsername","demo1");hashMap.put("loginPassword","123");hashMap.put("allow","");bean.setInitParameters(hashMap);return bean;}}

访问http://localhost:8080/druid

https://blog.51cto.com/u_12897/8658359

canal之前写了

debezium

https://www.cnblogs.com/zhangpan1244/p/11329817.html

https://blog.51cto.com/u_16175522/9046382

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端小白一文掌握 CSS3 2D转换transform

文章导读&#xff1a;AI 辅助学习前端&#xff0c;包含入门、进阶、高级部分前端系列内容&#xff0c;当前是 CSS 的部分&#xff0c;瑶琴会持续更新&#xff0c;适合零基础的朋友&#xff0c;已有前端工作经验的可以不看&#xff0c;也可以当作基础知识回顾。 CSS3 中的转化 …

设计模式-结构型-桥接模式-Bridge

桥接模式可以减少类的创建 矩阵类 public class Matrix {private String fileName;public Matrix(String fileName) {this.fileName fileName;}public String getFileName() {return fileName;} } 图片抽象类 public abstract class Image {protected ImageImp imp;public …

黄芪党参茶

黄芪党参茶是一种传统的中药茶饮&#xff0c;由黄芪和党参两味药材煮制而成。这种茶饮在中医理论中被认为具有补中益气、调理脾胃、利水消肿、养血安神等多种功效。 主要功效 补中益气&#xff1a;黄芪和党参都具有补中益气的功效。黄芪味甘、性微温&#xff0c;有补气固表的…

常见算法策略

前言 算法策略是指在解决问题或完成任务时所采用的方法、技巧或步骤的总称。 在设计算法时&#xff0c;通常会考虑多种策略&#xff0c;并选择最适合特定问题的策略来实现算法的设计和优化。 算法策略比较 动态规划 动态规划介绍入口

基于协同过滤算法的旅游推荐系统的设计

基于协同过滤算法的旅游推荐系统的设计 Design of a Travel Recommendation System based on Collaborative Filtering Algorithm 完整下载链接:基于协同过滤算法的旅游推荐系统的设计 文章目录 基于协同过滤算法的旅游推荐系统的设计摘要第一章 前言1.1 研究背景1.2 研究目的…

动手学深度学习16 Pytorch神经网络基础

动手学深度学习16 Pytorch神经网络基础 1. 模型构造2. 参数管理1. state_dict()2. normal_() zeros_()3. xavier初始化共享参数的好处 3. 自定义层4. 读写文件net.eval() 评估模式 QA 1. 模型构造 定义隐藏层–模型结构定义前向函数–模型结构的调用 import torch from torch…

dom驱动和数据驱动的理解

DOM&#xff08;Document Object Model&#xff09;驱动和数据驱动在前端开发中扮演着不同的角色&#xff0c;它们各自有其独特的特性和应用场景。 DOM驱动&#xff1a; DOM&#xff08;文档对象模型&#xff09;驱动是传统的前端开发模式。在这种模式下&#xff0c;开发人员…

Spark读取Hive数据或文件如何提升速度的优化思路

场景描述 场景一&#xff1a;数据不均匀&#xff0c;个别task获取的数据比其他Task多&#xff0c;导致单个Task或几个Task执行很慢。场景二&#xff1a;数据均匀&#xff0c;但是每个Task数据量都很多&#xff0c;执行时间达不到预期。 解决思路 读取前优化&#xff1a;优化…

Xilinx 千兆以太网TEMAC IP核 MDIO 配置及物理接口

基于AXI4-Lite接口可以访问MDIO(Management Data Input/Output)接口&#xff0c;而MDIO接口连接MAC外部的PHY芯片&#xff0c;用户可通过AXI4-Lite接口实现对PHY芯片的配置。 1 MDIO接口简介 开放系统互连模型OSI的最低两层分别是数据链路层和物理层&#xff0c;数据链路层的…

联丰策略股票炒股APP市场这些板块爆发!A股后市怎么走?

查查配5月10日,A股三大指数涨跌不一。 联丰策略拥有一支由知名互联网公司和国内证券金融机构的行业专家组成的一流运营团队。凭借他们在互联网产品开发和金融风险管理方面的丰富经验,我们的团队致力于为客户提供专业和个性化的证券交易服务。 截至收盘,沪指涨0.01%,报3154.55点…

Linux 网络时间校准

随笔 目录 1. ntp 校验 2. timedatectl 命令来进行时间同步 2.1 安装 Chrony 软件包 2.2 编辑Chrony的配置文件/etc/chrony.conf&#xff0c;选择你想要同步的NTP服务器 2.3 确认Chrony服务已经启动 2.4 命令查看系统时间与NTP服务器的同步情况 1. ntp 校验 1. 确保你的…

leetcode-矩阵最长递增路径-102

题目要求 思路 1.通过双循环去把每一个结点作为起始点进行统计&#xff0c;将返回的路径长度存放在res中&#xff0c;取最大的res的长度。 2.递归中需要的几个值&#xff0c;x和y当前结点的坐标&#xff0c;pre用于存储上一个结点的元素值&#xff0c;因为要求是路径上的元素是…

8. SVG的填充和描边

在SVG中&#xff0c;fill和stroke属性是用来控制图形的填充和描边的。下面我将分别详细介绍这两个属性及它们的衍生属性。 Fill 属性&#xff08;填充&#xff09; 应用场景 绘制实心图形&#xff1a;如圆形、矩形、多边形等的内部填充。用于表示实体对象、区域等&#xff0…

【TC3xx芯片】TC3xx芯片电压监控和温度监控

目录 前言 正文 1.电压监控 1.1电压监控功能概述 1.2电压监控配置过程

FreeRtos内核源码分析(九)——协程

目录 一、协程简介 二、协程工作机制 2.1 协程控制块结构 2.2 协程管理方式 2.3 协程调度方式 2.4 协程通信机制 三、协程状态及状态切换 3.1 协程状态 3.2 状态切换 四、协程创建 五、协程调度分析 5.1 源码分析 5.2 逻辑图分析 六、协程通信 6.1 协程发送消息…

通过acl设置阻止数据包通过

实验拓扑和信息如图&#xff08;配置信息参考上一章内容&#xff09; acl设置代码 AR4 系统是视图下 acl 2000 rule 5 deny source 10.10.10.1 0 接口0视图下 数据接收时 traffic-filter inbound acl 2000 测试结果

java中的并发同步方法

1、synchronized Object类的同步方法&#xff1a;wait()&#xff0c;notify() 2、Lock和Condition Lock是一个接口&#xff0c;实现类有ReentrantLock、ReentrantReadWriteLockCondition类的同步方法&#xff1a;await()&#xff0c;signal() 3、LockSupport LockSupport的…

javatest

day4 2. public class test {public static void main(String[] args) {Scanner sc new Scanner(System.in);System.out.println("**************");System.out.println("存期 年利率");System.out.println("一年 2.25");System.ou…

Chromium编译指南2024 Windows11篇-编译前的准备工作和Visual Studio安装(一)

前言 在这个数字化快速发展的时代&#xff0c;浏览器不仅是我们获取信息的窗口&#xff0c;更是开发者表达创意和技术实力的舞台。 Chromium是由Google于2008年发起的开源浏览器项目&#xff0c;致力于为用户提供更快、更安全、更稳定的网页浏览体验。 其作为开源浏览器项目…

实验八 Linux虚拟内存 实验9.1:统计系统缺页次数成功案例

运行环境&#xff1a; VMware17.5.1 build-23298084Ubuntu 16.04LTS ubuntu版本下载地址Linux-4.16.10 linux历史版本下载地址虚拟机配置&#xff1a;硬盘一般不少于40G就行 内核版本不同内核文件代码也有出入&#xff0c;版本差异性令c文件要修改&#xff0c;如若要在linux6.7…