简介
该篇文章对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 = 3306default-character-set = utf8mb4[mysqld]user = mysqlport = 3306sql_mode = ""default-storage-engine = InnoDBdefault-authentication-plugin = mysql_native_passwordcharacter-set-server = utf8mb4collation-server = utf8mb4_unicode_ciinit_connect = 'SET NAMES utf8mb4'slow_query_loglong_query_time = 3slow-query-log-file = /var/lib/mysql/mysql.slow.loglog-error = /var/lib/mysql/mysql.error.logdefault-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 setTime: 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.sockTime Id Command Argument2021-04-20T09:16:48.572888Z 88 Connect root@172.18.0.1 on using TCP/IP2021-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/IP2021-04-20T09:16:50.329894Z 89 Query select connection_id()2021-04-20T09:16:50.335222Z 89 Query SELECT @@VERSION2021-04-20T09:16:50.339432Z 90 Connect root@172.18.0.1 on using TCP/IP2021-04-20T09:16:50.339621Z 89 Query SELECT @@VERSION_COMMENT2021-04-20T09:16:50.343525Z 90 Query select connection_id()2021-04-20T09:16:50.347115Z 90 Query SHOW DATABASES2021-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_position2021-04-20T09:16:50.391019Z 90 Query SELECT CONCAT("'", user, "'@'",host,"'") FROM mysql.user2021-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 setTime: 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 setTime: 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 setTime: 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两种日志文件。