当前位置: 首页 > news >正文

Mysql-日志介绍 日志配置

环境部署

 docker run -d -p 3306:3306 --privileged=true -v $(pwd)/logs:/var/lib/logs  -v $(pwd)/conf:/etc/mysql/conf.d  -v $(pwd)/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=654321  --name mysql mysql:5.7

运行指令的目录下新建好这些文件:
在这里插入图片描述

日志类型

日志类型写出到日志的信息
ErrorLog(错误日志)mysqld 错误日志(记录了mysqld开始,停止,运行中的错误日志)。
General query log (查询日志)记录了msqld在做什么事情,用户建立连接和用户执行SQL都会被记录。
Binary log(二进制日志)对于数据库的任何修改事件都会记录到这里,二进制日志用于恢复,复制和审计。
Relay log(中继日志)中继日志和二进制日志相似,记录了一些对数据库改变的操作事件,同时维护了一个已经使用过的中继日志索引。
SlowQueryLog慢查询日志,记录慢查询 比long_query_time(可配置)长的都为慢查询。
DDL log (metadata log)记录了比如修改表结构或者重命名这些对元数据进行修改的操作。
查看日志变量

通过下面两条指令可以查看各种日志的启用情况

show variables like "log_%";
show variables like "%_log";

在这里插入图片描述

ErrorLog

默认开启,错误日志记录了运行过程中遇到的所有严重的错误信息,以及 MySQL每次启动和关闭的详细信息。
默认是stderr也就是输出到控制台.
在这里插入图片描述
如果我们需要输出到目录我们需要修改这个配置:

[mysqld]
#设置输出路径
log-error=/var/lib/logs/log-err.log

这里注意可能回报错误,因为没有权限在这个路径写东西,放到这个目录/var/lib/logs下即可:
在这里插入图片描述
重启服务器我们可以看到日志的输出变为了文件路径:
在这里插入图片描述
同时我们可以根据log-warnings去配置输出那些信息,默认为2我们可以看到:
在这里插入图片描述
log_warnings 为0, 表示不记录告警信息。
log_warnings 为1, 表示告警信息写入错误日志。
log_warnings 大于1, 表示各类告警信息,例如:有关网络故障的信息和重新连接信息写入错误日志。
比如我们做下面的配置,可以看到值被修改为了1,这里的配置log-error 和 log_error都会生效,统一一下就可以

[mysqld]
log-error=/var/lib/logs/log-err.log
log_warnings=1

在这里插入图片描述

二进制日志

binlog记录了数据库所有的ddl语句和dml语句,但不包括select和show语句内容因为不是更新操作(这些日志由General query log 来记录),语句以事件的形式保存,描述了数据的变更顺序,binlog还包括每个更新语句的执行时间信息。
如果是DDL语句,则直接记录到binlog日志,而DML语句,必须通过事务提交才能记录到binlog日志中。
binlog主要用于实现mysql主从复制、数据备份、数据恢复。

配置中mysql-bin是binlog日志文件的basename,如果不指定则会取pid-file的名称。binlog日志文件的完整名称:mysql-bin.000001。
pid-file是服务器从中写入其进程ID的文件的路径名。服务器在数据目录中创建文件,除非给出一个绝对路径名来指定其他目录。如果您指定此变量,则必须指定一个值。如果不指定此变量,则MySQL将使用默认值host_name.pid,其中host_name是主机的名称。

[mysqld]
server_id=42 
log-bin=mysql-bin

server-id的作用: 1.mysql的同步数据中是包含server-id的,用于标识该语句最初从哪个server写入,所以server-id一定要有 2.每一个同步中的slave在master上都有对应的一个master线程,该线程就是通过slave的server-id来标识的;每个slave在master端最多有一个master线程,如果两个slave的server-id相同,则后一个连接成功时,前一个会被踢掉,slave主动连接master之后,如果slave上面执行了slave stop;则连接断开,但是master上对应的线程并没有退出;当slave start之后,master不能再创建一个线程而保留原来的线程,那样同步就可能有问题. 3.在mysql做主主同步时,多个主需要构成一个环状,但是同步的时候又要保证一条数据不会陷入死循环,这里就是靠server-id来实现的
binlog日志文件的完整名称:mysql-bin.000001……mysql-bin.999999,也就是在追加binlog的时候会在后面进行编号。在这几种情况下这个编号会继续往下编:

  • msql服务启动或者重启
  • 服务器刷新了binlog日志
  • binlog的size达到了我们预设的max_binlog_size
    为了跟踪使用了哪些二进制日志文件,mysqld还创建了一个包含二进制日志文件名称的二进制日志索引文件。默认情况下,它与二进制日志文件相同,扩展名为‘.index’。您可以使用log_bin_index[=file_name]选项更改二进制日志索引文件的名称。
    开启上面的配置以后我们可以看到二进制日志被开启,并且生产了index文件
    在这里插入图片描述
    我们去docker挂在的目录看一下这些文件
    在这里插入图片描述
General query log 通用查询日志

general query log 默认关闭,由于通用查询日志会记录用户的所有操作,其中还包含增删查改等信息,在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,会影响MySQL的性能的。如果不是为了调试数据库,不建议开启查询日志。

