MySQL的日志文件
本文将重点介绍MySQL的日志文件类型,并讲解其作用,并结合一定实操演示,相信跟着做下来你会对MySQL有更深的理解。
文件的概念
在开始讲MySQL日志文件之前,首先我们要明确一下文件的概念。MySQL数据库是存放在硬盘上的,用户进程通过和一个运行的MySQL实例进程通信(也就是需要一个运行的MySQL服务),通过这个服务去操作磁盘上的MySQL数据库文件,实现数据存取修改的目的,因此,我们先来看看都有哪些文件。
# 在MySQL登录状态下,执行这个命令可以查看我们数据库主要数据文件的位置
mysql> show variables like 'datadir';
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| datadir | /usr/local/mysql/data/ |
+---------------+------------------------+
# 得知路径之后在Linux终端进行查看
sudo ls -lh /usr/local/mysql/data/
# 下面是执行了命令之后的部分展示(这里列出了MySQL的各种日志文件、索引相关的文件、你建立的数据库的文件等,先有个概念,等阅读下面讲到的各种文件时可以回上来看一看)
-rw-r----- 1 _mysql _mysql 6.7K 1 19 10:51 binlog.000006
-rw-r----- 1 _mysql _mysql 179B 1 24 15:04 binlog.000007
-rw-r----- 1 _mysql _mysql 48B 1 24 15:05 binlog.index
-rw-r----- 1 _mysql _mysql 4.1K 1 24 15:04 ib_buffer_pool
-rw-r----- 1 _mysql _mysql 48M 2 26 14:06 ib_logfile0
-rw-r----- 1 _mysql _mysql 48M 10 11 11:37 ib_logfile1
drwxr-x--- 5 _mysql _mysql 160B 10 13 15:01 blog
-rw-r----- 1 _mysql _mysql 12M 2 26 14:04 ibdata1
-rw-r----- 1 _mysql _mysql 12M 1 24 15:05 ibtmp1
-rw-r----- 1 _mysql _mysql 180B 3 2 17:28 lilithgamesdeMacBook-Pro-42-slow.log
-rw-r----- 1 _mysql _mysql 249B 3 2 17:55 lilithgamesdeMacBook-Pro-42.log
-rw-r----- 1 _mysql _mysql 24M 2 26 14:04 mysql.ibd
-rw-r----- 1 _mysql _mysql 11K 1 24 15:05 mysqld.local.err
-rw-r----- 1 _mysql _mysql 4B 1 24 15:05 mysqld.local.pid
-rw-r----- 1 _mysql _mysql 16M 2 26 14:06 undo_001
-rw-r----- 1 _mysql _mysql 16M 2 26 14:06 undo_002
参数文件
MySQL登录状态下使用show variables命令查看所有参数(key-value形式),这些参数控制着MySQL的各种状态属性。这个命令在我们需要获取MySQL的各种状态时会被高频使用到。
# 查询所有参数
mysql> show variables;
# 也可以使用like参数指定需要查询的参数
mysql> show variables like 'warning_count';
# 设置全局参数值,键值对的形式
mysql> set global 参数名=参数值
日志文件
错误日志(error log)
错误日志记录了MySQL的启动、运行、关闭的过程。遇到例如MySQL无法正常启动,可以查看错误日志文件。而且错误日志会记录MySQL运行过程中的警告(warning),通过查看这些警告️可以针对出现警告的原因进行优化,从而达到优化数据库的目的。
# 在MySQL登录状态下,使用下面命令可以查看error log在服务器上的位置
mysql> show variables like 'log_error';
+---------------+----------------------------------------+
| Variable_name | Value |
+---------------+----------------------------------------+
| log_error | /usr/local/mysql/data/mysqld.local.err |
+---------------+----------------------------------------+
# 然后通过tail -n 50 查看倒数50行的错误日志内容去定位错误(不是在MySQL登录状态下,而是在Linux用户态下,sudo获取访问权限)
sudo tail -n 50 /usr/local/mysql/data/mysqld.local.err
# 具体日志内容不作展示
慢查询日志(slow query log)
慢查询日志的作用是将运行时间超过设定值的所有SQL语句都记录到慢查询日志中,通过定期检查慢查询日志,通过定位到慢SQL语句之后,对其进行分析,是否是因为索引未生效的等原因导致查询过慢,可以对查询过慢的SQL语句进行优化。
# 在MySQL登录状态下查看慢查询日志阈值,执行时间超过这个值的SQL会被记录下来
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
# 查询是否开启慢查询日志(默认关闭)
mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | OFF |
+----------------+-------+
# 开启慢查询日志
mysql> set global slow_query_log=on;
一个和慢查询日志有关的参数是log_queries_not_using_indexes,开启之后。如果运行的SQL没有使用索引,则MySQL数据库同样会将这条SQL语句记录到慢查询日志文件中。
# 查询是否将未执行索引的SQL加入到慢查询日志当中(默认关闭)
mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF |
+-------------------------------+-------+
# 开启参数
mysql> set global log_queries_not_using_indexes=on;
查看慢查询日志的路径,以及通过linux命令查看慢查询日志内容。
# 确保在MySQL登录状态下
mysql> show variables like 'slow%';
+---------------------+------------------------------------------------------------+
| Variable_name | Value |
+---------------------+------------------------------------------------------------+
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /usr/local/mysql/data/lilithgamesdeMacBook-Pro-42-slow.log |
+---------------------+------------------------------------------------------------+
# 在Linux用户终端查看慢查询日志文件后50页的内容(这个命令我们在上面查看错误日志的时候也用到了)
sudo tail -n 50 /usr/local/mysql/data/lilithgamesdeMacBook-Pro-42-slow.log
除此之外,MySQL还提供了其他参数用于控制每分钟允许插入到慢查询日志中的未使用索引的SQL的语句次数(防止慢查询日志增长过快),以及提供了命令用于筛选慢查询日志中的数据,如展示执行时间最长的10条SQL等等功能,在此不多赘述,大家用到时再多作了解。
查询日志(log)
查询日志记录了所有MySQL数据库的请求信息,如论请求是否得到执行。因为有慢查询日志的存在,一般情况下对查询日志的使用依赖较小,开启后也会有一定的性能损耗,默认关闭。
# 查看查询日志的开启状态和位置
mysql> show variables like 'general_log%';
+------------------+-------------------------------------------------------+
| Variable_name | Value |
+------------------+-------------------------------------------------------+
| general_log | OFF |
| general_log_file | /usr/local/mysql/data/lilithgamesdeMacBook-Pro-42.log |
+------------------+-------------------------------------------------------+
# 开启查询日志
mysql> set global general_log = on;
# 查看查询日志文件(在Linux用户终端,而不是MySQL登录态)
sudo tail -n 50 /usr/local/mysql/data/lilithgamesdeMacBook-Pro-42.log
二进制日志(binary log)
二进制日志记录了对MySQL数据库执行更改的所有操作(不包括select和show命令,但这些会被记录到查询日志中)。二进制日志主要作用有以下几点:
- 数据恢复:用户可以通过二进制日志进行精确的数据恢复。
- 主从复制:通过复制和执行二进制日志使得一台远程的MySQL数据库与另一台提供数据的MySQL数据库进行实时同步。
# 通过命令查看二进制日志的开启状态
mysql> show variables like '%log_bin%';
+---------------------------------+------------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------------+
| log_bin | ON |
| log_bin_basename | /usr/local/mysql/data/binlog |
| log_bin_index | /usr/local/mysql/data/binlog.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+------------------------------------+
结束语
本文初步介绍了MySQL拥有的日志文件的类型及其作用,其中慢查询日志和二进制日志两个点也是面试的高频重点,因此光掌握到本文讲解的程度是略微不够的,后面的文章我讲用例子讲述慢查询日志定位SQL问题的实操(定位到慢SQL之后就要优化它,那么就牵扯到索引设置和优化,又是一个重要知识点️)和二进制日志进行数据恢复和同步的实操
MySQL的日志文件的更多相关文章
- mysql 的日志文件
mysql的日志文件 日志文件大致分为 error log, binary log, query log, slow query log, innodb redo log ;如图: 1.error ...
- [转载]mysql慢日志文件分析处理
原文地址:mysql慢日志文件分析处理作者:maxyicha mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysq ...
- mysql基础---日志文件
一 基本日志文件 MYSQL有不同类型的日志文件(各自存储了不同类型的日志),从它们当中可以查询到MYSQL里都做了些什么,对于MYSQL的管理工作,这些日志文件是不可缺少的. 1.错误日志(The ...
- MySQL数据库日志文件(redo与undo)
+++++++++++++++++++++++++++++++++++++++++++标题:MySQL数据库日志文件时间:2019年2月25日内容:MySQL数据库日志文件(redo日志和undo日志 ...
- MySQL各类日志文件相关变量介绍
文章转自:http://www.ywnds.com/?p=3721 MySQL各类日志文件相关变量介绍 查询所有日志的变量 1 mysql> show global variables li ...
- MySQL 各类日志文件介绍
日志文件 1.错误日志 ErrorLog 错误日志记录了MyQLServer运行过程中所有较为严重的警告和错误信息,以及MySQLServer每次启动和关闭的详细信息. 在默认情况下,系统记录错误日志 ...
- MySQL二进制日志文件Binlog的三种格式以及对应的主从复制中三种技术
二进制日志文件Binlog的格式主要有三种: 1.Statement:基于SQL语句级别的Binlog,每条修改数据的SQL都会保存到Binlog里面. 2.ROW:基于行级别,每一行数据的变化都会记 ...
- MySQL 重做日志文件
一.innodb log的基础知识 · innodb log顾名思义:即innodb存储引擎产生的日志,也可以称为重做日志文件,默认在innodb_data_home_dir下面有两个文件ib_log ...
- mysql 主从日志文件mysql-bin文件清除方法
默认情况下mysql会一直保留mysql-bin文件,这样到一定时候,磁盘可能会被撑满,这时候是否可以删除这些文件呢,是否可以安全删除,是个问题,不建议使用rm命令删除,这样有可能会不安全,正确的方法 ...
随机推荐
- 技术分享|sysbench 压测工具用法浅析
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 介绍 新业务上线的时候通常需要对数据库性能进行压力测试,以确认是否满足需要,今天简单介绍下sysbench的用法: 1.s ...
- BMP位图之4位位图(二)
起始结构 typedef struct tagBITMAPFILEHEADER { WORD bfType; //类型名,字符串"BM", DWORD bfSize; //文件大小 ...
- 一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持
目录 XSS 攻击 SQL 注入 CSRF 攻击 DDOS 攻击 DNS 劫持 XSS 攻击 全称跨站脚本攻击 Cross Site Scripting 为了与重叠样式表 CSS 进行区分,所以换了另 ...
- 羽夏看Linux内核——中断与分页相关入门知识
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...
- 深入理解Spring注解机制(一):注解的搜索与处理机制
前言 众所周知,spring 从 2.5 版本以后开始支持使用注解代替繁琐的 xml 配置,到了 springboot 更是全面拥抱了注解式配置.平时在使用的时候,点开一些常见的等注解,会发现往往在一 ...
- 面试突击74:properties和yml有什么区别?
properties 和 yml 都是 Spring Boot 支持的两种配置文件,它们可以看作是 Spring Boot 在不同时期的两款"产品".在 Spring Boot 时 ...
- 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01
书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...
- 老梗新玩「GitHub 热点速览 v.22.34」
作者:HelloGitHub-小鱼干 不知道你是否和我有一样的烦恼,最近的流行梗当自己要用拿来造词时,就陷入了不知道咋"换壳"的尴尬地步.sao-gen-gen 大大减少了你老梗新 ...
- 经典01背包问题(C++)--详解
二维数组解决01背包问题 题目: 有 N 件物品和一个容量是 V 的背包.每件物品只能使用一次. 第 i 件物品的体积是 vi,价值是 wi. 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容 ...
- 有意思的方向裁切 overflow: clip
本文将介绍一个新特性,从 Chrome 90 开始,overflow 新增的一个新特性 -- overflow: clip,使用它,轻松的对溢出方向进行控制. overflow: clip 为何 首先 ...