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

Mysql--运维篇--日志管理(连接层,SQL层,存储引擎层,文件存储层)

MySQL提供了多种日志类型,用于记录不同的活动和事件。这些日志对于数据库的管理、故障排除、性能优化和安全审计非常重要。

一、错误日志 (Error Log)

作用:
记录MySQL服务器启动、运行和停止期间遇到的问题和错误信息。

查看:

  • 默认情况下,错误日志的位置可以通过show variables like ‘log_error’;命令来查看。
  • 或者直接在配置文件(通常是my.cnf或my.ini)中查找log_error变量的值。

示例:

show variables like 'log_error';

运行结果:
在这里插入图片描述
找到路径,打开文件:
在这里插入图片描述

二、查询日志 (General Query Log)

作用:
记录所有发送到服务器的SQL语句,包括查询、更新等操作。它可以帮助你了解用户执行了哪些操作,但开启后会影响性能,因此通常只在调试时使用。

查看:

  • 可以通过SHOW VARIABLES LIKE ‘general_log%’;来查看是否启用了查询日志以及它的位置。
  • 使用SET GLOBAL general_log = ‘ON’;启用查询日志,SET GLOBAL general_log = ‘OFF’;禁用。
  • 日志内容可以实时查看,例如tail -f /path/to/mysql.log。

示例:

SHOW VARIABLES LIKE 'general_log%';

运行结果:
在这里插入图片描述

三、慢查询日志 (Slow Query Log)

作用:
记录那些执行时间超过指定阈值的SQL查询。这对于识别和优化性能瓶颈非常有用。

查看:

  • 使用SHOW VARIABLES LIKE ‘slow_query_log%’;来检查慢查询日志的状态和位置。
  • SET GLOBAL slow_query_log = ‘ON’;启用慢查询日志,SET GLOBAL slow_query_log = ‘OFF’;禁用。
  • 你可以设置long_query_time变量来定义“慢”的标准,默认是10秒,但是可以通过SET GLOBAL long_query_time = N;调整,其中N是你想要的时间秒数。
  • 还可以利用mysqldumpslow工具或者第三方工具如pt-query-digest来分析慢查询日志。

示例:

SHOW VARIABLES LIKE 'slow_query_log%';

运行结果:
在这里插入图片描述

四、二进制日志 (Binary Log, Binlog)

作用:
记录所有对数据库结构或数据进行更改的操作(DDL和DML),比如INSERT、UPDATE、DELETE等。主要用于复制(Replication)、恢复(Recovery)和审计(Audit)。

查看:

  • 使用SHOW BINARY LOGS;列出所有的二进制日志文件。
  • 使用SHOW MASTER STATUS;查看当前正在使用的二进制日志文件。
  • 使用mysqlbinlog工具读取和解析二进制日志的内容,例如mysqlbinlog /path/to/binlog-file。

示例:

SHOW BINARY LOGS;

运行结果:
在这里插入图片描述

五、中继日志 (Relay Log)

作用:
在主从复制环境中,从库会将主库的二进制日志中的事件复制到自己的中继日志中,然后再应用这些事件。这使得从库能够与主库保持同步。

查看:

  • 使用SHOW SLAVE STATUS;可以查看有关从库状态的信息,包括中继日志的文件名和位置。
  • 类似于二进制日志,可以使用mysqlbinlog工具来查看中继日志的内容。

六、重做日志 (InnoDB Redo Log)

1、概述

重做日志是InnoDB用于确保事务持久性的关键组件。它记录了所有对数据页的物理修改操作,确保在系统崩溃后可以重新应用这些修改,恢复数据的一致性。

特点:

  • 位置:重做日志文件通常位于ib_logfile0和ib_logfile1中。
  • Redo日志不是文本格式的日志,不能直接查看其内容。
  • 大小:每个重做日志文件的大小由innodb_log_file_size参数控制,默认值为48MB。
  • 数量:可以通过innodb_log_files_in_group参数指定重做日志文件的数量,默认为2。

2、工作原理

