MySQL日志

MySQL-三大日志详解 三大日志 日志分为二类 逻辑日志:可以简单理解为记录的就是sql语句。 物理日志:因为mysql数据最终是保存在数据页中的,物理日志记录的就是数据页变更。 undo log undo log 记录数据被修改前的样子 作用 防止丢失数据,用于事务失败后的回滚 Innodb 存储引擎的最大特点就是支持事务,如果本次更新失败,那么该事务中的所有的操作都必须回滚到执行前的样子,也就是说当事务失败的时候,也不会对原始数据有影响 记录时机 在mysql将要更新的数据加载到缓冲区Buffer pool 时,同时 阅读详情

MySQL日志是记录数据库活动的重要工具,用于故障排查、性能分析、安全审计和数据恢复。MySQL提供了多种类型的日志,每种日志都有特定的用途和配置方式。合理配置和使用这些日志可以提高数据库的可维护性和安全性。

一、错误日志(Error Log)

错误日志是MySQL中最基本的日志,记录了MySQL服务器启动、运行和关闭过程中的错误信息、警告信息和通知信息,是排查服务器启动故障的主要依据。

1. 记录内容

- 服务器启动和关闭过程的信息

- 服务器运行中的错误信息(如连接失败、存储引擎错误等)

- 服务器运行中的警告信息(如配置参数不推荐使用)

- 重要的通知信息(如日志滚动、备份相关信息)

2. 配置方法

[mysqld]
# 启用错误日志(默认启用)
log_error = /var/log/mysql/error.log

# 错误日志级别(5.7.2+):debug, info, note, warning, error
log_error_verbosity = 3  # 3表示记录note、warning、error,默认值

3. 查看错误日志

-- 查看错误日志位置
SHOW VARIABLES LIKE 'log_error';

-- 查看最近的错误日志内容(Linux)
tail -n 100 /var/log/mysql/error.log

-- 实时查看错误日志(Linux)
tail -f /var/log/mysql/error.log

4. 日志轮转

错误日志会不断增长,需要定期轮转,避免占用过多磁盘空间:

-- 方法1:使用mysqladmin
mysqladmin -u root -p flush-logs

-- 方法2:使用SQL命令
FLUSH ERROR LOGS;

-- 方法3:配置logrotate(推荐)
# 创建配置文件 /etc/logrotate.d/mysql
/var/log/mysql/error.log {
    daily
    rotate 7
    missingok
    compress
    delaycompress
    postrotate
        mysqladmin -u root -p密码 flush-logs
    endscript
}

二、通用查询日志(General Query Log)

通用查询日志记录MySQL服务器执行的所有SQL语句和连接信息,包括客户端连接、断开连接以及执行的所有SQL命令。由于会记录所有操作,对性能有一定影响,通常不建议在生产环境长期开启。

1. 记录内容

- 客户端连接和断开连接的信息(包括客户端IP、用户名)

- 客户端执行的所有SQL语句(包括SELECT、INSERT、UPDATE、DELETE等)

- 服务器端执行的 administrative 命令

2. 配置方法

[mysqld]
# 启用通用查询日志
general_log = 1

# 日志文件路径
general_log_file = /var/log/mysql/general.log

# 日志输出方式:FILE(文件)或 TABLE(mysql.general_log表)
log_output = FILE

3. 动态开启/关闭

-- 查看当前状态
SHOW VARIABLES LIKE 'general_log';
SHOW VARIABLES LIKE 'general_log_file';

-- 临时开启
SET GLOBAL general_log = 1;

-- 临时关闭
SET GLOBAL general_log = 0;

-- 临时修改日志文件
SET GLOBAL general_log_file = '/var/log/mysql/new_general.log';

4. 使用场景

- 调试特定问题时临时开启,追踪应用程序执行的SQL语句

- 审计特定时间段的数据库操作

- 排查应用程序与数据库的交互问题

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

慢查询日志记录执行时间超过指定阈值的SQL语句,是性能优化的重要工具,帮助识别需要优化的低效查询。

1. 记录内容

- 执行时间超过long_query_time阈值的SQL语句

- 未使用索引的SQL语句(需开启log_queries_not_using_indexes)

- 查询的执行时间、锁定时间、扫描行数、返回行数等信息

- 执行查询的用户和主机信息

2. 配置方法

[mysqld]
# 启用慢查询日志
slow_query_log = 1

# 慢查询日志文件路径
slow_query_log_file = /var/log/mysql/slow.log

# 慢查询时间阈值(秒),默认10秒
long_query_time = 2

# 记录未使用索引的查询
log_queries_not_using_indexes = 1

