MySQL · 最佳实战 · 审计日志实用案例分析

简介: 审计日志是RDS安全策略中非常重要的一环,它采集了数据库中所有的访问请求,包括常见的insert,update,delete,select,alter,drop,create语句,还有一些比如set,commit,rollback命令语句。有了这些日志后可以帮助我们进行问题回溯,分析问题。下面这则案例讲述如何使用审计日志来分析只读实例延迟问题,如果没有审计日志我们很难想象该问题该如何解决。

审计日志是RDS安全策略中非常重要的一环,它采集了数据库中所有的访问请求,包括常见的insert,update,delete,select,alter,drop,create语句,

还有一些比如set,commit,rollback命令语句。有了这些日志后可以帮助我们进行问题回溯,分析问题。下面这则案例讲述如何使用审计日志来分析只读实例延迟问题,如果没有审计日志我们很难想象该问题该如何解决。

问题描述:

一客户使用了2个RDS只读节点来承担业务的读流量,两个RDS的资源规格和业务流量完全一样,但是离奇的发现两个只读中有一个实例出现了延迟,让用户百思不得其解:

screenshot

只读Slave1出现延迟(图一):

screenshot

只读Slave2正常同步(图二):

screenshot

分析:

  1. 从上图监控可以看出延迟的曲线是一条直线,出现这样的直线通常是数据库的复制线程被block,导致slave一直无法完成与主库的数据同步,
    比如:主库的一个超大事务或DDL传到备库。

  2. 但是两个只读实例中只有一个只读实例出现延迟(图二),那么需要看一下出现延迟的时候只读实例当时的线程状态,以此来判断出问题所在。

问题排查:

  • 检查延迟只读实例slave2在延迟期间的数据库快照,发现数据库中有大量的Waiting for table metadata lock 等待
    (出现延迟时候可以使用show processlist将数据库的线程状态保存下来):
    表:xxx_user
    SQL:
SELECT user_id ...... FROM xxx_user where latest_time >= DATE_FORMAT('2016/06/15 23:40:09.000000000','%Y-%m-%d %k:%i:%s')  

screenshot

分析:

  1. 出现select等待MDL锁的原因通常是该表上有DDL操作,在DDL操作的过程中会加上一个MDL锁,但是如果该表上有大查询,大事务或者未提交的事务,则会导致DDL操作无法获得MDL锁,进而阻塞住该表上的所有查询。

  2. 由于当前实例是只读实例,所以DDL操作来源于主库,所以我们看一下主库是否真正在该表上有DDL操作。

  • 从后端审计日志中果然发现在2016-06-17 00:41:17 时主库做了一次DDL操作,但是该DDL操作执行非常快,那么很有可能DDL传递到只读节点的时候,由于只读节点上该表有一个未提交的事务或者查询,导致DDL操作被blcok。

screenshot

  • 在诊断快照中发现了一个事务在2016-06-16 19:17:09 就已经开始了,所以该事务很有可能就是导致DDL无法获取MDL锁的根源,那我们看一下这个事务做了哪些事情,线程id:1435503。

screenshot

  • 查看审计日志:

通过查看审计日志发现,线程id:1435503最后一次设置autocommit=0,时间是在16-06-16 14:10:03,之后对xx_user这个表执行了一个select,时间是在2016-06-16 19:17:09,但是一直没有提交,所以就是这个语句拿着MDL锁,直到2016-06-16 05:08:42 被kill后才被释放。该线程kill掉之后只读节点的延迟迅速下降。

screenshot

screenshot

screenshot

总结:

  1. 此次slave延迟的原因为只读节点有未提交的事务导致主库的DDL被阻塞,所以在日常做DDL的过程中一定要观察数据库中是否存在大查询,大事务或者未提交的事务。

  2. 善于使用show processlist来保存数据库的快照,如果该问题出现在自建数据库中,也是需要按照上述的方法进行排查,但是如果没有RDS的审计日志,排查问题起来会非常麻烦,可以通过审计日志去发现RDS中执行过的是有SQL,RDS不是黑盒子。

  3. 只读实例延迟排查常见思路:一看资源是否达到瓶颈;二看线程状态是否有锁;三判断是否存在大事务或未提交的事务。

  4. 要注意set autocommit=0的使用,一定要在语句结束后显式commit掉,不然会导致数据库中存在长时间未提交的事务,进而引发很多潜在的问题。

  5. 为了审计以及排查问题方便,建议打开审计日志。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
392 6
|
运维 安全 数据可视化
日志审查安排工具实战攻略:中小团队如何通过日志审查安排工具建立可控、安全的审查机制?
在审计敏感时代,日志审查安排工具成为安全运维与合规管理的关键利器。它实现审查任务的流程化、周期化与可视化,支持多系统协作、责任到人,确保“可控、可查、可追”的日志治理。工具如板栗看板、Asana、Monday 等提供任务调度、问题闭环与合规对接能力,助力企业构建高效、透明的日志审查体系,提升安全与合规水平。
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
1031 23
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
人工智能 运维 监控
Aipy实战:分析apache2日志中的网站攻击痕迹
Apache2日志系统灵活且信息全面,但安全分析、实时分析和合规性审计存在较高技术门槛。为降低难度,可借助AI工具如aipy高效分析日志,快速发现攻击痕迹并提供反制措施。通过结合AI与学习技术知识,新手运维人员能更轻松掌握复杂日志分析任务,提升工作效率与技能水平。
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
2123 0
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
671 158
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
12月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1779 152

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多