(1)、记录修改:每当对数据页进行修改时,InnoDB会先将修改操作记录到重做日志中。重做日志记录的是物理修改,而不是逻辑操作。
(2)、循环写入:重做日志采用循环写入的方式。当一个日志文件写满后,InnoDB会切换到下一个日志文件继续写入。所有日志文件写满后,InnoDB会回到第一个日志文件,覆盖旧的日志记录。
(3)、检查点(Checkpoint):为了防止重做日志被无限期地循环覆盖,InnoDB使用检查点机制。检查点是指重做日志的某个位置,所有在此之前修改的数据页都必须已经刷新到磁盘。通过这种方式,InnoDB可以确保在系统崩溃后能够从检查点开始恢复数据。
(4)、崩溃恢复:在系统崩溃后,InnoDB会在启动时读取重做日志,重新应用未完成的事务,恢复数据的一致性。这个过程称为前滚恢复(Roll Forward Recovery)。

3、配置参数

innodb_log_file_size:

  • 功能:设置每个重做日志文件的大小。
  • 推荐值:建议根据工作负载调整。对于高并发写入场景,可以适当增大该值,以减少日志切换的频率。默认值为48MB。

innodb_log_files_in_group:

  • 功能:设置重做日志文件的数量。
  • 推荐值:默认为2,通常不需要调整。如果需要更大的日志空间,建议增加单个日志文件的大小,而不是增加日志文件的数量。

innodb_flush_log_at_trx_commit:

  • 功能:控制事务提交时是否立即刷新重做日志到磁盘。
  • 取值:
    • 0:不刷新重做日志,性能最好,但安全性最低。如果系统崩溃,可能会丢失最近的事务。
    • 1(默认):每次事务提交时都刷新重做日志到磁盘,确保数据的安全性,但性能稍差。
    • 2:每次事务提交时将重做日志写入操作系统缓存,但不立即刷新到磁盘。适合追求性能的场景,但在系统崩溃时可能会丢失最近的事务。

innodb_log_buffer_size:

  • 功能:设置重做日志缓冲区的大小。重做日志缓冲区用于暂存尚未写入磁盘的重做日志记录。
  • 推荐值:默认为8MB,可以根据工作负载适当调整。较大的缓冲区可以减少磁盘I/O次数,提升写性能。

4、优化建议

  • 增大innodb_log_file_size:对于高并发写入场景,建议增大重做日志文件的大小,以减少日志切换的频率。较大的日志文件可以容纳更多的事务,减少磁盘I/O次数。
  • 调整innodb_flush_log_at_trx_commit:根据应用场景选择合适的值。如果你的应用对数据安全要求较高,建议保持默认值1;如果你的应用对性能要求较高,且可以容忍少量数据丢失,可以选择2或0。
  • 使用O_DIRECT刷新方法:通过innodb_flush_method = O_DIRECT配置,绕过操作系统的缓存,直接将重做日志写入磁盘,减少双重缓存问题,提升性能。

七、回滚日志 (InnoDB Undo Log)

1、概述

回滚日志是InnoDB用于实现事务的回滚和多版本并发控制(MVCC)的关键组件。它记录了事务的旧版本数据,确保未提交的事务不会影响数据库的状态,并支持多个事务同时读取不同的数据版本。
作用:Undo日志保存了旧版本的数据,以便在需要时回滚事务或提供多版本并发控制(MVCC)。这对于保证事务的ACID特性至关重要。

特点:

  • 位置:回滚段存储在系统UNDO表空间中,通常是ibdata1文件的一部分。
  • 和Redo日志一样,Undo日志也不是以文本形式存储的,所以不能直接查看。
  • 类型:
  • 插入回滚段:用于记录插入操作的旧版本数据。
  • 更新回滚段:用于记录更新操作的旧版本数据。

2、工作原理

