怀抱观古今,寝食展戏谑。这篇文章主要讲述#yyds干货盘点#盘点MySQL中的那些日志文件相关的知识,希望能为你提供帮助。
简介该篇文章对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-logsocket: /var/run/mysqld/mysqld.sockport: 3306MySQL 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: 3306Unix socket: /var/run/mysqld/mysqld.sock
TimeId CommandArgument
2021-04-20T09:16:48.572888Z88 Connectroot@172.18.0.1 onusing TCP/IP
2021-04-20T09:16:48.574591Z88 ConnectAccess denied for user root@172.18.0.1 (using password: NO)
2021-04-20T09:16:50.325379Z89 Connectroot@172.18.0.1 onusing TCP/IP
2021-04-20T09:16:50.329894Z89 Query select connection_id()
2021-04-20T09:16:50.335222Z89 Query SELECT @@VERSION
2021-04-20T09:16:50.339432Z90 Connectroot@172.18.0.1 onusing TCP/IP
2021-04-20T09:16:50.339621Z89 Query SELECT @@VERSION_COMMENT
2021-04-20T09:16:50.343525Z90 Query select connection_id()
2021-04-20T09:16:50.347115Z90 Query SHOW DATABASES
2021-04-20T09:16:50.380236Z90 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.391019Z90 Query SELECT CONCAT("", user, "@",host,"") FROM mysql.user
2021-04-20T09:16:50.415062Z90 Query SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE="FUNCTION" AND ROUTINE_SCHEMA = "None"
2021-04-20T09:16:50.432015Z90 Query SELECT name from mysql.help_topic WHERE name like "SHOW %"
2021-04-20T09:16:52.572608Z89 Query show variables like %general%
2021-04-20T09:17:13.532046Z89 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
日志文件列表。
-rw-r-----1 mysql root154 Apr 12 09:31 mysql-bin.000041
-rw-r-----1 mysql root154 Apr 12 19:45 mysql-bin.000042
-rw-r-----1 mysql root1459325 Apr 17 20:26 mysql-bin.000043
-rw-r-----1 mysql mysql24576 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 root13650 Apr 13 09:46 wechat_user.frm
-rw-r-----1 mysql mysql98304 Apr 17 13:43 wechat_user.ibd
MyISAM存储引擎的数据表结构
-rw-r-----1 mysql mysql0 Apr 20 17:53 users.MYD
-rw-r-----1 mysql mysql1024 Apr 20 17:53 users.MYI
-rw-r-----1 rootroot8586 Apr 20 17:53 users.frm
存储引擎文件【#yyds干货盘点#盘点MySQL中的那些日志文件】不同的存储引擎,实现起来也不同。InnoDB存储引擎分为redolog和undolog两种日志文件。
推荐阅读
- 程序的内存模型
- ES6学习 第三章 字符串的扩展
- 老王读Spring IoC-3Spring bean 的创建过程
- 用云开发搭建的微信答题小程序v1.0
- 11 图 | 硬核讲解 Eureka 增量同步的原理 #yyds干货盘点#
- Git教程 git pull 和 git clone的区别
- 本图文详细教程教你win10电脑蓝屏因素排查及处理办法大
- 自定义CSS和JS无法在WordPress上加载
- 自定义端点API,可通过按单词返回False值获取所有主题