全面盘点MySQL中的那些重要日志文件


Posted in MySQL onNovember 27, 2021

简介

该篇文章对MySQL中的日志进行总结与简单介绍,不会涉及的太深。主要的目的是为了对MySQL中的日志文件有一个体系化的了解。

日志分类

MySQL中的日志文件,配置文件、错误日志文件、二进制文件(binary log)、慢查询日志(slow-query-log)、全量日志(genera log)、审计日志(audit log)、数据库文件&数据表文件、存储引擎文件、中继日志(relay log)、进程文件(PID)和Socket文件。

全面盘点MySQL中的那些重要日志文件

参数文件

参数文件就是MySQL中的配置文件,在Linux下的my.cnf文件、Windows下的my.ini文件。文件内容主要分为server和client两个模块。server模块配置的是有关MySQL的服务信息,例如慢查询日志。client模块配置的是有关MySQL客户端连接信息,例如客户端连接的端口号。
文件格式大致如下:

[client]
port                    = 3306
default-character-set   = utf8mb4

[mysqld]
user                    = mysql
port                    = 3306
sql_mode                = ""
default-storage-engine  = InnoDB
default-authentication-plugin   = mysql_native_password
character-set-server    = utf8mb4
collation-server        = utf8mb4_unicode_ci
init_connect            = 'SET NAMES utf8mb4'
slow_query_log
long_query_time         = 3
slow-query-log-file     = /var/lib/mysql/mysql.slow.log
log-error               = /var/lib/mysql/mysql.error.log
default-time-zone       = '+8:00'

错误日志文件

错误日志文件记录了MySQL从启动、运行和关闭几个环节中的日志信息。例如连接MySQL连接失败、查询命令错误、SQL执行流程等等。对于定位MySQL错误有着很大的帮助。
文件大致内容如下:

Version: '5.7.28-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
2021-04-17T21:23:00.865868Z 3 [Note] Aborted connection 3 to db: 'exam_wechat' user: 'root' host: '172.18.0.1' (Got timeout reading communication packets)
2021-04-17T21:23:00.865969Z 2 [Note] Aborted connection 2 to db: 'exam_wechat' user: 'root' host: '172.18.0.1' (Got timeout reading communication packets)
2021-04-19T22:33:24.137143Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 18415ms. The settings might not be optimal. (flushed=0 and evicted=0, during the time.)
2021-04-20T07:03:21.765208Z 79 [Note] Access denied for user 'root'@'172.18.0.1' (using password: NO)
2021-04-20T07:03:23.825044Z 81 [Note] Aborted connection 81 to db: 'unconnected' user: 'root' host: '172.18.0.1' (Got an error reading communication packets)
2021-04-20T07:14:25.033983Z 82 [Note] Access denied for user 'root'@'172.18.0.1' (using password: NO)
2021-04-20T07:14:27.442608Z 84 [Note] Aborted connection 84 to db: 'unconnected' user: 'root' host: '172.18.0.1' (Got an error reading communication packets)
2021-04-20T07:27:13.971644Z 83 [Note] Aborted connection 83 to db: 'unconnected' user: 'root' host: '172.18.0.1' (Got timeout reading communication packets)
2021-04-20T07:41:02.916249Z 85 [Note] Aborted connection 85 to db: 'unconnected' user: 'root' host: '172.18.0.1' (Got timeout reading communication packets)

如何开始错误日志。只要在MySQL中的配置文件中配置意向log_error即可。

mysql root@127.0.0.1:(none)> show variables like '%log_error%';
+---------------------+--------------------------------+
| Variable_name       | Value                          |
+---------------------+--------------------------------+
| binlog_error_action | ABORT_SERVER                   |
| log_error           | /var/lib/mysql/mysql.error.log |
| log_error_verbosity | 3                              |
+---------------------+--------------------------------+
3 rows in set
Time: 0.010s

全量日志文件

全量日志文件记录的是MySQL所有的SQL操作日志记录。例如增删改查等操作都会被记录下来。

mmysql root@127.0.0.1:(none)> show variables like '%general%';
Reconnecting...
+------------------+---------------------------------+
| Variable_name    | Value                           |
+------------------+---------------------------------+
| general_log      | OFF                             |
| general_log_file | /var/lib/mysql/7fdc5f723ff9.log |
+------------------+---------------------------------+

配置项有三种值,table,none和file。配置file则会记录在日志文件中,配置none则不会记录,配置table则会在MySQL默认的MySQL数据中创建一张表(表名叫做general-log)来记录日志。

