MySQL 日志管理

日志文件记录 MySQL 数据库运行期间发生的变化,当数据库遭到意外的损害时,可以通过日志文件查询出错原因,并进件数据恢复

MySQL 日志文件可以分成以下几类:

  • 二进制日志:记录所有变更数据的语句,可用于主备复制
    [En]

    binary log: a statement that records all change data, which can be used for master-slave replication*

  • 错误日志:记录 MySQL 服务出现的问题
  • 查询日志:记录已建立的客户端连接和执行的语句
    [En]

    query log: record client connections established and statements executed*

  • 慢查询语句:记录所有执行时间超过 long_query_time 的所有查询或不适用索引的查询
  • 中继日志:记录复制过程中从主服务器收到的来自服务器的数据。
    [En]

    Relay log: record the data received from the server from the master server during replication.*

  • 数据定义语句日志:记录数据定义语句执行的元数据操作
    [En]

    data definition statement log: record the metadata operations performed by the data definition statement*

操作二进制日志

默认情况下,二进制文件是关闭的,可以通过以下 SQL 语句来查询二进制开关

SHOW VARIABLES LIKE 'log_bin%';

修改 my.cnf 或 my.ini 文件,以 Windows 系统为例,打开 MySQL 目录下的 my.ini 文件,将 log-bin 加入 [mysqld] 组

[mysqld]
log-bin
server-id=201811
expire_logs_days=10
max_binding_size=100M

重新启动 MySQL 服务,再执行上述的 SQL 语句,看到 log_bin 变量的值为 ON,表明二进制日志已经打开

如果想改变日志文件的目录和名称,可以对 my.ini 中的 log_bin 参数修改如下:

[mysqld]
log-bin="d:\mysql\logs"

当 MySQL 创建二进制日志文件时,先创建一个 binlog.000001 文件,以后 MySQL 服务重新启动一次,以 .000001 为后缀的文件就会增加一个,后缀名按 1 递增。如果日志长度超过了 max_binlog_size 的上限,就会创建一个新的日志文件

SHOW BINARY LOGS;

二进制日志文件不能直接查看,可以使用 mysqlbinlog 命令查看

mysqlbinlog [日志文件路径]

如果 MySQL 服务器启用了二进制日志,在数据库出现意外丢失数据时,可以使用 MySQLbinlog 工具从指定的时间点开始恢复数据

mysqlbinlog [option] filename|mysql -uroot -p;
  • option 是一些可选的选项:
  • –start-date:指定恢复数据库的起始时间点
  • –stop-date:指定恢复数据库的结束时间点
  • –start-position:指定恢复数据库的起始位置
  • –stop-position:指定恢复数据库的结束位置
  • filename 是日志文件名

在配置文件设置了 log-bin 选项以后,MySQL 服务会一直开启二进制日志功能,删除该选项就可以停止二进制日志功能

MySQL 提供暂时停止二进制日志功能的语句,如果用户不希望自己执行的某些 SQL 语句记录在二进制日志,可以使用 SET 语句来暂停二进制日志功能,0 表示停止,1 表示恢复

SET SQL_LOG_BIN={0|1}

MySQL 的二进制文件可以配置自动删除,同时 MySQL 也提供手动删除二进制文件的方法

使用 PURGE MASTER LOGS 语句删除指定日志文件

删除创建时间早于指定日志文件的日志文件,以后缀为标准<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Delete log files whose creation time is earlier than the specified log file, with the suffix as the criterion</font>*</details>
PURGE {MASTER|BINARY} LOGS TO 'log_name'
在指定时间之前删除日志文件<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Delete log files before the specified time</font>*</details>
PURGE {MASTER|BINARY} LOGS BEFORE 'date'

使用 RESET MASTER 语句删除所有二进制日志文件

RESET MASTER

执行完该语句,所有二进制日志将被删除,MySQL 会重新创建二进制文件,新的日志文件扩展名将重新从 000001 开始

操作错误日志

在 MySQL 数据库中,错误日志是默认开启的,并且无法被禁止。错误日志文件的名称默认为 hostname.err,其中 hostname 表示 MySQL 服务器的主机名

SHOW VARIABLES LIKE 'log_err%';

MySQL 的错误日志是以文本形式存储的,可以直接删除

通用查询日志

MySQL 默认没有开启通用查询日志,可以通过修改 my.cnf 或 my.ini 配置文件来设置

[mysqld]
general_log=ON
general_log_file=[path[filename]]

重启 MySQL,在 MySQL 的 data 目录下生成新的通用查询日志

从 5.1.6 以后开始,MySQL 支持全局级别的动态修改,不需要重启

SET GLOBAL general_log=on;
SET GLOBAL general_log=off;
SET GLOBAL general_log_file='path/filename';
SHOW VARIABLES LIKE 'general_log%';

MySQL 停止通用查询日志功能有两种方式,一种是在配置文件把 general_log 值设置为 off,再重启 MySQL,另一种是使用 SET 语句设置,即动态修改

一般查询日志可以手动删除,也可以通过命令删除

[En]

The general query log can be deleted manually or by command

mysqladmin -uroot -p flush-logs

这样,新的通用查询日志将直接覆盖旧的日志。

[En]

In this way, the new general query log will directly overwrite the old log.

慢查询日志

MySQL 慢查询日志默认是关闭的,可以通过修改 my.cnf 或 my.ini 配置文件来设置