(1)、记录旧版本数据:每当对数据进行插入、更新或删除操作时,InnoDB会将旧版本数据记录到回滚日志中。这些旧版本数据用于实现事务的回滚和多版本并发控制(MVCC)。
(2)、事务回滚:如果事务未提交或发生错误,InnoDB可以根据回滚段中的旧版本数据,将数据恢复到事务开始时的状态。
(3)、多版本并发控制(MVCC):InnoDB使用回滚段来支持多版本并发控制。当多个事务同时读取同一行数据时,InnoDB会根据事务的隔离级别返回合适的数据版本。例如,在读已提交(Read Committed)隔离级别下,事务只能看到已经提交的数据;而在可重复读(Repeatable Read)隔离级别下,事务在整个生命周期内都能看到相同的数据版本。
(4)、清理旧版本数据:当事务提交后,回滚段中的旧版本数据不再需要,InnoDB会定期清理这些数据,释放空间。

3、配置参数

innodb_undo_tablespaces:

  • 功能:设置独立的回滚表空间的数量。启用该参数后,回滚段将存储在独立的.ibd文件中,而不是系统表空间中。(表空间中包含三种类型:数据,索引,回滚段)
  • 推荐值:默认为0,表示回滚段存储在系统表空间中。如果你有大量长时间运行的事务,建议启用独立的回滚表空间,以减少系统表空间的碎片化问题。

innodb_undo_log_truncate:

  • 功能:控制是否定期截断回滚段。启用该参数后,InnoDB会定期清理不再需要的回滚段,释放空间。
  • 推荐值:默认为OFF,建议在生产环境中启用该参数,以减少回滚段的占用空间。

innodb_max_undo_log_size:

  • 功能:设置回滚段的最大大小。当回滚段超过该大小时,InnoDB会自动截断回滚段,释放空间。
  • 推荐值:默认为1GB,可以根据工作负载适当调整。

4、优化建议

  • 启用独立回滚表空间:如果你有大量长时间运行的事务,建议启用独立的回滚表空间,以减少系统表空间的碎片化问题。独立的回滚表空间可以更好地管理和优化回滚段的存储。
  • 定期截断回滚段:启用innodb_undo_log_truncate参数,定期清理不再需要的回滚段,释放空间。这有助于减少回滚段的占用空间,提升性能。
  • 调整回滚段大小:根据工作负载调整innodb_max_undo_log_size参数,确保回滚段不会占用过多的空间。对于大事务或长事务较多的场景,可以适当增大该值。

八、审计日志 (Audit Log)

作用:
记录用户的登录尝试、权限变更和其他安全相关的活动。并不是所有版本的MySQL都自带审计日志功能,某些企业版可能包含这个特性,或者可以通过插件实现。

查看:

  • 如果安装了审计插件,可以通过特定的命令或API来访问审计日志。
  • 具体的查看方法取决于所使用的插件或解决方案。

乘风破浪会有时,直挂云帆济沧海!!!


http://www.kler.cn/a/501614.html

相关文章:

  • 典型的 package.json 文件中的
  • java小知识点总结
  • 数据分析-使用Excel透视图/表分析禅道数据
  • 快速、可靠且高性价比的定制IP模式提升芯片设计公司竞争力
  • GO通过SMTP协议发送邮件
  • 【HTML+CSS+JS+VUE】web前端教程-16-HTML5新增标签
  • 如何使用商品详情API接口数据解析示例API接口URL
  • Kubernetes 基本概念
  • springboot图片上传存储至本地,返回前端地址回显
  • CSS语言的多线程编程
  • 递归构建树菜单节点
  • 键盘过滤驱动
  • 【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)
  • MATLAB语言的面向对象编程
  • Spring Boot中的Profile是如何工作
  • CMA软件测试技术体系建设思路与框架设计分享
  • 3D 建模在游戏开发领域的应用现状和未来发展趋势如下
  • Docker-compose Prometheus Grafana 安装
  • python在网络爬虫方面的应用
  • Flutter:文章详情页,渲染富文本
  • 邮箱发送验证码(nodemailer)
  • Babylon第二阶段测试网发布
  • Linux第一课:c语言 学习记录day10
  • AWS简介
  • 每年一问:Java日期格式化中周所在年引发的bug
  • 香港云服务器的ip可以更换的吗?