MySQL-日志

  • 前言
  • 一、错误日志(error log)
  • 二、慢查询日志(slow query log)
  • 三 、一般查询日志(general log)
  • 四、 事务日志
    • 重做日志(redo log)
    • 回滚日志(undo log)
  • 五、 二进制日志(bin log)/归档日志 => 数据同步和数据恢复
  • 总结


前言

日志用来做什么?

记录了很多关于程序运行状态的信息(正常、出错…)

  • 用于排错
  • 了解MySQL性能(速度)运行情况…
  • 数据的备份和恢复

一、错误日志(error log)

记录MySQL启动、关闭、运行过程中的错误信息
配置方式
my.cnf文件

[mysqld]
log-error=/var/log/mysqld.log

查看错误日志路径

root@test 15: 38>show variables like 'log_error';
±--------------±---------------------------+
| Variable_name | Value |
±--------------±---------------------------+
| log_error | /data/mysql/mysqld3308.err |
±--------------±---------------------------+
1 row in set (0.00 sec)


二、慢查询日志(slow query log)

记录MySQL中响应时间超过阈值的SQL语句信息

作用:记录消耗时间较长的SQL语句,为数据库性能提升提供了线索(DBA/开发人员)
配置方式

my.cnf

[mysqld]
slow_query_log=1 # on
slow_query_log_file=/data/mysql/mysqld_query.log
long_query_time=10 # 默认10s,如果sql语句执行超过10s,将会记录下来

分析慢日志:mysqldumpslow

查看与慢查询时间阈值

root@test 15: 48>show variables like '%long_query%';
±----------------±----------+
| Variable_name | Value |
±----------------±----------+
| long_query_time | 10.000000 |
±----------------±----------+

慢查询日志开关及路径

root@test 15: 48>show variables like '%slow_query%';
±--------------------±-----------------------------+
| Variable_name | Value |
±--------------------±-----------------------------+
| slow_query_log | ON |
| slow_query_log_file | /data/mysql/mysqld_query.log |
±--------------------±-----------------------------+


三 、一般查询日志(general log)

记录客户端连接服务端的信息以及执行SQL语句的信息
执行的SQL命令,执行结果(成功、失败原因)
从性能考虑,默认没有开启

[mysqld]
general_log=1
general_log_file=/data/mysql/mysqld_general.log

查看一般查询日志开关及路径

root@test 15: 48>show variables like '%general_log%';
±-----------------±-------------------+
| Variable_name | Value |
±-----------------±-------------------+
| general_log | OFF |
| general_log_file | /data/mysql/db.log |
±-----------------±-------------------+


四、 事务日志

重做日志(redo log)

是MySQL存储引擎InnoDB的事务日志
可以让MySQL拥有崩溃恢复的能力
比如MySQL实例挂了、宕机了,重启时InnoDB使用redo log恢复数据保持数据的一致性

redo log时当做更新操作时,就会写的日志。

查看 InnoDB 存储引擎中与刷盘策略相关的配置参数,默认为1

show variables like '%innodb_flush%';
innodb_flush_log_at_trx_commit= 1

当值为1时表示,只要事务提交成功,将redo log写入磁盘
即使系统崩溃,也不会丢失已提交的事务

当值为2时表示,当事务提交时,只把redo log buffer写入page cache
定期刷盘,若操作系统崩溃,可能丢失缓存中的数据

当值为0时表示,每秒刷写一次 redo log 到磁盘,事务提交时不主动刷盘。若系统崩溃,可能丢失最后 1 秒内已提交的事务

redo log 文件的大小?
大小固定,循环写入格式

为什么这么设计?
因为redo log记录的数据页上的修改,如果buffer pool中数据已经刷盘(写入磁盘),日志失效了。因此可以将其进行覆盖


回滚日志(undo log)

是MySQL存储引擎InnoDB的
起到回滚的作用,保证事务的原子性

1->2
当执行rollback时,2->1

