0

0

Mysql中错误日志、binlog日志、查询日志、慢查询日志简介

黄舟

黄舟

发布时间:2017-03-01 14:05:41

|

1805人浏览过

|

来源于php中文网

原创

前言

数据库的日志是帮助数据库管理员,追踪分析数据库曾经发生的各种事件的有力依据,mysql中提供了错误日志、binlog日志(二进制日志)、查处日志、慢查询日志。在此,我力求解决以下问题:各个日志的作用是什么?怎样去控制这些日志呢?怎样去使用这些日志提供的信息呢?

错误日志

1.错误日志作用

错误日志记录了mysql启动和停止时,以及服务器运行过程中发生任何严重性错误的相关信息。当数据库出现任何故障导致无法启动时候,比如mysql启动异常,我们可首先检查此日志。在mysql中,错误日志日志(还有其他日志),不仅仅可以存储在文件中,当然还可以存储到数据的表中,至于实现方式,笔者也正在研究中···

2.错误日志控制与使用

1.配置

通过log-error=[file-name]来配置(在mysql的配置文件中),如果没有指定file_name,mysqld使用错误日志名为host_name.err(host_name为主机名),并默认在参数datadir(保存数据的目录)指定的目录中写入日志文件。

比如我本地使用的是WampServer集成环境

其中log-error=D:/wamp/logs/mysql.log

如下图