# 记录管理语句(如ALTER TABLE, ANALYZE TABLE等)
log_slow_admin_statements = 1

# 日志输出方式:FILE或TABLE(mysql.slow_log表)
log_output = FILE

3. 动态配置

-- 临时开启慢查询日志
SET GLOBAL slow_query_log = 1;

-- 修改慢查询阈值(单位:秒,支持小数)
SET GLOBAL long_query_time = 1.5;

-- 开启记录未使用索引的查询
SET GLOBAL log_queries_not_using_indexes = 1;

4. 分析慢查询日志

① 使用mysqldumpslow工具(MySQL自带):

-- 查看使用最多的10条慢查询
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log

-- 查看执行时间最长的10条慢查询
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log

-- 查看扫描行数最多的10条慢查询
mysqldumpslow -s r -t 10 /var/log/mysql/slow.log

② 使用pt-query-digest(Percona Toolkit工具):

pt-query-digest /var/log/mysql/slow.log > slow_query_analysis.txt

四、二进制日志(Binary Log)

二进制日志(binlog)记录所有数据修改操作(如INSERT、UPDATE、DELETE),不记录查询操作(如SELECT)。主要用于数据恢复和主从复制,是MySQL高可用架构的基础组件。

1. 记录内容

- 数据库的所有修改操作(CRUD中的CUD操作)

- 操作的时间、日志位置等元数据

- 不记录SELECT、SHOW等只读操作

2. 二进制日志格式

① STATEMENT格式(基于语句):

记录执行的SQL语句,日志体积小,但某些函数(如NOW()、UUID())可能导致主从数据不一致。

② ROW格式(基于行):

记录每行数据的变化,能保证主从数据一致,但日志体积较大。MySQL 5.7+默认使用该格式。

③ MIXED格式(混合模式):

默认使用STATEMENT格式,对可能导致不一致的操作自动切换为ROW格式。

3. 配置方法

[mysqld]
# 启用二进制日志
log_bin = /var/log/mysql/binlog

# 服务器ID,主从复制必须配置,每个实例唯一
server-id = 1

# 二进制日志格式:STATEMENT, ROW, MIXED
binlog_format = ROW

# 二进制日志过期时间(天)
expire_logs_days = 7

# 单个二进制日志文件大小限制(默认1GB)
max_binlog_size = 100M

# 同步写入磁盘(安全性高,性能略低)
sync_binlog = 1

4. 二进制日志管理

-- 查看二进制日志列表
SHOW BINARY LOGS;

-- 查看当前使用的二进制日志
SHOW MASTER STATUS;

-- 查看二进制日志内容(需指定日志文件)
SHOW BINLOG EVENTS IN 'binlog.000001';

-- 刷新二进制日志(创建新的日志文件)
FLUSH BINARY LOGS;

-- 删除指定日志文件之前的所有日志
PURGE BINARY LOGS TO 'binlog.000005';

-- 删除指定日期之前的所有日志
PURGE BINARY LOGS BEFORE '2023-10-01 00:00:00';

-- 临时关闭二进制日志(当前会话)
SET SQL_LOG_BIN = 0;

-- 重新开启二进制日志(当前会话)
SET SQL_LOG_BIN = 1;

5. 二进制日志的应用

① 数据恢复:

-- 使用mysqlbinlog工具恢复数据
mysqlbinlog --start-datetime="2023-10-01 08:00:00" --stop-datetime="2023-10-01 09:00:00" /var/log/mysql/binlog.000001 | mysql -u root -p

-- 按位置恢复
mysqlbinlog --start-position=107 --stop-position=490 /var/log/mysql/binlog.000001 | mysql -u root -p

② 主从复制:二进制日志是主从复制的基础,主库通过二进制日志将数据变化同步到从库。

五、中继日志(Relay Log)

中继日志是从库(Slave)在主从复制过程中使用的日志,用于存储从主库(Master)获取的二进制日志内容,然后由从库的SQL线程应用这些日志。

1. 工作原理

- 从库的IO线程从主库读取二进制日志,写入本地中继日志

- 从库的SQL线程读取中继日志,执行其中的SQL语句,实现数据同步

- 中继日志格式与二进制日志完全相同

2. 配置方法

[mysqld]
# 中继日志文件路径
relay_log = /var/log/mysql/relaylog

# 中继日志索引文件
relay_log_index = /var/log/mysql/relaylog.index

# 中继日志自动删除(默认开启)
relay_log_purge = 1

# 从库延迟复制(秒)
delay_key_write = ALL

3. 中继日志管理

-- 查看从库状态(包含中继日志信息)
SHOW SLAVE STATUS\G

