滚雪球学MySQL[7.3讲]:数据库日志与审计详解:从错误日志到审计日志的配置与使用
全文目录:
- 前言
- 7.3 日志与审计
- 1. 日志类型与配置
- 1.1 错误日志(Error Log)
- 配置错误日志
- 使用场景
- 案例演示
- 1.2 慢查询日志(Slow Query Log)
- 配置慢查询日志
- 使用场景
- 案例演示
- 1.3 查询日志(General Query Log)
- 配置查询日志
- 使用场景
- 2. 审计日志的使用
- 2.1 启用审计日志
- 2.2 审计日志的应用场景
- 案例演示
- 3. 拓展与实际应用
- 3.1 日志的集中化管理
- 3.2 日志自动化审查
- 4. 实例分析:慢查询日志优化
- 小结
- 下期预告:8.1 存储过程与函数
前言
在上一期中,我们深入探讨了数据库的安全策略,特别是如何通过权限管理、加密和用户认证来保护数据库免受未授权的访问。然而,尽管这些预防性措施非常重要,但仅靠安全策略并不能完全规避数据库运行中的潜在问题和安全隐患。要确保数据库的长期稳定、安全运行,日志与审计成为不可或缺的工具。通过对数据库活动进行记录和审查,管理员可以及时发现并解决系统中的故障和异常行为。
本期文章将深入探讨日志与审计,具体涵盖日志的类型及配置(如错误日志、慢查询日志)以及审计日志的使用与配置。我们将通过实际案例演示如何使用这些日志工具进行问题追踪和性能优化,帮助大家全面掌握数据库的日志管理方法。
最后,我们将简要预告下期内容存储过程与函数,继续讨论数据库开发中的重要技术。
7.3 日志与审计
在数据库的运行过程中,日志记录了数据库的活动,包括正常操作、异常错误和安全事件。日志不仅可以帮助管理员追踪系统的运行状态,还能为故障排查和系统优化提供有力的依据。根据日志类型的不同,日志记录的重点也有所不同:
1. 日志类型与配置
数据库提供了多种日志类型,每种日志在管理和调优中扮演着不同的角色。主要的日志类型包括:
- 错误日志(Error Log):记录数据库运行过程中发生的错误和警告。
- 查询日志(General Query Log):记录每条执行的SQL语句。
- 慢查询日志(Slow Query Log):记录执行时间超出设定阈值的SQL查询。
- 二进制日志(Binary Log):记录所有数据修改操作,用于数据恢复和复制。
- 审计日志(Audit Log):记录用户活动、权限变更、查询等信息,主要用于安全审查。
1.1 错误日志(Error Log)
错误日志是最基本的日志类型,主要用于记录数据库启动、关闭以及运行过程中发生的严重错误和警告。错误日志在排查数据库启动问题、崩溃和连接失败等关键性问题时非常有用。
配置错误日志
在MySQL中,错误日志的默认配置通常已经启用,但可以通过修改my.cnf
配置文件来自定义日志路径和日志级别。例如:
[mysqld]
log-error=/var/log/mysql/error.log
错误日志文件记录了数据库系统的重要信息,包括数据库的启动、关闭操作、严重错误和警告等。
使用场景
- 启动和停止信息:错误日志会详细记录每次数据库的启动和关闭状态,如果数据库无法正常启动,错误日志是排查问题的首选工具。
- 系统故障排查:在系统崩溃或连接问题时,错误日志记录了详细的错误信息,帮助管理员快速定位故障原因。
案例演示
例如,当MySQL服务器在启动时未能加载配置文件my.cnf
,错误日志中可能会出现如下错误信息:
2024-10-01T08:30:15.123456Z 0 [ERROR] /usr/sbin/mysqld: Error while loading shared libraries: libmysqlclient.so: cannot open shared object file: No such file or directory
此时,管理员可以通过错误日志定位问题并解决文件缺失的错误。
1.2 慢查询日志(Slow Query Log)
慢查询日志是数据库性能优化的重要工具。它记录了所有执行时间超过设定阈值的查询。通过分析慢查询日志,数据库管理员可以识别出性能瓶颈并优化SQL查询。
配置慢查询日志
要启用慢查询日志,可以在MySQL的my.cnf
文件中进行以下配置:
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
slow_query_log
:启用慢查询日志功能。slow_query_log_file
:指定日志文件的路径。long_query_time
:设定查询执行时间超过多少秒会被记录,默认为2秒。
使用场景
- 性能调优:通过分析慢查询日志,管理员可以找到执行时间长的SQL语句,并通过创建索引或优化查询结构来提升查询性能。
- 定期性能审查:定期检查慢查询日志,可以帮助发现系统中的潜在性能问题,确保数据库能够高效运行。
案例演示
假设我们发现某个查询在慢查询日志中被记录:
# Time: 2024-10-01T12:12:12.123456Z
# Query_time: 12.345 Lock_time: 0.000 Rows_sent: 1000 Rows_examined: 100000
SELECT * FROM large_table WHERE id = 123;
这条查询耗时12秒,明显是慢查询。通过分析,可以发现该查询可能需要优化索引,或调整查询条件来提升性能。
1.3 查询日志(General Query Log)
查询日志记录了数据库执行的每一条SQL语句,包括数据查询和数据修改。查询日志是排查应用程序和数据库之间问题的有力工具,但由于记录了大量细节,它通常仅在调试时启用,以避免性能下降。
配置查询日志
可以在my.cnf
文件中启用查询日志:
[mysqld]
general_log = 1
general_log_file = /var/log/mysql/query.log
使用场景
- 问题排查:在调试数据库时,查询日志可以帮助管理员检查每一条SQL执行情况,找出错误或效率低下的查询。
- 应用程序调试:查询日志有助于开发人员了解应用程序在运行时发出的所有数据库请求。
2. 审计日志的使用
审计日志是一种专门用于安全审计的日志,记录数据库中的重要操作,包括用户登录、查询、修改数据和权限变更等。它主要用于满足合规性要求、进行安全分析和事件追踪。
2.1 启用审计日志
在MySQL中,审计日志通常通过插件或扩展功能启用。例如,在MariaDB中,可以通过以下方式启用审计日志:
[mysqld]
plugin-load-add = server_audit=server_audit.so
server_audit_logging = ON
server_audit_file_path = /var/log/mysql/audit.log
server_audit_events = CONNECT, QUERY, TABLE
server_audit_logging
:启用审计日志功能。server_audit_file_path
:指定审计日志文件的保存位置。server_audit_events
:设定要记录的事件类型,常见事件包括用户连接、SQL查询和表操作。
2.2 审计日志的应用场景
- 安全合规性:审计日志在金融、医疗等高敏感行业中非常重要,用于确保数据库活动符合规定的合规性要求。
- 异常行为监控:通过审计日志,管理员可以监控用户行为,识别潜在的安全威胁,如非法访问或恶意操作。
- 权限变更追踪:审计日志详细记录了数据库用户的权限修改情况,方便追溯权限问题的根源。
案例演示
假设某用户尝试访问敏感数据,审计日志会记录其查询操作,例如:
2024-10-01 14:14:14 root@localhost - CONNECT
2024-10-01 14:15:15 root@localhost - QUERY - SELECT * FROM confidential_data WHERE id=123;
通过审计日志,管理员可以清楚地看到用户的操作时间和查询内容,进一步分析是否存在安全风险。
3. 拓展与实际应用
3.1 日志的集中化管理
在大型分布式系统中,数据库日志可能分布在多个不同的服务器实例上。为了便于管理,许多企业会使用集中化的日志管理工具,如ELK Stack(Elasticsearch, Logstash, Kibana)或Graylog,将不同服务器的日志收集并汇总到一个中心位置进行管理和分析。
- ELK Stack:通过Logstash将分散在不同服务器上的日志数据收集并传输到Elasticsearch中进行索引,然后通过Kibana进行可视化分析和监控。
- Graylog:是另一种流行的日志管理系统,可以集中收集、存储和分析来自多个服务器的日志信息。
3.2 日志自动化审查
随着数据库系统和日志数据量的增加,人工审查日志变得非常困难且耗时。为了解决这一问题,企业可以引入自动化审
查工具或脚本,定期分析慢查询日志、错误日志和审计日志,并生成报告。此类工具能够帮助数据库管理员快速识别性能问题和安全隐患,避免潜在的威胁升级。
4. 实例分析:慢查询日志优化
假设在慢查询日志中发现了一条执行时间较长的查询:
SELECT * FROM products WHERE category_id = 10 AND price > 500;
通过分析日志,发现该查询执行时间过长,原因是缺少索引。为了优化查询,我们可以在category_id
和price
字段上创建索引:
CREATE INDEX idx_category_price ON products(category_id, price);
优化后,重新执行该查询,可以通过慢查询日志确认查询性能是否得到了显著改善。
小结
本期文章详细介绍了数据库中的日志类型及其配置,特别是错误日志和慢查询日志的使用,帮助管理员有效进行故障排查和性能调优。此外,审计日志提供了安全合规性审查的重要依据,能够帮助企业实时监控数据库用户行为,确保系统安全。
下期预告:8.1 存储过程与函数
日志记录与分析是数据库管理中的基础技能,而存储过程与函数则是提升数据库开发效率的核心工具。下期我们将深入探讨如何通过存储过程和函数来简化复杂的业务逻辑,提高数据库的可重用性和可维护性,敬请期待!
相关文章:
滚雪球学MySQL[7.3讲]:数据库日志与审计详解:从错误日志到审计日志的配置与使用
全文目录: 前言7.3 日志与审计1. 日志类型与配置1.1 错误日志(Error Log)配置错误日志使用场景案例演示 1.2 慢查询日志(Slow Query Log)配置慢查询日志使用场景案例演示 1.3 查询日志(General Query Log&a…...
网关的作用及其高可用性设计详解
引言 在现代分布式系统架构中,网关(Gateway)是一个关键组件。它作为客户端与后端服务之间的桥梁,不仅提供了请求路由、负载均衡、安全认证、流量控制等功能,还能够保护后端服务的安全和稳定性。网关的设计和高可用性对…...

Vortex GPGPU的github流程跑通与功能模块波形探索
文章目录 前言一、跟着官方文档走一遍二、cache子模块的波形仿真2.1 必要的文件内容解释2.2 cache子模块波形仿真——目前环境没啥问题了,就vcd因为配置问题出不来 总结 前言 看了那么久的verilog代码和文档,但还是没怎么接触过Vortex GPGPU全流程跑通与…...

10.2 Linux_并发_进程相关函数
创建子进程 函数声明如下: pid_t fork(void); 返回值:失败返回-1,成功返回两次,子进程获得0(系统分配),父进程获得子进程的pid 注意:fork创建子进程,实际上就是将父进程复制一遍作为子进程&…...

【深度学习基础模型】玻尔兹曼机BM|受限玻尔兹曼机RBM|深度置信网络DBN详细理解并附实现代码。
【深度学习基础模型】玻尔兹曼机Boltzmann machines (BM)|受限玻尔兹曼机Restricted Boltzmann machines (RBM)|深度置信网络Deep belief networks (DBN)详细理解并附实现代码。 【深度学习基础模型】玻尔兹曼机Boltzmann machines (BM)|受限玻尔兹曼机Restricted Boltzmann m…...

滑动窗口->dd爱框框
1.题目: 2.题解: 2.1为什么用滑动窗口优化: 因为元素都是大于0的 所以:当找到大于等于x的值时,right可以不用返回 两个指针都往后走;因此可以使用滑动窗口优化暴力解法 2.2:滑动窗口具体使用步…...

Python从入门到高手4.1节-掌握条件控制语句
目录 4.1.1 理解条件控制 4.1.2 if, elif, else 4.1.3 条件表达式 4.1.4 条件控制可以嵌套 4.1.5 if语句的三元运算 4.1.6 国庆节快乐 4.1.1 理解条件控制 在日常生活中,我们常喜欢说如果, "如果怎么样,那么就会怎么样"。"如果&qu…...

使用Qt实现实时数据动态绘制的折线图示例
基于Qt的 QChartView 和定时器来动态绘制折线图。它通过动画的方式逐步将数据点添加到图表上,并动态更新坐标轴的范围,提供了一个可以实时更新数据的折线图应用。以下是对代码的详细介绍及其功能解析: 代码概述 该程序使用Qt的 QChartView…...

【人人保-注册安全分析报告-无验证方式导致安全隐患】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...

Redis6 多线程模型
优质博文:IT-BLOG-CN 一、单线程的优缺点 对于一个请求操作Redis主要做3件事情:从客户端读取数据/解析、执行Redis命令、回写数据给客户端。所以主线程其实就是把所有操作的这3件事情串行一起执行,因为是基于内存,所以执行速度非…...

Python的异步编程
什么是协程? 协程不是计算机系统提供,程序员人为创造。 协程也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。 实现协程有那么几种方法: greenlet&…...

初识Linux · 进程等待
目录 前言: 进程等待是什么 为什么需要进程等待 进程等待都在做什么 前言: 通过上文的学习,我们了解了进程终止,知道终止是在干什么,终止的三种情况,以及有了退出码,错误码的概念ÿ…...

面向对象建模
UML 关系 UML 关系主要有:依赖、关联、聚合、组合、实现、继承。 类图 #mermaid-svg-jcAjcVcPmgmWDpcI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jcAjcVcPmgmWDpcI .error-icon{fill:#552222;}#m…...

MetaJUI v0.4 遇到的一些问题及解决办法记录
1、Unity3d 版本 2022.3.29f1。 2、MetaJUI v0.4 的下载,https://download.csdn.net/download/xingchengaiwei/89334848 3、将MetaJUI v0.4解压,用Unity3d 打开项目,会出现如下问题,按照图中提示操作即可。 4、打开工程后会出现…...

从零开始学习OMNeT++系列第二弹——新建一个OMNeT++的工程
上一篇第一弹介绍了OMNeT是什么以及如何安装OMNeT,现在来说一下如何新建一个自己的OMNeT的工程。 在 Omnet安装完成后,samples/tictoc 中有该例子的完整文件,你可以立刻运行该文件看他是怎么工作的,不过更推荐按接下来的步骤一步…...

【Android】布局优化—include,merge,ViewStub的使用方法
引言 1.重要性 在Android应用开发中,布局是用户界面的基础。一个高效的布局不仅能提升用户体验,还能显著改善应用的性能。随着应用功能的复杂性增加,布局的优化变得尤为重要。优化布局能够减少渲染时间,提高响应速度,…...

传奇外网架设教程带图文解说—Gee引擎
架设前准备工作: ①通过百度网盘下载版本、补丁、客户端和DBC2000。版本解压到D盘,客户端解压到D盘或是E盘,补丁先不解压 ②安装和配置DBC2000,有些版本不一定用的是DBC2000数据库,看引擎默认的数据库是哪个 DBC数据…...

MySQL | excel数据输出insert语句
需求 在日常生产运维过程中,有很多需要进行人工梳理的excel数据,到了研发这一侧需要转为sql语句进行数据修正,如何输出insert插入语句? 方案 在空白列插入,选择需要的列 "INSERT INTO tab_name1 (name, desc) …...

足球青训俱乐部管理:Spring Boot技术驱动
摘 要 随着社会经济的快速发展,人们对足球俱乐部的需求日益增加,加快了足球健身俱乐部的发展,足球俱乐部管理工作日益繁忙,传统的管理方式已经无法满足足球俱乐部管理需求,因此,为了提高足球俱乐部管理效率…...

一次实践:给自己的手机摄像头进行相机标定
文章目录 1. 问题引入2. 准备工作2.1 标定场2.2 相机拍摄 3. 基本原理3.1 成像原理3.2 畸变校正 4. 标定解算4.1 代码实现4.2 详细解析4.2.1 解算实现4.2.2 提取点位 4.3 解算结果 5. 问题补充 1. 问题引入 不得不说,现在的计算机视觉技术已经发展到足够成熟的阶段…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...