不推荐开启,记录的日志文件太多,不仅仅有性能消耗同时也占用太多无效空间。

# 日志记录文件格式
mysqld, Version: 5.7.28-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument
2021-04-20T09:16:48.572888Z	   88 Connect	root@172.18.0.1 on  using TCP/IP
2021-04-20T09:16:48.574591Z	   88 Connect	Access denied for user 'root'@'172.18.0.1' (using password: NO)
2021-04-20T09:16:50.325379Z	   89 Connect	root@172.18.0.1 on  using TCP/IP
2021-04-20T09:16:50.329894Z	   89 Query	select connection_id()
2021-04-20T09:16:50.335222Z	   89 Query	SELECT @@VERSION
2021-04-20T09:16:50.339432Z	   90 Connect	root@172.18.0.1 on  using TCP/IP
2021-04-20T09:16:50.339621Z	   89 Query	SELECT @@VERSION_COMMENT
2021-04-20T09:16:50.343525Z	   90 Query	select connection_id()
2021-04-20T09:16:50.347115Z	   90 Query	SHOW DATABASES
2021-04-20T09:16:50.380236Z	   90 Query	select TABLE_NAME, COLUMN_NAME from information_schema.columns
                                    where table_schema = 'None'
                                    order by table_name,ordinal_position
2021-04-20T09:16:50.391019Z	   90 Query	SELECT CONCAT("'", user, "'@'",host,"'") FROM mysql.user
2021-04-20T09:16:50.415062Z	   90 Query	SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_TYPE="FUNCTION" AND ROUTINE_SCHEMA = "None"
2021-04-20T09:16:50.432015Z	   90 Query	SELECT name from mysql.help_topic WHERE name like "SHOW %"
2021-04-20T09:16:52.572608Z	   89 Query	show variables like '%general%'
2021-04-20T09:17:13.532046Z	   89 Query	show variables like '%general%'

慢查询日志

慢查询日志是定位SQL语句查询快与慢而记录的一种日志文件。当某一条SQL语句查询时间超过一个固定的阈值,这条SQL语句将被定义为慢查询的SQL语句,被记录在慢查询日志文件中。

慢查询的配置主要有如下三个参数。

是否开启慢查询与慢查询日志文件。

mysql root@127.0.0.1:(none)> show variables like '%slow%';
+---------------------------+-------------------------------+
| Variable_name             | Value                         |
+---------------------------+-------------------------------+
| slow_query_log            | ON                            |
| slow_query_log_file       | /var/lib/mysql/mysql.slow.log |
+---------------------------+-------------------------------+
5 rows in set
Time: 0.014s

慢查询时间阈值。

mysql root@127.0.0.1:(none)> show variables like '%long_query_time%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 3.000000 |
+-----------------+----------+
1 row in set
Time: 0.013

二进制日志文件

二进制日志(binary log)文件用于记录MySQL的DML语句,记录了操作之后的物理日志内容,不会记录MySQL中的select、show等语句。二进制日志文件主要的作用如下:

用户主从复制,主服务器将二进制文件中的物理日志发送给从服务器,从服务器在将日志写入到自身。

用于数据恢复。根据物理日志,找回数据丢失之前的操作日志。

可以通过如下几个参数进行配置:

mysql root@127.0.0.1:(none)> show variables like '%log_bin%';
Reconnecting...
+---------------------------------+--------------------------------+
| Variable_name                   | Value                          |
+---------------------------------+--------------------------------+
| log_bin                         | ON                             |
| log_bin_basename                | /var/lib/mysql/mysql-bin       |
| log_bin_index                   | /var/lib/mysql/mysql-bin.index |
+---------------------------------+--------------------------------+
6 rows in set
Time: 0.015s

log_bin是否开启二进制日志文件,log_bin_basename存储的目录以及日志文件前缀,log_bin_index存储日志文件索引(日志文件名称)。如果日志文件没有指定文件名称,则默认使用本机名称。

日志文件列表。

-rw-r-----   1 mysql root       154 Apr 12 09:31 mysql-bin.000041
-rw-r-----   1 mysql root       154 Apr 12 19:45 mysql-bin.000042
-rw-r-----   1 mysql root   1459325 Apr 17 20:26 mysql-bin.000043
-rw-r-----   1 mysql mysql    24576 Apr 17 22:18 mysql-bin.000044

