数据库测试案例20240322-binlog_format为row binlog日志分析,主备数据不一致会导致复制出问题

1 测试概述

master-1,master-2表数据test如下:

9:26:  [mytest]> select *From test;
+----+------+
| id | name |
+----+------+
| 10 | 123  |
+----+------+
1 row in set (0.00 sec)

2 在主库将数据删除导致数据不一致

09:26:  [mytest]> set sql_log_bin=0;09:26:  [mytest]> delete from test;09:27:  [mytest]> select *From test;
Empty set (0.00 sec)
09:27:  [mytest]> set sql_log_bin=1;

3 主库插入测试数据


09:27:  [mytest]> insert into test (name) select '12asda';
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 009:27:  [mytest]> insert into test (name) select '12asddadaa';
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 009:27:  [mytest]> insert into test (name) select '12asdaa';
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 009:27:  [mytest]> insert into test (name) select '121asdaa';
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 009:27:  [mytest]> select * from test;
+----+------------+
| id | name       |
+----+------------+
| 14 | 12asda     |
| 15 | 12asddadaa |
| 16 | 12asdaa    |
| 17 | 121asdaa   |
+----+------------+
4 rows in set (0.00 sec)此时备库test表数据如下:
9:28:  [mytest]> select *From test;
+----+------------+
| id | name       |
+----+------------+
| 10 | 123        |
| 14 | 12asda     |
| 15 | 12asddadaa |
| 16 | 12asdaa    |
| 17 | 121asdaa   |
+----+------------+
5 rows in set (0.00 sec)

4 主库执行delete from表操作

09:35:  [mytest]> delete from test;
Query OK, 4 rows affected (0.01 sec)09:35:  [mytest]> select *From test;
Empty set (0.00 sec)备份库查询test
09:28:  [mytest]> select *From test;
+----+------+
| id | name |
+----+------+
| 10 | 123  |
+----+------+
1 row in set (0.01 sec)09:36:  [mytest]> 

5 查看二进制文件内容

主库

09:39:  [mytest]> system mysqlbinlog --no-defaults --start_position=1765 -v -v --base64-output=DECODE-ROWS /data/master-1-bin.000004
# The proper term is pseudo_replica_mode, but we use this compatibility alias
# to make the statement usable on server versions 8.0.24 and older.
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 233
#240321  9:18:10 server id 125  end_log_pos 126         Start: binlog v 4, server v 8.0.36 created 240321  9:18:10 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
# at 1765
#240321  9:35:38 server id 125  end_log_pos 1819        Table_map: `mytest`.`test` mapped to number 91
# at 1819
#240321  9:35:38 server id 125  end_log_pos 1921        Delete_rows: table id 91 flags: STMT_END_F
### DELETE FROM `mytest`.`test`
### WHERE
###   @1=14 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2='12asda' /* VARSTRING(40) meta=40 nullable=1 is_null=0 */
### DELETE FROM `mytest`.`test`
### WHERE
###   @1=15 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2='12asddadaa' /* VARSTRING(40) meta=40 nullable=1 is_null=0 */
### DELETE FROM `mytest`.`test`
### WHERE
###   @1=16 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2='12asdaa' /* VARSTRING(40) meta=40 nullable=1 is_null=0 */
### DELETE FROM `mytest`.`test`
### WHERE
###   @1=17 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2='121asdaa' /* VARSTRING(40) meta=40 nullable=1 is_null=0 */
# at 1921
#240321  9:35:38 server id 125  end_log_pos 1948        Xid = 36
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
09:39:  [mytest]> 

slave数据库已经commit,查看传过来的日志也是上述日志。执行的sql语句为上述一条一条的delete语句。

6 主库插入主键为备库有数据导致冲突

09:42:  [mytest]> insert into test values (10,'dadadada');
Query OK, 1 row affected (0.05 sec)


7 slave数据库sql线程报错冲突

09:42:  [mytest]> insert into test values (10,'dadadada');
Query OK, 1 row affected (0.05 sec)备份数据库09:43:  [mytest]> show slave status \G
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 192.168.1.25Master_User: rootMaster_Port: 3306Connect_Retry: 60Master_Log_File: master-1-bin.000004Read_Master_Log_Pos: 2226Relay_Log_File: relay-1.000009Relay_Log_Pos: 2122Relay_Master_Log_File: master-1-bin.000004Slave_IO_Running: YesSlave_SQL_Running: NoReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 1062Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction '552561c8-df9f-11ee-be05-000c29947a85:24' at source log master-1-bin.000004, end_log_pos 2199. See error log and/or performance_schema.

8 问题处理