-- 手动删除中继日志
RESET SLAVE;  -- 停止复制并删除中继日志

-- 重置从库配置(保留中继日志)
RESET SLAVE ALL;  -- MySQL 5.5.16+

六、事务日志(InnoDB Logs)

InnoDB存储引擎有自己的事务日志,包括重做日志(Redo Log)和撤销日志(Undo Log),用于保证事务的ACID特性和崩溃恢复。

1. 重做日志(Redo Log)

重做日志记录InnoDB存储引擎的所有数据修改操作,用于崩溃恢复,确保已提交的事务不会丢失(持久性)。

(1)特点

- 物理日志,记录数据页的修改

- 循环写入,固定大小,不会无限增长

- 写入速度快,优先于数据文件写入

(2)配置方法
[mysqld]
# 重做日志文件路径(默认在数据目录)
innodb_log_group_home_dir = /var/lib/mysql/

# 单个重做日志文件大小
innodb_log_file_size = 500M

# 重做日志文件数量(通常为2)
innodb_log_files_in_group = 2

# 日志刷盘策略:1-事务提交时刷盘(最安全),0-每秒刷盘,2-提交时写入OS缓存
innodb_flush_log_at_trx_commit = 1

2. 撤销日志(Undo Log)

撤销日志记录数据修改前的状态,用于事务回滚和多版本并发控制(MVCC)。

(1)特点

- 逻辑日志,记录数据修改前的状态

- 用于事务回滚和读取历史版本数据

- MySQL 5.6+支持独立的撤销表空间

(2)配置方法
[mysqld]
# 启用独立撤销表空间(MySQL 5.6+)
innodb_undo_directory = /var/lib/mysql/undo/
innodb_undo_logs = 128  # 撤销日志段数量
innodb_undo_tablespaces = 4  # 独立撤销表空间文件数量

# 自动截断undo日志(MySQL 5.7+)
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 1G  # 触发截断的大小

七、日志管理最佳实践

1. 日志配置原则

- 错误日志:始终开启,用于排查服务器问题

- 二进制日志:建议开启,用于数据恢复和主从复制

- 慢查询日志:建议开启,用于性能优化,阈值根据业务调整

- 通用查询日志:默认关闭,仅在调试时临时开启

- InnoDB事务日志:按性能和安全性需求合理配置

2. 日志存储管理

- 将日志文件与数据文件存储在不同的磁盘,提高性能和安全性

- 配置合理的日志轮转策略,避免磁盘空间耗尽

- 重要日志文件定期备份,特别是二进制日志

- 对日志文件设置适当的权限(如mysql用户只读)

3. 性能与安全平衡

- 日志会消耗系统资源,特别是通用查询日志和详细的慢查询日志

- 对于写入频繁的系统,sync_binlog=1和innodb_flush_log_at_trx_commit=1会影响性能,但提供最高安全性

- 生产环境中避免开启log_queries_not_using_indexes=1,可能产生大量日志

4. 日志监控与分析

- 定期检查错误日志,及时发现潜在问题

- 建立慢查询日志分析机制,定期优化慢查询

- 监控日志文件大小,避免占用过多磁盘空间

- 结合监控工具(如Prometheus + Grafana)设置日志相关告警

5. 日志安全

- 限制日志文件的访问权限,防止敏感信息泄露

- 对于包含敏感数据的日志,考虑加密存储或定期清理

- 重要操作的日志(如权限变更)需长期保存,用于审计

【MySQL】MySQL日志的开启及查看 MySQL日志 阅读详情

相关推荐

不写代码,Cursor 10分钟开发1个APP!保姆级教程喂饭来了

做出第一个能运行的app,那种成就感真的很棒。虽然过程可能有点折腾,但只要耐心一点,问题都能解决。记住,遇到问题不要慌,现在有AI帮忙,大部分问题都能快速解决。重要的是迈出第一步,开始动手实践。你的第一个app可能很简单,但这是一个很好的开始。随着经验积累,你能做出的东西会越来越酷。现在就开始行动吧,说不定下个月你就能向朋友炫耀你自己做的app了!

chenhong007的博客 1551

mysql 日志级别_MySQL 日志初探

MySQL 日志初探零、概述MySQL 的日志分为 Error Log(错误日志),General Query Log(通用查询日志)、Slow Query Log(慢查询日志)、Binary Log(BinLog),各种日志各有各的用处和配置方式,接下来进行简单的介绍。一、Error Log(错误日志)错误日志记录了数据库服务器的启停、故障或异常情况及警告等信息。Error Log 默认开启,并...