# cat mysql-bin.index
./mysql-bin.000001
./mysql-bin.000002
./mysql-bin.000003
./mysql-bin.000004
./mysql-bin.000005
./mysql-bin.000006

审计日志

审计日志用来记录MySQL的网络活动,对MySQL的操作记录做统计、分析与报告等。属于对MySQL安全监控记录类的日志文件。

MySQL自身不包含该功能的,并且该功能在MySQL官网也是收费的。这里也不做具体的演示。

中继日志

中继日志是MySQL主从复制,在从服务器上的一个重要角色。当主服务器将二进制文件发送给从服务器时,从服务器不会立马执行,而是放在一个指定的一类日志文件中,从服务器在开启一个SQL线程去读取中继日志文件内容并写入到自身数据中。

全面盘点MySQL中的那些重要日志文件

PID文件

PID是一个MySQL实例的进程文件号。MySQL属于单进程服务,在启动一个MySQL实例,就会创建一个PID文件。

Socket文件

Socket也是MySQL通信的一种方式。MySQL通信有两种方式,TCP和Socket方式。TCP是走网络通信,可以将服务部署到任意可以访问的服务器上。Socket是走的文件通信方式,必须在同一台服务器上。

# TCP模式
mysql -hxxxx -pxxxx -uxxxx -Pxxx

mysql -uxxxx -pxxxx -s /path/socket

数据库与表

数据库与表值的就是MySQL中的表结构文件、数据文件和索引文件。
InnoDB存储引擎的数据表结构

-rw-r-----  1 mysql root   13650 Apr 13 09:46 wechat_user.frm
-rw-r-----  1 mysql mysql  98304 Apr 17 13:43 wechat_user.ibd

MyISAM存储引擎的数据表结构

-rw-r-----  1 mysql mysql      0 Apr 20 17:53 users.MYD
-rw-r-----  1 mysql mysql   1024 Apr 20 17:53 users.MYI
-rw-r-----  1 root  root    8586 Apr 20 17:53 users.frm

存储引擎文件

不同的存储引擎,实现起来也不同。InnoDB存储引擎分为redolog和undolog两种日志文件。

到此这篇关于全面盘点MySQL中的那些重要日志文件的文章就介绍到这了,更多相关mysql日志文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
Mysql Show Profile
Apr 05 MySQL
MySQL Threads_running飙升与慢查询的相关问题解决
May 08 MySQL
MySQL索引失效的典型案例
Jun 05 MySQL
MySQL中日期型单行函数代码详解
Jun 21 MySQL
MySQL高速缓存启动方法及参数详解(query_cache_size)
Jul 01 MySQL
MySQL空间数据存储及函数
Sep 25 MySQL
浅谈MySQL函数
Oct 05 MySQL
MySQL表锁、行锁、排它锁及共享锁的使用详解
Apr 02 MySQL
MySQL磁盘碎片整理实例演示
Apr 03 MySQL
CentOS MySql8 远程连接实战
Apr 19 MySQL
mysql中如何用命令创建联合唯一索引
Apr 20 MySQL
SQL语句中EXISTS的详细用法大全
Jun 25 MySQL
关于mysql中时间日期类型和字符串类型的选择
Nov 27 #MySQL
VS2019连接MySQL数据库的过程及常见问题总结
Linux7.6二进制安装Mysql8.0.27详细操作步骤
SQL优化老出错,那是你没弄明白MySQL解释计划用法
Nov 27 #MySQL
mysql timestamp比较查询遇到的坑及解决
Nov 27 #MySQL
分享mysql的current_timestamp小坑及解决
Nov 27 #MySQL
MySQL中CURRENT_TIMESTAMP的使用方式
Nov 27 #MySQL
You might like
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
php防攻击代码升级版
2010/12/29 PHP
php无限遍历目录示例
2014/02/21 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
javascript的事件描述
2006/09/08 Javascript
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
vue实现购物车列表
2020/06/30 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
python魔法方法-属性访问控制详解
2016/07/25 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
python对Excel的读取的示例代码
2020/02/14 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
pytorch进行上采样的种类实例
2020/02/18 Python
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
介绍一下write命令
2012/09/24 面试题
中学生差生评语
2014/01/30 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
审美与表现自我评价
2015/03/09 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
单位车辆管理制度
2015/08/05 职场文书
公司岗位说明书
2015/10/08 职场文书
python实现手机推送 代码也就10行左右
2022/04/12 Python