通过RDS MySQL SQL洞察和审计排查如何丢失数据?

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 最近遇到多次业务方,反馈数据写入成功,但是需要查询使用时,数据确找不到了,所以需要确认数据什么不见了?
+关注继续查看

背景描述

最近遇到多次业务方,反馈数据写入成功,但是需要查询使用时,数据确找不到了,所以需要确认数据什么不见了?

排查方案

  1. 通过应用排查数据是否写入成功。
    1. 通过应用确认每次都是写入成功.
    2. 而且写入后,进行查询都是有数据的。
  1. 通过主键自增确认写入过数据。
    1. 确认主键自增都是有的,但是最后数据不见了。
  1. 查看binlog是否有提交记录。
    1. 确认binlog中没有相应的提交记录,说明最终没有提交成功。
  1. 通过SQL洞察和审计最终确认原因。(重点


SQL洞察和审计

RDS MySQL的SQL洞察和审计由数据库自治服务DAS提供,在全量请求和安全审计的基础上,融合了搜索、SQL洞察、安全审计以及流量回放和压测等功能,帮助您更好地获取SQL语句的具体信息、排查各种性能问题、识别高危风险来源、验证实例规格。

支持版本范围

  • RDS MySQL实例为高可用版、三节点企业版或集群版。

支持SQL记录

  • 开启SQL洞察和审计功能可以记录所有DQL、DML和DDL操作信息,这些信息是通过数据库内核输出,对系统CPU消耗极低。

SQL洞察与Binlog日志的区别

  • SQL洞察:
    • 类似于MySQL的审计日志,会统计所有DQL、DML和DDL操作信息,这些信息是系统通过网络协议分析所得。
    • SQL洞察不解析实际的参数值,在SQL查询量较大的时候会丢失少量记录。因此通过这种方式来统计增量数据可能会出现不准确的情况。
    • SQL洞察是在开始执行时就记录了,所以在显示提交事务时,若最后回滚或退出,就会出现数据没有,但是SQL洞察是有执行记录的。
  • Binlog日志:
    • 准确记录数据库所有的增、删、改操作信息以及恢复用户的增量数据。
    • Binlog是在事务commit时才会记录,所以binlog中记录的,一定是已经提交的记录。

实战场景

在事务中,插入数据,然后执行进行插入数据,最后没有commit,最终数据没有被提交。

1. 测试表:

CREATE TABLE `t11` (
  `c1` int NOT NULL AUTO_INCREMENT,
  `c2` varchar(100) DEFAULT NULL,
  `c3` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`c1`),
  KEY `idx_c2` (`c2`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COMMENT='TEST';

2. 执行的测试SQL:

set autocommit=0;
insert into t11(c2,c3)values('a','b');
commit;
insert into t11(c2,c3)values('a2','b2');
rollback;
insert into t11(c2,c3)values('a3','b3');
exit

3. 控制台SQL洞察分析

  1. 搜索条件
    探索条件使用得当可以快速找到问题原因。本次探索条件都是跟事务操作有关:
    Login:登录操作;
    LOGOUT:登出操作;
    SET:环境变量操作;
    ROLLBACK:未提的事务回滚;
    COMMIT:提交事务;
    线程ID:可以查看整个线程的操作逻辑

image


  1. 通过上面的搜索条件,获取关键数据

image

  1. 结论:
    通过SQL洞察与审计最终可以确定数据为什么不见了!


QA

Q:什么情况会导致出现rollback和没提交就退出了。

A:

  1. 业务代码缺陷,导致最终没有提交事务就自动退出或回滚了。
  2. SQL锁冲突,当会导致其它一个会话回滚。
  3. 会话没有最终执行commit操作就退出了。

解决方案:

  1. 优化调整业务逻辑,避免代码缺陷或锁冲突。
  2. 业务上在出现异常时,保留关键的日志,可以快速定位问题。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 存储 关系型数据库
MySQL - 动态SQL与预处理语句
MySQL - 动态SQL与预处理语句
13 0
|
SQL 存储 关系型数据库
MySQL下使用SQL命令进行表结构与数据复制实践
MySQL下使用SQL命令进行表结构与数据复制实践
16 0
|
10天前
|
SQL 关系型数据库 MySQL
mysql导出sql
mysql导出sql
16 0
|
21天前
|
SQL 关系型数据库 MySQL
【MySQL入门到精通-黑马程序员】MySQL基础篇-SQL概述及DDL
(精度指数的所有位数;标度指小数点后数的位数) 字符串类型
25 0
|
27天前
|
SQL 关系型数据库 MySQL
MySQL基本SQL语句4(DCL)
DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访 问权限。Host代表当前用户访问的主机, 如果为localhost, 仅代表只能够在当前本机访问,是不可以 远程访问的。 User代表的是访问该数据库的用户名。在MySQL中需要通过Host和User来唯一标识一 个用户。注意事项: 查询权限授权权限撤销权限......
30 0
|
27天前
|
SQL 关系型数据库 MySQL
MySQL基本SQL语句3(DQL)
DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记 录。 上面两句命令用法效果一致,AS可以省略不写。 三、聚合函数 1.常用的聚合函数 聚合函数对一组值执行计算并返回单一的值要注意的是:NULL值不参与所有的聚合函数运算,聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用。 四、分组查询 1.使用分组查询的语法 where与having区别注意事项: 五、排序查询 排序在日常开发中是非常常见的一个操作,
16 0
|
27天前
|
SQL 关系型数据库 MySQL
MySQL基本SQL语句2(DML)
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进 行增、删、改操作。DML语句主要分为三个大类 本章做演示使用的是上一章创建的表,MySQL基本SQL语句1(DDL) 下面是原本数据库表中的内容 我们使用命令对表进行两个修改如果是需要对全表都进行修改的话,就不需要写条件语句where 此处删除id为1的数据,和前边的修改语句一样,在where后面加入条件 此处删除所有数据,就没有条件了,因此不用写where DML语句是对基
20 1
|
27天前
|
SQL 关系型数据库 MySQL
MySQL基本SQL语句1(DDL)
SQL(Structured Query Language)结构化查询语言,用于存取,查询,更新数据以及管理关系型数据库系统SQL指令分为四类DDL Data Defintion language 数据库定义语言 用于完成对数据库对象(数据表,数据库,视图,索引)的创建,删除,修改 DML Data Manipulation language 数据操作语言 用于完成对数据表中的数据添加,删除,修改 DQL
25 0
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL异常解决】MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案
【MySQL异常解决】MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案
66 0
|
2月前
|
SQL NoSQL 关系型数据库
【MySQL】七种SQL优化方式 你知道几条(下)
3.order by优化 MySQL 的排序,有两种方式: Using filesort : 通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区 sort
43 0
热门文章
最新文章
推荐文章
更多