mysql 日志总结

mysql 根据日志的功能,分6种

  1. 慢查询日志:记录所有执行时间超过 long_query_time 的所有查询,方便我们对查询进行优化
  2. 通用查询日志 :记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令,
    对我们复原操作的实际场景、发现问题、设置是对数据库操作的审计都有很大的帮助
  3. 错误日志:记录mysql服务的启动、运行或停止mysql服务时出现的问题,方便我们了解服务器的状态,从而对服务器进行维护
  4. 二进制日志 :记录所有**更改(delete、update)**数据的语句,可以用于主从服务器之间的数据同步,
    以及服务器遇到故障时数据 的无损恢复
  5. 中继日志 :用于主从服务器架构中,从服务器用来存放主服务二进制日志内容的一个中间文件。
    从服务器通过读取中继日志的内容,来同步主服务器上的操作
  6. 数据定义语句日志:记录数据定义语句执行的元数据操作

除二进制日志外,其他日志都是文本文件默认情况下 ,所有日志创建于mysql数据目录

日志的弊端

  1. 日志功能会降低mysql数据库的性能:例如,在查询非常频繁的mysql数据库系统中,如果开启了通过查询日志和慢查询日志,mysql数据库会花费很多时间记录日志

  2. 日志会 占用大量的磁盘空间:对于用户量非常大、操作非常频繁的数据库,日志文件需要的存储空间设置比数据库文件需要的存储空间还要大

日志的刷新(包含所有种类的日志,若默认名称的日志不存在了,会重新生成一个。前提对应的日志要开启)

mysqladmin -uroot -p flush-logs;

linux系统有时日志刷新报错解决方案

需要先执行 instal -omysql -gmysql -m0644 /dev/null /var/log/mysqld.log

慢查询日志 slow query log






通用查询日志 general query log

通过查询日志用来记录用户的所有操作 ,包括启动和关闭mysql服务、所有用户的连接开始时间和截止时间、发给mysql数据库服务器的所有sql指令等。当我们的数据库发生异常,查看通用查询日志,还原操作时的具体场景。

默认是关闭的。


错误日志 error log

在mysql数据库中,错误日志功能是默认开启的,而且,错误日志无法被禁止

默认情况下,错误日志存储在mysql数据库的数据文件下,名称默认为mysqld.log(linux系统) Windows 系统 是hostname.err

如果需要定制文件名,则需要在my.cnf 或my.ini 中配置:

mysqld\] ## 分组 log-error=\[path/\[filename\]\] # path 为日志文件所在的目录路径,filename为日志文件名 show variables like '%log_error%'; ![在这里插入图片描述](https://file.jishuzhan.net/article/1702789546271313922/6a2a40cf18ab48278ed53b756fe2627a.png)

二进制日志 又称变更日志 binary log 简称 bin log

binlog 作用
1. 数据恢复
2.主从复制


show variables like'%log-bin%';



日志参数设置

方式1 永久性方式 linux my.cnf windows my.ini

mysqld

log-bin=[path/]basename ##路径省略 默认是 mysql安装的数据路径

binlog_expire_logs_seconds=60s

max_binlog_size=100M


查看日志

show binary logs;

binlog 2种格式

**mysqlbinlog 工具查看 **

在binlog日志所在路径,cmd

mysqlbinlog -v 日志文件

**show binlog events 工具查看 **

show binlog events [in 'log_name'] [from pos] [limit [offset,] row_count]


在恢复数据之前 要刷新日志 flush logs,因为恢复数据,也会产生binlog日志, 刷新之后,恢复数据操作会记录在新的日志文件中

flush logs;

mysql数据库文件 cmd

从position 恢复 选了 show binlog events 查看日志方式

mysqlbinlog --start-position=xx --stop-position=xxxx --database=数据库名 日志文件 | mysql -uroot -p密码 -v 数据库名

根据时间戳 恢复 mysqlbinlog

mysqlbinlog --start-datetime='2023-01-01 15:39:22' --stop-datetime='2023-01-01 15:40:00'--database=数据库名 日志文件 | mysql -uroot -p密码 -v 数据库名

删除二进制日志

mysql 的二进制文件可以配置自动删除如下:

同时mysql也提高了安全的手动删除二进制文件的方法。purge master logs 只删除指定部分的二进制日志文件,Rest master 删除所有的二进制日志文件。

** purge master logs** 删除指定日志文件

purge {master | binary } logs TO '指定日志文件名'

purge master logs 'xxxxlog.0000xx'; 删除xxxxlog.0000xx之前创建的所有日志不包自身

purge {master | binary } logs before '指定日期'

show binary logs ; 信息中没有日期,需要借助 mysqlbinlog 工具

mysqlbinlog --no-defaults "日志文件名"

purge master logs before "20230915";20230915之前创建的日志文件会被删除。 不包含本身

** reset master 删除所有二进制日志文件 **

reset master

使用 reset master 语句,清空所有的binlog日志。 mysql同时会重新创建二级制文件,新的日志文件扩展名 将重新

从 xxx.00001 开始编号

相关推荐
不羁。。6 分钟前
【撸靶笔记】第七关:GET - Dump into outfile - String
数据库·笔记·oracle
yangchanghua1112 小时前
pgsql 如何查询今天范围内的数据(当天0点0分0秒 - 当天23点59分59秒....)
数据库·pgsql
larance2 小时前
SQLAlchemy 的异步操作来批量保存对象列表
数据库·python
python_chai2 小时前
从数据汇总到高级分析,SQL 查询进阶实战(下篇)—— 分组、子查询与窗口函数全攻略
数据库·sql·mysql
在努力的前端小白2 小时前
Spring Boot 敏感词过滤组件实现:基于DFA算法的高效敏感词检测与替换
java·数据库·spring boot·文本处理·敏感词过滤·dfa算法·组件开发
未来之窗软件服务2 小时前
自建知识库,向量数据库 (九)之 量化前奏分词服务——仙盟创梦IDE
数据库·仙盟创梦ide·东方仙盟·自建ai·ai分词
冒泡的肥皂5 小时前
MVCC初学demo(一
数据库·后端·mysql
.Shu.6 小时前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构
Bruce_Liuxiaowei8 小时前
MySQL完整重置密码流程(针对 macOS)
mysql
麦麦大数据9 小时前
F003疫情传染病数据可视化vue+flask+mysql
mysql·flask·vue·大屏·传染病