show global variables like '%general_log%';

在这里插入图片描述

[mysqld]
#控制是否开启
general_log={0|1} 
#这个变量定义了慢查询或者查询日志的输出的方式 可以是文件也可以是表 也可以是都输出 TABLE,FILE
log_output={FILE|TABLE|NONE}
#general_log_file如果没有指定,默认名是host_name.log
general_log_file=/var/lib/mysql/general_log.log

在这里插入图片描述

log_output='FILE'表示将日志存入文件,默认值是'FILE' log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.general_log 或者mysql.slow_log表中.

SlowQueryLog 慢查询日志

slow query log 默认关闭,通过以下设置开启。记录执行时间超过long_query_time秒的所有查询,便于收集查询时间比较长的SQL语句。

show global status like '%Slow_queries%'; 
show variables like '%slow_query%'; 
show variables like 'long_query_time%';
[mysqld]
#这个和普通查询日志一样的
log_output={FILE|TABLE|NONE}
# 开启慢查询日志
slow_query_log={0|1} 
# 慢查询的阈值,单位秒
long_query_time=10 
# 日志记录文件
# 如果没有给出file_name值, 默认为主机名,后缀为-slow.log。
# 如果给出了文件名,但不是绝对路径名,文件则写入数据目录。
slow_query_log_file=/var/lib/mysql/slow_query_log.log

在这里插入图片描述
默认情况下,不会记录管理类的日志语句,也不会记录不使用索引进行查询的查询,可以通过下面两个参数开启

#记录管理员
log_slow_admin_statements=ON
#记录没有使用索引的语句
log_queries_not_using_indexes=ON

记录管理类指令 ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX,
OPTIMIZE TABLE, and REPAIR TABLE.这些操作。

DDL log (metadata log)

DDL日志或元数据日志记录由数据定义语句生成的影响表分区的元数据操作,例如 ALTER TABLE t3 DROP PARTITION p2,我们必须确保分区被完全删除,其定义从表t3的分区列表中删除。MySQL使用此日志从分区元数据操作中间发生的崩溃中恢复,就比如我们在修改或者删除表的时候发送了异常,mysqld会借助这个日志将数据库恢复到之前的状态。分区元数据操作的记录被写入MySQL数据目录中的文件ddl_log.log。DDL 日志是一个二进制文件,不被人为的阅读修改,也没有其他配置项可以配置它,且在成功启动mysqld 后会被删除,只有在记录元数据时才会被重新创建。因此,这个文件可能不会出现在一个完全正常运行的MySQL服务器上。

Relay log(中继日志)
show variables like '%relay%';

在这里插入图片描述
和binlog非常的类似也是记录了数据库的变化,也会维护一个索引用来记录那些中继日志被使用过了。我的理解是它其实就是binlog的一种中间状态,用于在从数据库进行同步数据。
原图链接
在这里插入图片描述

出现下面这几种情况,中继日志会创建一个新的文件:

  • 每次负责复制的线程开始的时候,会创建一个新的中继日志,这样不会丢失之前的中继日志。
  • 当日志被刷到磁盘的时候
  • 当中继日志超过文件存储大小上限的时候
http://www.lryc.cn/news/288603.html

相关文章:

  • 计算机网络的体系结构的各层在整个过程中起到什么作用?
  • 如何在业务代码中优雅的使用策略模式?
  • “docker-credential-desktop.exe“: executable file not found in $PATH 错误解决
  • openssl3.2/test/certs - 055 - all DNS-like CNs allowed by CA1, no DNS SANs
  • 长虹智能电视6000iD、6080iD、3000iD、U2系列等 ZLM61HiPJ机芯升级刷机方法,附刷机数据
  • 六、VTK创建平面vtkPlaneSource
  • LiveGBS流媒体平台GB/T28181常见问题-如何配置使用自己已有的redis服务替换redis版本升级redis版本
  • stm32产品架构
  • 数据结构——双链表
  • Git 对文件名大小写不敏感的问题解决方案
  • Java复习系列之阶段三:框架原理
  • 【Python】01快速上手爬虫案例一:搞定豆瓣读书
  • JavaEE 网络编程
  • 5.rk3588用cv读取图片(C++)
  • Github 无法正常访问?一招解决
  • 架构师的36项修炼-08系统的安全架构设计
  • docker 构建应用
  • Go语言grpc服务开发——Protocol Buffer
  • 【开源】基于JAVA语言的实验室耗材管理系统
  • 金智易表通构建学生缴费数据查询+帆软构建缴费大数据报表并整合到微服务
  • MySQL复合索引
  • Web3 游戏开发者的数据分析指南
  • temu跨境电商怎么样?做temu蓝海项目有哪些优势?
  • C#使用RabbitMQ-1_Docker部署并在c#中实现简单模式消息代理
  • EasyExcel中自定义拦截器的运用
  • shell编程-7
  • 工业智能网关储能物联网应用实现能源的高效利用及远程管理
  • 虹科数字化与AR部门升级为安宝特AR子公司
  • 服务器是什么?(四种服务器类型)
  • 09-微服务Sentinel整合GateWay