当修改操作时,记录下对应所需要的信息
插入一条记录:至少记录这条记录主键 -> 回滚:找到主键删除
删除一条记录:记录下这条记录的所有信息 -> 回滚:将信息整理成INSERT SQL
修改一条记录:主键,旧值 -> 回滚:Update为旧值


五、 二进制日志(bin log)/归档日志 => 数据同步和数据恢复

数据以二进制方式存储在磁盘上逻辑日志,记录了用户对数据库写操作

二进制日志能完整记录数据变更历史,默认没有开启
表结构/数据 增、删、改 存储过程、函数

二进制日志的作用

  • 备份恢复
  • 主从复制
  • 日志审计场景(被攻击)

查询是否开启了二进制日志

root@test 16: 57>select @@log_bin;
±----------+
| @@log_bin |
±----------+
| 1 |
±----------+

二进制日志配置

[mysqld]
log_bin=/data/mysql/mysqld_binlog
binlog_format=ROW

STATEMENT:记录SQL语句
ROW: 记录每一行数据更改
MIXED:以上两者的混合

查看二进制日志的记录格式

root@test 17: 00>show variables like 'binlog_format';
±--------------±------+
| Variable_name | Value |
±--------------±------+
| binlog_format | ROW |
±--------------±------+

二进制日志很大,日志切割

查看与二进制日志大小限制相关的配置参数

root@test 17: 01>show variables like '%max_binlog%';
±---------------------------±---------------------+
| Variable_name | Value |
±---------------------------±---------------------+
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_size | 1073741824 | 1G
| max_binlog_stmt_cache_size | 18446744073709547520 |
±---------------------------±---------------------+

xxx.index => binlog目录
xxx.00001 => binlog文件

-rw-r----- 1 mysql mysql 157 8月 9 17:00 mysqld_binlog.000001
-rw-r----- 1 mysql mysql 33 8月 9 17:00 mysqld_binlog.index

查看有哪些binlog文件

root@test 17: 04>show master logs;
±---------------------±----------±----------+
| Log_name | File_size | Encrypted |
±---------------------±----------±----------+
| mysqld_binlog.000001 | 180 | No |
| mysqld_binlog.000002 | 157 | No |
±---------------------±----------±----------+
2 rows in set (0.00 sec)

root@test 17: 05>show binary logs;
±---------------------±----------±----------+
| Log_name | File_size | Encrypted |
±---------------------±----------±----------+
| mysqld_binlog.000001 | 180 | No |
| mysqld_binlog.000002 | 157 | No |
±---------------------±----------±----------+
2 rows in set (0.00 sec)

查看当前binlog文件

root@test 17: 05>show master status\G
*************************** 1. row ***************************
File: mysqld_binlog.000002
Position: 157
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

查看二进制日志

show binlog events in 'mysqld_binlog.000002' \G

*************************** 17. row ***************************Log_name: mysqld_binlog.000002          日志文件名 Pos: 1085                          pos起始位置Event_type: Xid                           事件类型Server_id: 1                             哪台服务在操作
End_log_pos: 1116                          pos结束位置Info: COMMIT /* xid=80 */           操作的内容

查看指定二进制日志文件

root@test 17: 09>show binlog events in 'mysqld_binlog.000002' from 924\G

解析和查看二进制二进制日志文件

mysqlbinlog -vv /data/mysql/mysqld_binlog.000002

-vv 选项表示以详细模式输出,会显示更完整的日志内容(包括行级变更细节)

自动清除策略

root@test 17: 18> show variables like '%expire_logs_days%';
±-----------------±------+
| Variable_name | Value |
±-----------------±------+
| expire_logs_days | 0 |
±-----------------±------+

设置为自动保留 7 天
[mysqld]
expire_logs_days=7

删除所有二进制日志

reset master

二进制如何写入磁盘

  1. 什么写二进制日志(INSERT/DELETE/UPDATE)
  2. 当执行以上操作 -> binlog_buffer -> 磁盘
    sync_binlog=0:由操作系统来决定什么时候写入磁盘
    sync_binlog=1:每次事务提交时都会调用fsync,刷新binlog写入磁盘
    sync_binlog=N:每N次事务提交时都会调用fsync,刷新binlog写入磁盘

