python如何监控阿里云RDS数据库某个表格有无变化

我现在是用sql语句:select * from table_name where id = var来查询表格相应的值有无变化

感觉这样消耗很高

有没有更简单的方法来监控mysql的表格数据有无变化

看一下这个博客,望采纳,谢谢!

一些概念

CDC : Change Data Capture(改变数据捕获),可以识别提取从上次提取之后发生变化的数据

cdc 的两种模式:

同步:同步cdc主要是采用触发器 记录新增数据,基本能够做到实时增量提起

异步:异步cdc 通过分析已经提交的日志记录来得到增量数据信息,有一定的延时,并且提供了到 oracleStreams 的接口

源表(Source Table):业务数据库需要捕获数据的源表

变化表(Change Table):保存从源表捕获的变化数据

Mysql Binlog 研究

mysql-binlog 是mysql 数据库的二进制日志,用于记录用户对数据库操作的 sql 语句(除了查询语言)。可以使用mysql bin 命令查询二进制内容

binlog 的格式有三种: Statement,Row,Mixed

windows 下mysql5.7 启动 binlog : 参考

如何使用mysql binlog : 参考

Statement: 记录的是执行的语句

Row: 记录的是每行的修改记录,可能会产生大量日志

Mixed: Statement 与 Row 的结合

01. 查看 binlog_format

show variables like 'binlog_format'



02.查看是否开启 binlog

show variables like 'log_bin'



如果binlog没有开启,可以通过set sql_log_bin=1命令来启用;如果想停用binlog,可以使用set sql_log_bin=0

03.获取 binlog 文件列表

show binary logs



04.查看当前正在写入的 binlog 文件

show master status



05.查看第一个binlog日志内容

show binlog events

查看指定binlog 文件内容

show binlog events in 'mysql-bin.000002'



当停止或重启服务器时,服务器会把日志文件记入下一个日志文件,Mysql会在重启时生成一个新的日志文件,文件序号递增;此外,如果日志文件超过max_binlog_size(默认值1G)系统变量配置的上限时,

也会生成新的日志文件(在这里需要注意的是,如果你正使用大的事务,二进制日志还会超过max_binlog_size,不会生成新的日志文件,事务全写入一个二进制日志中,这种情况主要是为了保证事务的完整性);

日志被刷新时,新生成一个日志文件。

flush logs



使用 binlog:



将binlog 事件保存到mysql 文档存储或者mongodb

对二进制日志时间做出反应:异步触发器

maxwell 是一个实时抓取mysql  二进制日志 binlog ,并生成 json 格式的消息,作为生产者发送给kafka ,kinesis,rabitmq 等,参考 https://blog.csdn.net/wwwdc1012/article/details/88388552

除此之外,目前常用的 mysql binlog 解析工具主要有: canal , mysql_Streamer



canal 由 Java 开发,分为服务端与客户端,拥有众多的衍生程序,canal 需要自己编写客户端消费canal 解析到的数据。

maxwell 相对 canal 的优势是使用简单,将数据变更输出未 json 字符串,不需要编写客户端。

 

创建一个表来记录每一个数据表里面的最新修改或者增加的时间戳,那样通过查看时间戳有没有更新就知道对应的表有没有数据更新,如果需要知道具体是哪些数据被更新的话,可以在每一个数据表里面加一列,来记录该条数据更新的时间戳,那样需要查找具体的数据的时候可以用时间戳来筛选。