关于mysql:MySQL中的日志文件-你全都了解吗

44次阅读

共计 6911 个字符,预计需要花费 18 分钟才能阅读完成。

简介

该篇文章对 MySQL 中的日志进行总结与简略介绍,不会波及的太深。次要的目标是为了对 MySQL 中的日志文件有一个体系化的理解。前面会对每一种日志文件做具体的剖析与总结。

日志分类

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

参数文件

参数文件就是 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 等语句。二进制日志文件次要的作用如下:

  1. 用户主从复制,主服务器将二进制文件中的物理日志发送给从服务器,从服务器在将日志写入到本身。
  2. 用于数据恢复。依据物理日志,找回数据失落之前的操作日志。

能够通过如下几个参数进行配置:

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 线程去读取中继日志文件内容并写入到本身数据中。

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 两种日志文件。

正文完
 0