查看二进制日志的同步策略配置

root@test 17: 20>show variables like "sync_binlog";
±--------------±------+
| Variable_name | Value |
±--------------±------+
| sync_binlog | 1 |
±--------------±------+
1 row in set (0.00 sec)


总结

Innodb引擎使用redo log保持事务持久性,undo log保证事务原子性
数据备份、集群(主备、主主、主从)都离不开binlog, 负责同步数据,保证数据一致性
当需要查找系统瓶颈时,可以通过slow query log分析
错误日志、一般查询日志

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95106.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95106.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95106.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式C语言编程:策略模式、状态模式和状态机的应用

概述 在没有面向对象语法的C语言中,策略(Strategy)模式和状态(State)模式都通过“上下文 接口”组合来模拟多态。 它们在代码结构上几乎一致,但设计意图和应用场景却差异很大。 本文分三部分深入剖析&…

人工智能、机器学习、深度学习:2025技术革命的深度解析

目录 人工智能、机器学习、深度学习:技术革命的深度解析 引言 第一部分:人工智能的起源与演进 1.1 人工智能的定义 1.2 人工智能的历史 1.3 人工智能的关键概念 a.知识表示(Knowledge Representation) b.搜索算法&#xf…

【Python】常用内置模块

1.os 文件目录 import os# 创建文件夹 os.mkdir(dir) # 判断文件是否存在 os.path.exists(path) # 列出文件夹下文件列表 os.listdir(dir)""" 常用 """ # 当前文件相对路径 os.getcwd()# 当前文件绝对路径 os.path.abspath(__file__)# 当前文…

(Python)爬虫进阶(Python爬虫教程)(CSS选择器)

源代码:#导入库 import requests from bs4 import BeautifulSoup import pandas as pd#爬虫函数 def scrape_books():#1.基本网址连接base_url "http://books.toscrape.com"#2.获取基本网址responserequests.get(base_url)#3.检查是否正常访问if respons…

第七节 自然语言处理与Bert

自然语言处理与BERT模型:从基础到实践入门 自然语言处理(NLP)的核心目标之一是让计算机理解人类语言的语义和上下文。本文将从基础的字词表示出发,逐步解析传统模型的局限性、Self-attention的突破性思想,以及BERT如何…

攻击者瞄准加密技术的基础:智能合约

虽然利用许多智能合约中的安全漏洞已经成为网络攻击者的长期目标,但越来越多的安全公司开始关注使用欺诈性或混淆的智能合约从加密货币账户中窃取资金的骗局。 根据网络安全公司 SentinelOne 本周发布的分析报告,在最近一次引人注目的攻击中&#xff0c…

基于开源AI大模型、AI智能名片与S2B2C商城小程序的零售智能化升级路径研究

摘要:在零售业数字化转型浪潮中,人工智能技术正从“辅助工具”向“核心生产力”演进。本文聚焦开源AI大模型、AI智能名片与S2B2C商城小程序的协同应用,提出“数据感知-关系重构-生态协同”的三维创新框架。通过分析智能传感、动态画像与供应链…

机器学习 朴素贝叶斯

目录 一.什么是朴素贝叶斯 1.1 从 “概率” 到 “分类” 二.朴素贝叶斯的数学基础:贝叶斯定理 2.1 贝叶斯定理公式 2.2 从贝叶斯定理到朴素贝叶斯分类 2.3 “朴素” 的关键:特征独立性假设 三、朴素贝叶斯的三种常见类型 3.1 高斯朴素贝叶斯&…

A Logical Calculus of the Ideas Immanent in Nervous Activity(神经网络早期的M-P模型)

哈喽,各位朋友大家上午好!今天我们要一起啃下这篇神经科学与逻辑学交叉领域的奠基之作——McCulloch和Pitts的《A Logical Calculus of the Ideas Immanent in Nervous Activity》。这篇论文篇幅不长,但每一个定理、每一个假设都像精密齿轮&a…

