mysql的日志有哪几类,作用是什么

说实话,我花了很多功夫才理解MySQL日志的四种类型。
您列出的四个类别都非常重要。
让我详细告诉你我的经历。

1 .错误日志 记得刚接手一个老项目的时候,半夜我就被运维电话吵醒了。
错误日志中存在“无法打开日志文件”警告。
当时我的手心出汗了——服务器甚至无法打开错误日志文件。
检查了半天,发现磁盘空间满了。
说实话,在这种紧急情况下,错误日志就是你的眼睛,可以直接告诉你服务器是否“宕机”了。
我习惯每天早上第一件事就是扫描错误日志,看看昨晚是否有任何红字警告。
这个我没试过,但是我知道如果权限设置不正确,比如日志文件权限不允许写入,那么日志就白写了。

2 .查询日志 我以前做过金融系统的项目,监管要求所有的SQL都必须记录。
当时查询日志多次导致磁盘爆裂——全日志模式下,每一次SELECT都被记录下来,数据量确实吓人。
后来改成只记录白名单查询,性能立马提升。
有趣的是,你注意到了吗? 有些公司实际上使用查询日志作为审计工具,他们甚至可以知道哪些SQL客户使用了哪些数据来检查。
但确实如你所说,这个日志在高并发下消耗很大。
当我们更改配置时,我们必须先进行压力测试,否则生产环境真的会卡住。

3 .慢查询日志 这绝对是性能优化的一颗“福星”。
记得有一次网上查一个用户的订单,一条SQL语句跑了8 秒,都是通过慢查询日志发现的。
当时我看到日志里飘着一条“SELECT FROM Orders WHERE user_id=xxx”的记录,后面跟着“Time: 8 000ms”——我当场怀疑是索引没有添加正确。
检查执行计划后,发现订单表的数据量扩大了,主键索引也没有了。
现在我们团队有个习惯,新写的SQL一定要慢跑查询日志确认没有问题,然后再投入生产。
然而,有一个陷阱需要注意。
默认情况下,慢查询日志只记录全表扫描。
该参数必须调整正确。

4 .二进制日志 这篇日志是我踩坑想出来的。
曾经有一段时间从库延迟严重。
运维直接将主库的二进制日志传输到从库。
结果,数据完全乱了——他们忘了设置gtid同步。
说实话,二进制日志是个好东西,但是使用的时候要小心。
我的一位客户有一个特别有趣的场景。
它们导出二进制日志以进行实时备份,在另一台服务器上运行分析环境,并将数据更改直接提供给报告系统。
不过,数据恢复时有一个小知识需要注意:如果数据库表结构发生改变,比如增加列,二进制日志中的事件格式就会改变,恢复时需要特殊处理。

最后,一些细节:这四种日志实际上可以相互印证。
比如我曾经看到慢查询日志中某个SQL语句的执行时间突然变长了,但是错误日志中却没有任何动静。
后来我发现磁盘I/O突然激增,导致所有写操作都排队。
如果当时只有慢查询日志,我可能会认为是SQL本身的问题。
因此,运行维护学生必须把这四块拼起来才能看。

第十一篇:MySQL事务中的redo与undo

结果:重复性确保了耐用性;保证不再重蹈覆辙。

重复:
操作:记录为崩溃恢复而提交的操作的物理更改。

配置:内存中的重做日志缓冲区和硬盘上的重做日志文件。

流程:更新时先写入Redo Log Buffer;然后在运行时删除重做日志文件。

参数:innodb_flush_log_at_trx_commit 控制提交期间的日志刷新行为。

然后:
功能:记录操作前数据的状态,用于回滚和MVCC。

存储:回滚部分。

类别:已弃用的安装和更新/然后删除。

删除线程:稍后清理页面并删除标识数据。

实用说明:调整 innodb_flush_log_at_trx_commit 以平衡性能和耐用性。

mysql日志redo log、undo log、binlog以及作用看这篇就可以啦

ACID 依赖于事务日志。
删除数据先写日志,不要直接修改文件。
仅在事务完成后才同步事务,并轮转日志文件。
单个文件不要超过2 GB,否则MySQL会崩溃。

提高效率:先修改内存,再记录日志。
顺序IO写入避免随机IO。
崩溃恢复:使用日志来恢复数据。

InnoDB 红色 olog: 缓冲区记录操作,提交磁盘刷新。
崩溃恢复使用red olog。
4 个1 GB文件组,4 GB容量。
fsync同步保证持久化。

binlog:用于主从同步。
记录逻辑操作,red olog记录物理操作。
复制三个线程:binlogdump、I/O、SQL。

实用提醒:监控日志文件大小并及时轮换。