[mysqld]
long_query_time=n
slow_query_log=ON
slow_query_log_file=[path[filename]]
  • long_query_time 设定慢查询的阈值,超出此设定值的 SQL 都会被记录,默认为 10 秒

MySQL 也支持 SET 语句开启

set global slow_query_log=ON;
set global long_query_time=2;
set session long_query_time=2;

查看慢查询日志所在目录

SHOW VARIABLES LIKE '%slow_query_log_file%';

查看慢查询日志的超时时间

[En]

The timeout for viewing slow query logs

SHOW VARIABLES LIKE '%long_query_time%';

可以在配置文件把 slow_query_log 的值设为 OFF,重启 MySQL,也可以使用 SET 语句

慢速日志可以手动删除,也可以通过命令删除。

[En]

Slow log can be deleted manually or by command.

mysqladmin -uroot -p flush-logs

这样,新的慢日志将直接覆盖旧的日志。

[En]

In this way, the new slow log will directly overwrite the old log.

Original: https://www.cnblogs.com/Yee-Q/p/16219751.html
Author: 低吟不作语
Title: MySQL 日志管理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505420/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 计算机网络 | TCP 连接的建立 和 TCP 连接的断开

    TCP 连接的建立过程 一开始,客户端和服务端都处于 close 状态。 先是服务端监听某个端口,此时服务端处于 listen 状态。 这个时候客户端就可以发送连接请求报文了。 第…

    数据库 2023年6月11日
    0165
  • mysql 事务 隔离性 锁

    1、四大特性 1.1 原子性(Atomicity) 事务是一个不可分割的最小工作单元。事务是一个不可分割的最小工作单元。 [En] A transaction is an indi…

    数据库 2023年5月24日
    0120
  • 3. 视图-触发器-存储过程-索引

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月16日
    0107
  • Redis的五大数据类型(简单使用)

    redis是基于内存的,内存的读写速度非常快 ; redis是单线程的,省去了很多上下文切换线程的时间; *redis因为是基于内存的 不涉及io操作 所以单线程效率是最高的 回归…

    数据库 2023年6月6日
    0147
  • 女同桌找我要表情包,还好我会Python,分分钟给她下载几十个G…

    emmm~ 起因呢,这昨晚女同桌跟我说电脑有点卡,喊我去宿舍给她装个新系统,装系统就装系统吧,结果又说新系统表情包都没保存~ 我当时就有点生气,真当我是万能的呢? 于是我直接就用P…

    数据库 2023年6月14日
    0139
  • Intellij IDEA个人常用快捷键

    分享一下个人常用快捷键。 说明:字母排序规则遵循字母表(a->z) 快捷键 介绍 ctrl+b 快速打开当前光标处的类或方法 ctrl+d 复制当前光标所在行至下一行 ctr…

    数据库 2023年6月14日
    0126
  • MySQL实战45讲 16

    16 | “order by”是怎么工作的? 以公民表为例,假设您想要查询所有城市为“杭州”的人的姓名,并根据他们的名字返回前1000人的姓名和年龄。 [E…

    数据库 2023年5月24日
    0118
  • 第十九章 基于注解的AOP编程

    组装切面 将2 3 4步放在切面类中: 定义切面类: @Aspect 定义额外功能: @Around 原始方法的运行: ProceedingJoinPoint.proceed() …

    数据库 2023年6月14日
    0126
  • Centos7下Oracle启动命令

    1、查询挂载历史记录 在root账户下使用一下命令 查看历史使用挂载的那个磁盘 &#x67E5;&#x770B;&#x6302;&#x8F7D;&a…

    数据库 2023年6月16日
    0133
  • Java 使用Stream处理List对象去重

    // 根据name去重 List unique = persons.stream().collect( Collectors.collectingAndThen( Collecto…

    数据库 2023年6月16日
    0115
  • JDK自带线程池学习

    JDK自带线程池 线程池的状态 线程有如下状态 RUNNING状态:Accept new tasks and process queued tasks SHUTDOWN状态:Don…

    数据库 2023年6月11日
    0158
  • 学习笔记——Django项目的删除数据、查询数据(filter、get、exclude)

    2022-09-30 删除数据: 方式一: 打开pycharm,进入虚拟环境,进入shell环境(python manage.py shell)。 删除数据,接上面的笔记——&#8…

    数据库 2023年6月14日
    0152
  • Javaweb-Http、Maven及Servlet详解

    一、Http 1.什么事Http Http(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上 文本:html,字符串,~.. 超文本:图片,音乐,视屏,定位,地图…

    数据库 2023年6月16日
    0138
  • Jenkins2.350配置gitee

    一、下载JenKins 以War包举例演示 JenKins下载地址JenKins中文文档 二、启动Jenkins 需要配置好jdk,不做多阐述。 java -jar jenkins…

    数据库 2023年6月6日
    0139
  • innoDB对MVCC的实现

    InnoDB存储引擎在 RR 级别下通过 MVCC和 Next-key Lock 来解决幻读问题: 1、执行普通 select,此时会以 MVCC 快照读的方式读取数据 在快照读的…

    数据库 2023年6月16日
    0138
  • mysql视图,索引

    一、视图 View 视图是一个 虚拟表,是sql语句的查询结果,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成。视图的数据变化会影响到基…

    数据库 2023年6月9日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球