当前位置: 首页 > news >正文

MySQL Binlog实战应用之一

一、前言

开发业务系统尤其是与财务相关的系统,需要记录每一笔变更操作的日志,这一般有两种实现方案。

1、代码中通过AOP实现,提供注解跟踪记录日志,这种方案能够比较清晰地以业务角度记录操作日志,但记录变更前的旧值会比较困难。

2、对接Binlog日志解析数据生成日志数据,这种方案可以记录字段变更前旧值以及变更后的值,但日志不够清晰,主要是记录谁什么时间对哪张表哪个字段做了变更,变更前数据是什么,变更后数据是什么。

这两种方式我们项目中都有应用,Binlog这一系列文章主要围绕方案二讲解实施过程一些技术知识点。

二、MySQL Binlog 介绍

1、BinLog是什么

BinLog记录数据库所有表结构变更(create alter table)以及表数据修改(insert、update、delete)的二进制日志,它不会记录select这种对数据没有变更的操作。

最开始了解到BinLog是在2007年左右,当时公司会员数据库是1主3从架构,主从复制其实是依赖于binlog,印象比较深的就是主从复制延迟的问题。后来在做对接Vsearch时,数据增量当时有考虑通过BinLog完成同步,不过后来还是通过代码来实现增量数据同步到Vsearch中,具体原因现在想不起来了。

2、开启BinLog

安装的MySQL默认是没有开启BinLog的,可以用命令进行确认

最简单配置只要一行代码,在/etc/my.cnf配置文件[mysqld]下面加上一条语句

log-bin=mysql-bin即可开启binlog。

注:如果是5.7以上版本,需要设置server-id.如果是单机随便指定一个值如果是集群不要重复。

expire_logs_days:不指定时默认为0,binlog不会自动清理,可以根据实际情况修改这个值,超过天数就自动清理掉。

max_binlog_size:日志文件超过这个限定值并且是另一个事务写入时,会新建一个mysql-bin.00000X日志文件。

然后重启MySQL,log_bin变量的值变成ON就说明配置生效了。

3、三种模式

  • ROW

    记录的方式是行,即如果批量修改数据,记录的不是批量修改的SQL语句事件,而是每条记录被更改的SQL语句。

  • Statement

    记录每一条修改数据的SQL语句(批量修改时,记录的不是单条SQL语句,而是批量修改的SQL语句事件)

  • Mixed

    前两种模式的结合。在Mixed模式下,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种.

三、MySQLBinLog

BinLog是二进制文件,无法直接打开,可以使用MySQL自带的MySQLBinLog以查看文件内容。

往user表写入一条数据,然后update,然后执行如下命令。

mysqlbinlog -v --base64-output=DECODE-ROWS mysql-bin.000002

相关文章:

MySQL Binlog实战应用之一

一、前言 开发业务系统尤其是与财务相关的系统,需要记录每一笔变更操作的日志,这一般有两种实现方案。 1、代码中通过AOP实现,提供注解跟踪记录日志,这种方案能够比较清晰地以业务角度记录操作日志,但记录变更前的旧…...

【MySQL】MVCC机制(undo log,read view)

文章目录 前言一. 预备知识二. 模拟MVCC三. Read View四. RC与RR的本质区别结束语 前言 MVCC(多版本并发控制)是一种用来解决读-写冲突的无锁并发控制 MVCC为事务分配单向增长的事务ID,为每个修改保存一个版本,版本与事物ID相关联…...

gma 2 教程(三)坐标参考系统:3.投影方法

安装 gma:pip install gma 地图投影是利用一定数学法则把地球表面的经、纬线转换到平面上的理论和方法。由于地球是一个赤道略宽两极略扁的不规则的梨形球体,故其表面是一个不可展平的曲面,所以运用任何数学方法进行这种转换都会产生误差和变…...

蓝桥杯每日一题2023.11.2

题目描述 等差素数列 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题我们需要求出最小的公差并且长度为10, 1.确保序列开始为素数 2.确定枚举的个数 注意:序列中数只是d的变化,可以通过此计算将开始数字后9个数字都计算出来,d是…...

Leetcode67二进制求和

1104 代码&#xff1a; class Solution {public String addBinary(String a, String b) {StringBuffer ans new StringBuffer();int n Math.max(a.length(),b.length()),carry 0;for(int i0;i<n;i){carry i < a.length()?(a.charAt(a.length()-1-i)-0):0;carry i…...

线性代数 第五章 特征值与特征向量

一、特征值定义 二、特征值求法 定义法&#xff1b;&#xff1b;相似。 三、特征向量求法 定义法&#xff1b;基础解系法&#xff1b;&#xff1b;相似。 四、特征值性质 不同特征值的特征向量线性无关k重特征值至多有k个线性无关的特征向量 五、相似的定义 若&#xff…...

Python嵌入式数据库 / 轻量级数据库 / 小型数据库介绍(SQLite、Pandas DataFrame、TinyDB)(python数据库)