weixin_30768979的博客 2626

自监督学习与上下文赌博机融合:视觉决策中的协同优化与实战指南

在机器学习领域,自监督学习(Self-Supervised Learning)通过设计前置任务从无标注数据中学习通用表征,已成为解决标注数据稀缺问题的关键技术。其核心原理是利用数据自身的结构生成监督信号,训练编码器提取鲁棒特征。上下文赌博机(Contextual Bandits)作为强化学习的简化分支,专注于在给定上下文信息下做出单步最优决策,平衡探索与利用,广泛应用于推荐系统、广告投放等场景。将两者结合,构建端到端的协同训练框架,能让视觉表征的优化直接服务于最终的决策目标,同时利用自监督任务作为正则化项提

weixin_33721344的博客 520

MySQL的日志的级别和写入方式是怎样的?底层原理是什么?

错误日志: 错误日志是记录MySQL服务器运行过程中出现的所有错误和警告信息的日志,包括启动、关闭、连接、查询等操作的错误和警告信息。重做日志: 重做日志是MySQL服务器在执行事务期间记录数据更改的日志,它的作用是在发生故障时,将未持久化到磁盘的数据重新写入磁盘,保证数据的一致性。以上日志的写入方式都采用了追加写入或循环写入的方式,这种写入方式可以避免频繁的随机写入操作,提高写入性能。同时,MySQL的日志也支持异步写入和缓存写入的方式,这种写入方式可以进一步提高写入性能和降低写入时的延迟。

长风破浪会有时的博客 356

告别单一帧:在CFD-POST中完整加载Fluent瞬态计算结果的实战指南

本文详细介绍了在CFD-POST中完整加载Fluent瞬态计算结果的实战指南,解决工程师常见的只能看到最后一帧数据的问题。通过Fluent端的正确设置和CFD-POST端的完整加载技巧,帮助用户高效处理瞬态数据,提升后处理效率。文章还提供了常见问题排查、性能优化和高级后处理技巧,适用于Workbench环境下的流体流动分析。

weixin_29284657的博客 540

从无人机到机械臂:深入聊聊LQR和LQG在实际项目里的那些‘坑’与最佳实践

本文深入探讨了LQR和LQG在无人机和机械臂等实际项目中的应用挑战与最佳实践。从系统建模的妥协艺术到调参的系统化方法,再到离散化的细节处理,文章分享了工程实践中的宝贵经验。特别强调了如何应对传感器噪声、未建模动态等现实问题,并提供了实用的调试工具和诊断流程,帮助工程师避免常见陷阱,提升控制系统的稳定性和性能。

weixin_28683391的博客 386

数据库日志级别解析:(2022.2.21-2022.2.27)

数据库的日志种类有:redo_log,undo_log,binlog,rely_log,error_log,slow_query_log,general_log; redo_log:重做日志,保证了事务的持久性,一般事务开启的时候,重做日志也启动了,持久化的三种方式分别为:1.每一秒进行持久化; 2.每一次commit的时候进行持久化;3.默认的为占用剩余内存空间一半的时候自动持久化; undo_log:回滚日志,保证了事务的原子性和隔离性,在事务执行失败或者回滚的时候,就会启动该日志...

yuhuochongsheng_的博客 1006

OpenHarness代码解读

Harness 是包裹在大模型之外、为其赋予完整执行能力的全套基础设施。模型负责提供智能与推理,Harness 则为模型提供感知、行动、记忆、工具与安全约束,使其从语言模型变成可自主完成复杂任务的实用智能体。我这里把向量数据库方案定义为:把对话片段、事件、偏好、工具结果等切成 memory chunks,做 embedding,存进向量库,查询时靠 ANN 相似度召回,再交给 LLM 读。AAAI 的综述类论文就明确指出,很多 LLM agent 的长期记忆就是这么做的。AAAI 期刊把文件系统方案。

qq_52053775的博客 188

mysql从高到底排序_Log日志级别从高到低排序 ERROR、WARN、INFO、DEBUG