大语言模型提示工程与应用:提示工程-提升模型准确性与减少偏见的方法

语言模型可靠性优化 学习目标 在本课程中,我们将学习通过提示工程提升模型事实准确性、减少偏见的有效方法。 相关知识点 语言模型可靠性优化 学习内容 1 语言模型可靠性优化 1.1 事实准确性增强 LLM可能生成看似合理但实际虚构的内容。优化策略包括&#x…

遇到前端导出 Excel 文件出现乱码或文件损坏的问题

1. 检查后端返回的数据格式确认接口响应:确保后端返回的是二进制流(如 ArrayBuffer)或 Base64 编码的 Excel 文件,而非 JSON 字符串。用浏览器开发者工具(Network 标签)检查接口响应类型:正确的…

2025年Cloudflare WAF防护机制深度剖析:5秒盾绕过完全指南

2025年Cloudflare WAF防护机制深度剖析:5秒盾绕过完全指南 技术概述 Cloudflare作为全球领先的CDN和网络安全服务提供商,其WAF(Web Application Firewall)防护系统已经成为现代Web安全的标杆。特别是其标志性的"5秒盾"…

【Android调用相册、拍照、录像】等功能的封装

关于调用Android项目 关于Android中调用相机拍照、录像,调用相册选图等是比较繁琐的,为了减少代码冗余,肯定需要封装成工具类,最终使用大概如下,大部分代码使用Java编写,因为需要照顾到不适用kotlin的伸手…

Git 分支管理:从新开发分支迁移为主分支的完整指南

问题背景 我在使用 Git 进行开发时,由于原有的主分支遭到了污染,不得已在多方尝试之后,决定替换原有的主分支。创建一个新分支并完成了重要修改: 基于提交 0fcb6df0f5e8caa3d853bb1f43f23cfe6d269b18 创建了 new-development 分支…

nginx常见问题(四):端口无权限

当 Nginx 日志报错 bind() to 80 failed (13: Permission denied) 时,这通常是由于权限不足导致 Nginx 无法绑定到 80 端口(该端口为系统特权端口)。以下是详细的问题分析与解决方案:一、问题原因分析80 端口属于 系统特权端口&am…

【线性代数】线性方程组与矩阵——(3)线性方程组解的结构

上一节:【线性代数】线性方程组与矩阵——(2)矩阵与线性方程组的解 总目录:【线性代数】目录 文章目录9. 向量组的线性相关性与线性方程组解的结构9.1. 向量组及其线性组合9.2. 向量组的线性相关性9.3. 向量组的秩9.4. 线性方程组…

机器学习-----K-means算法介绍

一、为什么需要 K-Means?在监督学习中,我们总把数据写成 (x, y),让模型学习 x → y 的映射。 但现实中很多数据根本没有标签 y,例如:啤酒:热量、钠含量、酒精度、价格用户:访问时长、点击次数、…

Spring Security自动处理/login请求,后端控制层没有 @PostMapping(“/login“) 这样的 Controller 方法

一:前言 (1)Spring Security概念: Spring Security 是属于 Spring 生态下一个功能强大且高度可定制的认证和授权框架,它不仅限于 Web 应用程序的安全性,也可以用于保护任何类型的应用程序。 &#xff08…

idea开发工具中git如何忽略编译文件build、gradle的文件?

idea开发工具中: git显示下面这个文件有变更: ~/Documents/wwwroot-dev/wlxl-backend/java/hyh-apis/hyh-apis-springboot/build/resources/main/mapping/AccountRealnameMapper.xml 我git的根路径是: ~/Documents/wwwroot-dev/wlxl-backend/…

状态机浅析

状态机是处理状态依赖型行为的高效工具,通过结构化建模状态转换,解决了传统条件判断的冗余和混乱问题。它在设备控制、流程管理、协议解析等场景中表现优异,核心优势在于逻辑清晰、可扩展性强和易于调试。 一、介绍 1. 概念 状态机&#x…