文章目录 Python嵌入式数据库/轻量级数据库介绍什么是嵌入式数据库/轻量级数据库&#xff1f;SQLitePandasTinyDB总结 Python嵌入式数据库/轻量级数据库介绍 在构建应用程序时&#xff0c;数据存储是必不可少的一部分。传统的方式是使用如MySQL、PostgreSQL这样的重量级数据库…...

USB PD v1.0快速充电通信原理

1 原理 本篇文章讲的快速充电是指USB论坛所发布的USB Power Delivery快速充电规范&#xff08;通过VBUS直流电平上耦合FSK信号来请求充电器调整输出电压和电流的过程&#xff09;&#xff0c;不同于本人发布的另一篇文章所讲的高通Quick Charger 2.0规范&#xff0c;因为高通QC…...

【华为】路由器以PPPoE拨号接入广域网

组网需求 用户希望以PPPoE拨号方式接入广域网&#xff0c;如图1所示&#xff0c;Router作为PPPoE客户端&#xff0c;得到PPPoE服务器的认证后获得IP地址&#xff0c;实现用户接入互联网的需求。内网网关地址&#xff08;即VLANIF1接口的IP地址&#xff09;为10.137.32.1/24。 …...

Linux内核分析(一)--内核架构和子系统

目录 一、引言 二、内核架构 ------>2.1、kernel源码获取 ------>2.2、cpuinfo ------>2.3、内核体系结构 ------>2.4、内核主要组件 三、内核源码及子系统 ------>3.1、整体结构与子系统 ------>3.2、cpuinfo ------>3.3、整体结构与子系统 -…...

【PyQt学习篇 · ⑨】:QWidget -控件交互

文章目录 是否可用是否显示/隐藏是否编辑是否为活跃窗口关闭综合案例信息提示状态提示工具提示“这是什么”提示 焦点控制单个控件角度父控件角度 是否可用 setEnabled(bool)&#xff1a;该函数用于设置QWidget控件的可用性&#xff0c;参数bool为True表示该控件为可用状态&…...

新版本IntelliJ IDEA(如2023)中运行Spring Boot找不到VM options进行端口的修改的问题解决

问题 如下图找不到VM options。 解决 进行如下操作即可。...

Swift语言配合HTTP写的一个爬虫程序

下段代码使用Embassy库编写一个Swift爬虫程序来爬取jshk的内容。我会使用proxy_host为duoip&#xff0c;proxy_port为8000的爬虫IP服务器。 使用Embassy库编写一个Swift爬虫程序可以实现从网页上抓取数据的功能。下面是一个简单的步骤&#xff1a; 1、首先&#xff0c;需要在X…...

【lvgl】linux开发板搭建环境

前言 本章介绍如何在linux开发板准备好了fb0的情况下移植lvgl。 抓取源码 git clone https://github.com/lvgl/lvgl.git git clone https://github.com/lvgl/lv_drivers.git git clone https://github.com/lvgl/lv_demos.git git clone https://github.com/lvgl/lv_port_lin…...

C之(10)CMocka-单元测试框架使用

CMocka基础使用 Author&#xff1a;Once Day Date&#xff1a;2023年6月15日 参考文档&#xff1a; GoogleTest User’s Guide | GoogleTest嵌入式自动化单元测试(2)-Cmocka - 知乎 (zhihu.com)使用 cmocka 进行单元测试 | 前尘逐梦 (qianchenzhumeng.github.io)cmocka - un…...

如何在idea中使用maven搭建tomcat环境

目录 一、创建maven项目 二、完善代码结构 三、引入依赖和插件 四、启动tomcat&#xff0c;运行项目 &#xff08;1&#xff09;点击添加配置 &#xff08;2&#xff09;点击左上角的加号&#xff0c;选择maven &#xff08;3&#xff09;输入运行命令 五、验证 一、创建…...

单点登录

单点登录&#xff08;Single Sign-On&#xff0c;简称SSO&#xff09;是一种可以让用户在多个应用程序和网站中使用同一组登录凭证的技术&#xff0c;即用户只需通过一次身份验证&#xff0c;就可以访问多个应用和网站。以下是单点登录的相关知识点&#xff1a; 1. 身份验证机…...

大数据(十):数据可视化(二)

专栏介绍 结合自身经验和内部资料总结的Python教程&#xff0c;每天3-5章&#xff0c;最短1个月就能全方位的完成Python的学习并进行实战开发&#xff0c;学完了定能成为大佬&#xff01;加油吧&#xff01;卷起来&#xff01; 全部文章请访问专栏&#xff1a;《Python全栈教…...

pytorch+LSTM实现使用单参数预测,以及多参数预测(代码注释版)

开发前准备&#xff1a; 环境管理&#xff1a;Anaconda python: 3.8 显卡&#xff1a;NVIDIA3060 pytorch: 到官网选择conda版本&#xff0c;使用的是CUDA11.8 编译器&#xff1a; PyCharm 简述&#xff1a; 本次使用seaborn库中的flights数据集来做试验&#xff0c;我们通过…...