如果我将log-error注释掉(#log-error=D:/wamp/logs/mysql.log),重启服务器,则可以查看到错误日志文件在datadir指定的目录下


2.查看错误日志

错误日志的格式:时间 [错误级别] 错误信息

如果你感觉通过mysql配置文件来定位错误日志所在位置比较麻烦,你完全可以通过再客户端通过命令来查看错误日志所在位置

使用命令式:show variables like 'log_error';


以下是mysql启动日志



二进制日志

1.作用

二进制日志(又叫binlog日志)记录了所有的DDL(数据定义语言)语句和DML(数据操作语言)语句,但是不包括数据查询语句,语句是以“事件”的形式保存的,它描述数据更改的过程。该日志的两个主要功能是:数据的恢复与数据的复制。

数据的恢复:MySQL本身具备数据备份和恢复功能。比如,我们每天午夜12:00进行数据的备份。如果某天,下午13:00,数据库出现故障,导致数据库内容丢失。我们可以通过二进制日志解决这个问题。解决思路是,可以先将前一天午夜12:00的数据备份文件恢复到数据库,然后再使用二进制日志回复从前一天午夜12:00到当天13:00对数据库操作。

数据复制:MySQL支持主从服务器间的数据复制功能,并通过该功能实现数据库的冗余机制以保证数据库的可用性和提高数据库德性能。MySQL正是通过二进制日志实现数据的传递。主服务器上的二进制日志内容会被发送到各个从服务器上,并在每个从服务器上执行,从而保证了主从服务器之间数据的一致性。

2.二进制日志控制与使用

1.开启

在默认情况下,mySQL不会记录二进制日志。怎样才能开启MySQL的二进制日志记录功能呢?

我们可以通过MySQL的配置文件来控制MySQL启动二进制日志记录功能。通过修改参数log-bin=[base_name]来启动MySQL二进制日志。mySQL会将修改的数据库内容的语句记录到以 base_name-bin.0000x为名的日志文件中,其中bin代表binary,后缀00000x代表二进制日志文件的顺序,每次启动Mysql,日志文件顺序会自动加1.如果base_name没有定义,MySQL将使用pid-file参数设置的值作为二进制日志文件的基础名字。

比如我将log-bin文件名定为mybinlog,那么将会在D:/wamp/bin/mysql/mysql5.6.17/data目录下,生成mybinlog.00000x的二进制日志文件。


二进制日志文件如下图


通过使用show variables like'log_bin'检查bin-log日志是否开启。



2.查看

MySQL二进制日志主要是供MySQL内部使用的,并不是为了数据库管理员阅读使用,因此,二进制日志与其他日志一个重要的不同就是,二进制文件的格式不是文本格式,其内容不能通过记事本直接查看,为了便于管理员管理,MySQL提供了mysqlbinlog工具查看二进制日志内容。

比如:mysqlbinlog D:\wamp\bin\mysql\mysql5.6.17\data\mybinlog.000003

执行结果如下:


现在我们来做一个测试,看看bin日志是否记录了我更新数据库的操作

比如我将数据表t2中id2=2的那行记录的id1改为5。然后在查询二进制日志文件,看是否记录了我的操作。


结果和明显,二进制文件记录了我修改数据库的操作,并且还记录了我是修改那个数据库里面的数据,至于我查询语句,它并没有记录。

3.二进制日志的删除

对应比较方繁忙的系统来说,由于每天生成大量的日志,这些日子如果长时间不清楚(或转移),将会对磁盘空间带来很大的浪费。因此,定期删除日志是DBA维护MYSQL数据库的一个重要的内容。

1.通过reset master 命令

执行reset master命令,该命令将删除所有的binlog日志。新的日志文件的编号从000001开始。

2.通过purege master logs to命令

通过执行purge master logs to'base_name.xxxxxx',删除‘xxxxxx'编号之前的所有日志。下面我将删除mybinlog.000003之前的所有日志。

如下图:


Hypotenuse AI
Hypotenuse AI

AI写作助手和文本生成器,根据关键词生成原创的、有洞察力的文章

下载


3.通过purge master logs beffor '时间' 命令

执行purge master logs beffor '时间' 表示删除'时间'之前的所有日志。比如删除2016-04-01 00:00:00之前的所有日志,命令如下:

purge master logs beffor '2016-04-01 00:00:00';

4.通过在配置文件中设置参数expire_logs_days

通过设置参数expire_logs_days=#,来指定日志过期的天数,过了指定的天数,日志将会被自动删除,这个是我比较喜欢的方式。比如设置expire_logs_day=3,代表3天后会被自动删除。

4.二进制日志重要参数说明

max_binlog_size:指定单个二进制日志文件的最大值,如果超过该值,则产生新的二进制日志文件,后缀名+1,并记录到.index文件中。

binlog_cache_size:缓存区大小

sync_binlog:表示没写缓存多少次就同步到磁盘,如果将N设置为1,表示采用同步写到磁盘的方式写进二进制文件。MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。

binlog-do-db:需要记录哪些数据库的日子,默认值为空,表示将所有库日志同步到二进制日志中。

binlog-ignore-db:需要忽略哪些数据库的日子

log-slave-update:搭建主从数据库时候需要配置

binglog_format:可选值有statement(记录逻辑sql语句)、row(记录表的行更动情况)、mixed

5.利用二进制日志进行数据恢复

在前面讨论过如果数据出现异常,想将其恢复到在某个时间点的数据,仅仅靠二进制往往是不够的,我们还需要的是在这个时间点之前备份的数据。

为了便于观察效果,现在我已经将我的数据库备份了,此时数据表t1中数据如下:


从现在开始,我需要对数据进行一些操作,比如更新或者是插入操作,操作后,t1数据如下图


此时,如果很不幸运的事情发生了,有黑客闯入进来了,将我的t1表数据全部删除了,那么我怎样得到的黑客删除之前的数据呢?


第一步:我需要将我的数据还原到我备份的数据,还原后结果如下:



第二步:我需要利用我二进制日志文件还原从数据备份那刻到被黑客攻击前的那刻的所有数据操作

执行:mysqlbinlog D:\wamp\bin\mysql\mysql5.6.17\data
\mybinlog.000004

分析二进制日志我们发现在'at 637'行,我们的数据遭到了黑客的攻击,所有我们只需要还原at 637行之前的所有操作,忽略之后的所有操作即可。


于是我们可以执行以下命令来恢复我们的数据:

mysqlbinlog D:\wamp\bin\mysql\mysql5.6.17\data\mybinlog.000004 --stop-pos=637|mysql -uroot -p**dequan


然后我们再来查看一下我们t1表的数据


总于大功告成了,但是这也提示我们,为了恢复数据的方便性,不仅仅需要开启二进制日志,也要定时保存数据。

关于二进制日志的补充:

1.我们还可以通过使用show binary logs命令查看当前还有哪些二进制日志。


2.我们可以通过show binlog events日志记录的事件

show binlog events查看的是所有日志记录的事件。如果想查询某个二进制日志记录事件,可以在后面加in+'日志名',如下图:



查询日志

1.功能描述

查询日志记录了客户端得所有语句。可以通过log=[file_name]来指定其位置,和其他日志一样,如果没有指定file_name值,日志将会写到datadir所在目录,默认的文件名师host_name.log,此日志对系统性能的影响较大,一般不会开启,在此,不细说。


慢查询日志

1.功能描述

慢查询日志是记录所有执行时间超过参数long_query_time(单位:秒),的SQL语句日志。为了获得表锁,而等待的时间,不算执行时间。我们可以通过log-slow-queries=[file_name]选项来启动慢查询日志功能。和前面的日志一样,如果没有指定file_name,那么日志目录在datedir目录下,且默认的名字为host_name-slow.log。

2.慢查询日志读取

查询慢查询开启状态


在配置文件中添加如下代码,开启慢查询

#开启慢查询
slow_query_log=ON
slow_query_log_file=D:/wamp/logs/myslowquery.log
long_query_time=1.5


(有的地方说是通过log-slow-queries=[file_name]来指定慢查询日志,但是我试过了,这样启动mysql会报错,可能是我在win系统下操作,又或可能我本地是使用WampServer集成环境安装的mysql、又或可能是使用的版本不一样)

查看慢查询时间设置


如果修改慢查询时间,可以使用set long_query_time=1.5;


为了便于查看效果,我们将慢查询时间限制改为0.15,然后我们写一个时间超过0.15的sql,最后查看日志,是否记录了该sql语句。

设置慢查询时间,以及执行相应的sql语句




在上面我共执行了3条SQL语句,现在我们再来看一下,慢查询日志如下


其只是记录了查询其中查询时间比较长的那条sql语句。

 以上就是Mysql中错误日志、binlog日志、查询日志、慢查询日志简介的内容,更多相关内容请关注PHP中文网(www.php.cn)!


热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

0

2026.02.11

Rust异步编程与Tokio运行时实战
Rust异步编程与Tokio运行时实战

本专题聚焦 Rust 语言的异步编程模型,深入讲解 async/await 机制与 Tokio 运行时的核心原理。内容包括异步任务调度、Future 执行模型、并发安全、网络 IO 编程以及高并发场景下的性能优化。通过实战示例,帮助开发者使用 Rust 构建高性能、低延迟的后端服务与网络应用。

1

2026.02.11

Spring Boot企业级开发与MyBatis Plus实战
Spring Boot企业级开发与MyBatis Plus实战

本专题面向 Java 后端开发者,系统讲解如何基于 Spring Boot 与 MyBatis Plus 构建高效、规范的企业级应用。内容涵盖项目架构设计、数据访问层封装、通用 CRUD 实现、分页与条件查询、代码生成器以及常见性能优化方案。通过完整实战案例,帮助开发者提升后端开发效率,减少重复代码,快速交付稳定可维护的业务系统。

3

2026.02.11

包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法
包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法

本专题汇总了包子漫画官网和网页版入口,提供最新章节抢先看方法、正版免费阅读指南,以及稳定访问方式,帮助用户快速直达包子漫画页面,无广告畅享全集漫画内容。

137

2026.02.10

MC.JS网页版快速畅玩指南_MC.JS官网在线入口及免安装体验方法
MC.JS网页版快速畅玩指南_MC.JS官网在线入口及免安装体验方法

本专题汇总了MC.JS官网入口和网页版快速畅玩方法,提供免安装访问、不同版本(1.8.8、1.12.8)在线体验指南,以及正版网页端操作说明,帮助玩家轻松进入MC.JS世界,实现即时畅玩与高效体验。

80

2026.02.10

谷歌邮箱网页版登录与注册全指南_Gmail账号快速访问与安全操作教程
谷歌邮箱网页版登录与注册全指南_Gmail账号快速访问与安全操作教程

本专题汇总了谷歌邮箱网页版的最新登录入口和注册方法,详细提供官方账号快速访问方式、网页版操作教程及安全登录技巧,帮助用户轻松管理Gmail邮箱账户,实现高效、安全的邮箱使用体验。

65

2026.02.10

铁路12306订票与退改全攻略_高效购票与座位选取技巧
铁路12306订票与退改全攻略_高效购票与座位选取技巧

本专题全面汇总铁路12306订票、退票、改签及候补订单操作技巧,提供车厢座位分布参考、抢票攻略和高铁安检注意事项,帮助新手用户快速掌握高效购票与退改流程,提高出行效率和体验。

78

2026.02.10

TensorFlow2深度学习模型实战与优化
TensorFlow2深度学习模型实战与优化

本专题面向 AI 与数据科学开发者,系统讲解 TensorFlow 2 框架下深度学习模型的构建、训练、调优与部署。内容包括神经网络基础、卷积神经网络、循环神经网络、优化算法及模型性能提升技巧。通过实战项目演示,帮助开发者掌握从模型设计到上线的完整流程。

1

2026.02.10

Vue3组合式API与组件开发实战
Vue3组合式API与组件开发实战

本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

13

2026.02.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.2万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 830人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号