在slave数据库进行如下处理,保障和主库数据保持一致。

09:44:  [mytest]> set sql_log_bin=0;  --因为我这边是双主,所以要不生成日志
Query OK, 0 rows affected (0.00 sec)09:44:  [mytest]> delete from test;
Query OK, 1 row affected (0.00 sec)09:44:  [mytest]> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)09:44:  [mytest]> start slave ;
Query OK, 0 rows affected, 1 warning (0.01 sec)09:45:  [mytest]> select *From test;
+----+----------+
| id | name     |
+----+----------+
| 10 | dadadada |
+----+----------+
1 row in set (0.00 sec)09:45:  [mytest]> 

9 mysql8 auto increment新特性

09:45:  [mytest]> insert into test (name) select '123';
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 009:46:  [mytest]> insert into test (name) select '321';
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 009:46:  [mytest]> select *From test;
+----+----------+
| id | name     |
+----+----------+
| 10 | dadadada |
| 18 | 123      |
| 19 | 321      |
+----+----------+
3 rows in set (0.00 sec)09:46:  [mytest]> 

自增变量持久化 max(primary_key)+1 已经从18 19 开始了

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

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

相关文章

git的实际应用场景

本文章的场景主要来源于实际工作&#xff0c;用于记载回看&#xff1b;持续更新&#xff0c;最后更新日期&#xff1a;2024-03-23软件&#xff1a;Git BASH、GitK、Git GUI三者配合使用 1、git reset < file > 作用&#xff1a;把文件从暂存区状态重置为工作区状态&…

对象操作篇

文章目录 9.1 dir()9.2 hash()9.3 help()9.4 id()9.5 type() 9.1 dir() dir() 是 Python 中的一个内置函数&#xff0c;用于返回一个对象的所有属性和方法的列表。当dir()不带参数调用时&#xff0c;它会返回当前作用域中的变量、方法和定义的类型列表。如果dir()带有一个参数…

从零开始学HCIA之网络自动化02

1、Python 是一种解释型&#xff08;即不需要编译环节&#xff09;的、面向对象&#xff08;即支持面向对象的风格或代码&#xff09;的、动态数据类型的高级程序设计语言。对于所谓的高级程序设计语言&#xff0c;你可以理解为“同声传译”的过程。 2、Python标准库很庞大&am…

Shut down, sleep, or hibernate your PC 关闭、睡眠或休眠

最近一段时间没有整服务器了~自己开始捉摸18年买的笔记本-x280&#xff0c;除了发现usb type c和thunderbolt 3接口的不一样外&#xff0c;也开始研究这个待机的功能了~找了官方文档&#xff0c;做个简易的翻译&#xff0c;给大家一起看看学习把。 官方文档URL&#xff1a; S…

Docker搭建LNMP环境实战(02):Win10下安装VMware

实战开始&#xff0c;先安装 VMware 虚拟机。话不多说&#xff0c;上手就干&#xff01; 1、基本环境检查 1.1、本机Bios是否支持虚拟化 进入&#xff1a;任务管理器- 性能&#xff0c;查看“虚拟化”是否启用&#xff0c;如果已启用&#xff0c;则满足要求&#xff0c;如果未…

【Swagger】接口文档生成

文章目录 一、前后端分离开发流程二、YApi导入接口文档三、Swagger3.1 介绍3.2 使用步骤3.2.1 导入 knife4j 的maven依赖3.2.2 在配置类中加入 knife4j 相关配置3.2.3 配置类中设置静态资源映射3.2.4 访问测试 3.3 常用注解3.4 全局参数设置 四、YApi 与 Swagger 一、前后端分离…

Day18:LeedCode 513.找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树

513. 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 思路:出该二叉树的 最底层 最左边 节点的值找出深度最大的第一个结点(左结点先遍历) 方法一…

一个单生产-多消费模式下无锁方案(ygluu/卢益贵)

一个单生产-多消费模式下无锁方案 ygluu/卢益贵 关键词&#xff1a;生产者-消费者模型、无锁队列、golang、RWMutex 本文介绍一个“单生产(低频)-多消费”模式下的无锁哈希类方案&#xff0c;这个方案的性能优于golang的RWMutex&#xff0c;因为它永远不会因为“写”而导致与…

i2c-tools基本用法

一. 前言 前面调试一个I2C设备&#xff0c;用到了i2c-tools&#xff0c;觉得是一个调试I2C不错的工具&#xff0c;本文对i2c-tools的基本用法做一些介绍。i2c-tools是一些控制2C接口工具的集合&#xff0c;其中包括i2cdetect&#xff0c;i2cdump&#xff0c;i2cget&#xff0c;…