腾讯云3年/5年特惠云服务器购买入口及攻略

腾讯云是腾讯旗下云计算品牌&#xff0c;为了吸引用户经常推出各种优惠活动&#xff0c;最吸引用户的还是特惠云服务器&#xff0c;下面给大家分享腾讯云3年/5年时长特惠服务器购买入口及教程&#xff01; 购买入口&#xff1a;传送门>>> 购买攻略&#xff1a; 进入…...

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项初赛模拟题)

2026年全国青少年信息素养大赛算法应用主题赛&#xff08;C赛项初赛模拟题&#xff09; 一、单项选择题&#xff08;共 15 题&#xff0c;每题 5 分&#xff09; 1. 数组下标与长征物资 题目内容 你需要记录红军某运输队一周&#xff08;7 天&#xff09;的粮食消耗量&#x…...

SpringBoot项目如何动态加载用户上传的Jar包?两种热部署方案对比

SpringBoot动态加载用户Jar包实战&#xff1a;两种热部署方案深度解析 在当今快速迭代的软件开发环境中&#xff0c;插件化架构正成为提升系统扩展性的关键策略。作为Java生态中最流行的框架之一&#xff0c;SpringBoot项目常面临需要动态加载用户自定义Jar包的需求场景。本文将…...

如何用OpenClaw的cron定时任务功能,每天自动发送待办清单

要实现“每天自动发送待办清单”&#xff0c;你需要将 Cron 定时触发器、待办管理 Skills​ 和消息推送渠道三者打通。这里提供两套最实用的方案&#xff0c;推荐优先使用 CLI 命令方案&#xff0c;它更稳定且易于调试。&#x1f680; 方案一&#xff1a;CLI 命令配置&#xff…...

Emergency Mode Troubleshooting: A Comprehensive Guide to Fixing System Boot Failures with journalctl

1. 紧急模式入门&#xff1a;当系统启动失败时该怎么办 那天早上我正准备部署一个关键服务&#xff0c;结果服务器突然卡在启动界面&#xff0c;屏幕上赫然显示"Welcome to emergency mode!"。作为运维老手&#xff0c;我立刻意识到这是Linux系统最后的自我保护机制…...

最近折腾了一波心音信号(PCG)分类的小项目,踩了不少坑也攒了点能直接跑的代码,今天掏出来跟大伙唠唠

MATLAB环境下一种基于连续小波变换和GoogLeNet的PCG信号分类算法 算法运行环境为MATLAB r2021b&#xff0c;共5种PCG信号&#xff0c;即normal, AR,AS,MR,MS五类 算法可迁移至金融时间序列&#xff0c;地震信号&#xff0c;语音信号&#xff0c;声信号&#xff0c;生理信号&…...

用快马平台十分钟复刻开源硬件官网原型:以龙虾openclaw为例

最近在做一个开源硬件项目"龙虾openclaw"的官网原型&#xff0c;想快速验证下设计概念。作为一个机械爪硬件项目&#xff0c;官网需要清晰展示产品特性和社区资源。传统开发流程可能需要好几天&#xff0c;但这次我用InsCode(快马)平台只花了十分钟就搞定了原型&…...

道德迷宫工程:让伦理审查永远卡关

当伦理成为迷宫在数字化转型的浪潮中&#xff0c;软件系统深度渗透医疗、金融、公共治理等核心领域。伦理审查本应是技术创新的安全阀&#xff0c;却被一种名为道德迷宫工程&#xff08;Ethical Maze Engineering&#xff09; 的策略系统性破坏——通过精心设计的流程复杂性、模…...

(新手)Linux 输入子系统实战教程 —— 02设备信息查询 + 输入事件读取(阻塞 / 非阻塞模式)

Linux 输入子系统实战教程 —— 设备信息查询 输入事件读取&#xff08;阻塞 / 非阻塞模式&#xff09;完整学习文档本文档基于Linux 输入设备事件读取程序编写&#xff0c;包含完整注释源码、核心原理、逐模块解析、真实实验现象、错误原因分析&#xff0c;专为嵌入式 Linux …...

Dify工作流HTTP请求配置进阶指南:从入门到精通

Dify工作流HTTP请求配置进阶指南&#xff1a;从入门到精通 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程&#xff0c;自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-Dify-Workflo…...

智能车竞赛避坑指南:直道、弯道、十字路口图像识别,我的MT9V03X摄像头调试血泪史

智能车竞赛避坑指南&#xff1a;MT9V03X摄像头调试的七个关键陷阱 全国大学生智能汽车竞赛中&#xff0c;图像识别环节往往是决定胜负的关键。作为曾经在赛场上摸爬滚打的参赛者&#xff0c;我深刻理解使用MT9V03X摄像头调试过程中的种种痛苦——那些深夜调试、反复修改参数却…...