MySQL日志

MySQL日志

在任何一种数据库,都会有各种各样的日志,记录着数据库工作的方方面面,以帮助数据库管理员追踪数据曾经发生过的各种事件。

日志分类

  • 错误日志

  • 二进制日志

  • 查询日志

  • 慢查询日志

错误日志

最重要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。

该日志是默认开启的,默认存入目录为mysql的数据目录,默认的日志文件名为hostname.err(hostname是主机名)

查看日志位置指令:

show variables like 'log_error%';

/var/log/mysql/error.log

二进制日志binlog

binlog记录了所有的DDL(数据定义语言)语句和DML(数据操作语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复有重要作用,主从复制,就是通过binlog实现的。

有了binlog理论上可以对历史记录中任何一个时间的数据进行恢复。

MySQL8.0默认是开启的,低版本的MySQL需要通过配置文件开启,并配置MySQL日志的格式。

# 配置开 启binlog日志,日志的文件前缀为mysqlbin,生成的文件名如:mysqlbin.00001, mysqlbin.00002
log_bin=mysqlbin

# 配置二进制日志的格式
binlog_format=STATEMENT
日志格式
  • STATEMENT
    这种日志格式记录的是SQL语句,每一条对数据进行修改的SQL都会记录在日志中,通过mysql提供的mysqlbinlog工具,可以查看到每条语句的广西,主从复制的时候,从库会将日志解析为原文本,并在从库重新执行一次。
  • ROW
    这种日志格式在日志文件中记录的是每一行数据变更,而不是记录SQL语句。比如,执行SQL语句,update table set status = 1 where id =1,如果是STATEMENT日志格式会记录一行SQL文件,如果是ROW,由于是对表进行更新,也就是每一行记录都会发生变更,ROW格式的日志中会记录每一行的数据变更
  • MIXED
    混合了STATEMENT和ROW两种格式
    -- 查看MySQL是否开启了binlog日志
    show variables like 'log_bin%'

    -- 查看binlog日志格式
    show variables like 'binlog_format'

    -- 查看所有binlog日志
    show binlog events;

    -- 查看最新的日志
    show master status;

    -- 查询指定的binlog日志
    show binlog events in 'binlog.000048';

    -- 从指定的位置开始,查看指定的binlog日志
    show binlog evnets in 'binlog.000048' from 157;
    -- limit 限制查询条数
    show binlog evnets in 'binlog.000048' from 157 limit 2;
    -- litmit 偏移
    show binlog evnets in 'binlog.000048' from 157 limit 1, 3;

    -- 清空所有的binlog日志
    reset master;

查询日志

  • 查询日志中记录了客户端所有操作语句,而binlog不包括查询数据的SQL语句
  • 默认情况是不开启查询日志

可以配置文件ny.ini来配置log参数

[mysqld]
log = [dir/filename]
   -- 临时开启查询日志
   set global general_log = 1;

开启了会在MySQL中的数据目录下,生成一个以主机名.log的文件,记录了执行的查询,更新等语句。

慢查询日志

慢查询日志记录了所有执行时间超过参数long_query_time设置值并且扫描记录数不小于min_examined_row_limit的所有的SQL语句的日志。
long_query_time默认值为10秒,最小为0,精度可以到微秒。

    -- 查询慢查询日志是否开启
    show variables like 'slow_query_log%';

    -- 开启慢查询日志1开启0关闭
    slow_query_log = 1

    -- 该参数用来指定慢查询日志的文件名
    slow_query_log_file=slow_query.log

    -- 配置慢查询时间限制,超过这个值将认为是慢查询进行日志记录,默认值是10s
    long_query_time=10

配置文件里面修改需要重启才生效

    slow_query_log		= 1
    slow_query_log_file	= /var/log/mysql/mysql-slow.log
    long_query_time = 2

二进制日志

查看二进制日志

mysqlbinlog log_file-bin.00000001

停止二进制日志

set SQL_LOG_BIN = 0 | 1

删除二进制日志

RESET MASTER -- 删除所有二进制日志文件
PURGE MASTER LOGS TO filename.number -- 删除编号小于number的所有二进制日志文件
PURGE MASTER LOGS BEFORE 'yyyy-mm-dd hh:MM:ss' -- 删除指定时间之前所创建的二进制日志

错误日志

修改存放错误日志的目录

[mysqld]
error-bin=[dir/filename]

删除错误日志

执行命令mysqladmin命令

mysqladmin -u root -p flush-logs

执行此命令后,服务器会先创建一个新的错误日志,然后将旧的错误日志更名为filename.err-old。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值