说明:我们项目中没有加载,log日志有四个,大家可以在log4j文件中进行配置。日志记录器(Logger)是日志处理的核心组件。log4j具有5种正常级别(Level)。日志记录器(Logger)的可用级别Level (不包括自定义级别 Level), 以下内容就是摘自log4j API (http://jakarta.apache.org/log4j/docs/api/index.html):s...

weixin_33404919的博客 1061

InvocationException: GraphViz‘s executables not found【BUG已解决】

在机器学习框架中遇到了一个bug:安装了GraphViz模块后,在对着sklearn的决策树文档操作输出决策树模型结果时,还是爆出了如下的错误: 报错位置为: 报错语句为:网上很多答案告诉我们,要我们安装GraphViz模块,然而并不对! 如下,我安装了GraphViz,但是还是报错了。 所以说问题不在这,我查阅质料发现,改正这个bug的方法有一个:下文详细描述。解决bug为: 1.去graphviz.官方下载自己电脑符合的操作系统的安装包:2,安装的时候,记住自己安装在电脑里的位置:以我的电脑为例,我的

一键难忘的博客 3968

Altium Designer应用技巧5: Altium Live账号的获得

为了更好的应用Altium Designer,我们需要得到一个Altium Live账号,但从其英文或者中文官方网站取得,都需要7个工作日的时间,而且对于个人用户来说,并不是100%都能够获取到。本文介绍一种,从俄罗斯Altium官方网站获取账号的方法,可以立即使用。     1、点击http://live.altium-ru.com/#Join网址进入俄罗斯Altium官方网站,Altiu

snmplink的博客 1万+

mysql 日志

慢查询日志主要用来记录查询时间较长的日志。在开发环境下,可以开启慢查询日志来记录查询时间较长的查询语句,然后对这些语句进行优化。通过配置long_query_time的值,可以灵活地掌握不同程度的慢查询语句

一路向前 3357

华为OD机试真题 新系统2026-04-01 C语言 实现【空间占用计算】

员工A的磁盘空间经常被耗尽,他需要找到占用空间最大的目录或文件,然后决定如何清理文件释放空间。给定某一目录,请编写程序帮助他统计该目录内一级子目录和文件的占用空间,并返回目标目录一级子项(文件或子目录)中占用空间最大的项。

MISAYAONE的博客 231

mysql里面的日志

一、日志类型 MySQL 中有七种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。 二、日志作用 1.二进制日志(binlog) binlog 主要有以下作用: 复制:MySQL 主从复制在 Master 端开启 binlog,Master 把它的二进制日志传递给 slaves 并回放来达到 master-

pengchenxin的博客 8805

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【MySQL高级】MySQL的日志

二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从 , 就是通过该binlog实现的。二进制日志,MySQl8.0默认已经开启,低版本的MySQL的需要通过配置文件开启,并配置MySQL日志的格式。Windows系统:my.ini Linux系统:my.cnf。

dzqxwzoe的博客 2421

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MySQL的日志总结

前言 MySQL中有以下日志文件,分别是:   1:重做日志(redo log)   2:回滚日志(undo log)   3:二进制日志(binlog)   4:错误日志(errorlog)   5:慢查询日志(slow query log)   6:一般查询日志(general log)   7:中继日志(relay log)。 其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作有一定的关系,这三种日志,对理解MySQL中的事务操作有着重要的意义。 一、重做日志(red

红鱼儿的博客 2614

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【MySQL】日志

MySQL日志学习

gma999的博客 1116

MySQL的日志

慢日志主要是用于以文本形式记录数据库服务运行过程中,执行过程较慢的语句;利用慢日志信息生成的信息,可以在日常巡检过程中,通过日志定位SQL语句性能问题;:0关闭,1开启:义慢查询日志存储路径以及名称信息:查询耗时超时设置:没有走索引的语句会记录到慢查询日志中;0关闭,1开启。

qq_73797346的博客 1940

MySQL七种日志总结

mysql日志

myroncham的博客 5391

MySQL——MySQL 日志

参数文件(my.cnf / my.ini):MySQL的配置文件,包含服务器参数设置,如内存分配、连接数、字符集等;该文件通常在MySQL启动时读取;socket文件(.sock):用于进程间通信,允许客户端和MySQL服务器通过Unix套接字连接;TCP/IP 连接是通过网络协议进行的,适用于远程连接到MySQL服务器。这种方式用于客户端和MySQL服务器在不同的物理主机上时的连接。支持跨网络连接,可用于互联网或本地网络。

longool的博客 1204

【MySQL】日志详解

本文使用的MySQL版本是8。介绍了MySQL常见的日志。

p_fly的博客 1330

【MySQL】常见的MySQL日志都有什么用?

MySQL日志的内容非常重要,面试中经常会被问到。同时,掌握日志相关的知识也有利于我们理解MySQL 底层原理,必要时帮助我们排查解决问题。主要介绍了二进制i日志、慢查询日志、重做日志、撤销日志

关关的博客 2122

MySQL日志详解

错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。

一起努力共同进步,为了未来一起奋斗吧! 2029
上一篇: MySQL管理
下一篇: MySQL主从复制
learning_tom
博客等级 码龄1年 157粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值