亚稳态及其解决办法

异步电路 亚稳态 亚稳态亚稳态的产生原因什么是同步异步信号怎么消除亚稳态 亚稳态 在数字电路中&#xff0c;每一位数据不是1&#xff08;高电平&#xff09;就是0&#xff08;低电平&#xff09;。当然对于具体的电路来说&#xff0c;并非1&#xff08;高电平&#xff09;就是…

ECMAScript与JavaScript辨析:标准与实现之辨

ECMAScript与JavaScript辨析&#xff1a;标准与实现之辨 目录 ECMAScript与JavaScript辨析&#xff1a;标准与实现之辨 一、引言 二、ECMAScript&#xff1a;脚本编程语言的标准蓝图 三、JavaScript&#xff1a;基于ECMAScript的实现 四、ECMAScript与JavaScript的交互关系及…

Notepad++ 如何调整显示字面大小

在 Notepad 上&#xff0c;可以使用 ctrl 加上鼠标的左键来滚动来进行调整。 如何恢复默 可以使用 Ctrl 加数字键盘上的 / 键 来恢复默认设置。 当然也可以通过菜单栏上 view 菜单下的 Zoom 选项。 上面的界面中可以看到我们的在 Notepad 中使用的选项。 Notepad 如何调整显示…

redis 如何保证数据同步(数据变化时)

redis 如何保证数据同步&#xff08;数据变化时&#xff09; 思路 1.新增、删除和修改都先对数据库进行操作&#xff0c;这时数据库的数据将域缓存中数据不同。 2.数据库进行变动后&#xff0c;返回结果&#xff0c;根据返回的结果判断数据库操作是否成功。 3.如果数据库操…

C++和Python计算金融数学方程算法模型

要点 C代码蒙特卡罗模拟金融产品估值&#xff0c;开发C并行计算模拟库。 算法伴随微分计算图及C代码实现释义&#xff1a;C应用经典的复合模式构建有向无环图&#xff0c;遍历有向无环图节点C实现&#xff0c;C使用懒惰评估计算次序&#xff0c;遍历代码实现&#xff0c;C代码…

图论复习(最短路、最小生成树)

图论复习 拓扑排序 原题链接&#xff1a;AcWing 848. 有向图的拓扑序列 - AcWing 在建图时&#xff0c;记录每个节点的入度&#xff0c;首先把入度为0的点都存到队列里。 然后在搜索时&#xff0c;每搜到一个点&#xff0c;就把这个点的入度 -1 &#xff0c;当它的入度变为…

Flutter开发进阶之瞧瞧BuildOwner

Flutter开发进阶之瞧瞧BuildOwner 上回说到关于Element Tree的构建还缺最后一块拼图&#xff0c;build的重要过程中会调用_element!.markNeedsBuild();&#xff0c;而markNeedsBuild会调用owner!.scheduleBuildFor(this);。 在Flutter框架中&#xff0c;BuildOwner负责管理构建…

计算机视觉之三维重建(2)---摄像机标定

文章目录 一、回顾线代1.1 线性方程组的解1.2 齐次线性方程组的解 二、透镜摄像机的标定2.1 标定过程2.2 提取摄像机参数2.3 参数总结 三、径向畸变的摄像机标定3.1 建模3.2 求解 四、变换4.1 2D平面上的欧式变换4.2 2D平面上的相似变换和仿射变换4.3 2D平面上的透射变换4.4 3D…

使用 VMWare 安装 Android-x86 系统(小白版)

文章目录 VMWare 介绍Android 系统介绍概述最终效果前置步骤开始安装 VMWare 介绍 VMware Workstation是VMware公司开发的一款桌面虚拟化软件。它允许用户在一台物理计算机上同时运行多个操作系统&#xff0c;每个操作系统都在自己的虚拟机中运行。这使得用户可以在同一台计算…

实例:NX二次开发使用链表进行拉伸功能(链表相关功能练习)

一、概述 在进行批量操作时经常会利用链表进行存放相应特征的TAG值&#xff0c;以便后续操作&#xff0c;最常见的就是拉伸功能。这里我们以拉伸功能为例子进行说明。 二、常用链表相关函数 UF_MODL_create_list 创建一个链表&#xff0c;并返回链表的头指针。…

认识String类

认识String类 前面我们学习了类和对象&#xff0c;这一小节咱们来谈String类 目录 认识String类前言一、String类的创建方式二、String引用类型的特点及方法1.存储内容2.String对象的比较3.字符串查找在这里插入图片描述4.转换&#xff08;一&#xff09;数字转为为字符串&…