Linux-MySQL日志管理

1.日志概述

1.1什么是MySQL日志

MySQL 日志用于记录数据库运行期间各种行为动作(DDL,DML,DQL,DCL)。可以是文件、文本等存储形式。记录了 MySQL 从启动、运行到结束的整个生命周期中的关键行为。

1.2MySQL日志的作用

|--------|--------------|
| 1.故障排查 | 帮助诊断数据库运行问题 |
| 2.性能分析 | 识别性能瓶颈和慢查询 |
| 3.数据恢复 | 提供数据恢复基础 |
| 4.安全审计 | 记录数据库访问和操作行为 |
| 5.主从复制 | 支持数据库复制与数据同步 |
[MySQL日志作用]

1.3MySQL日志类型

|---------------------------|----------------------------|-----------------|
| 日志类型 | 主要作用 | 默认状态 |
| 错误日志(Error Log) | 记录启动、关闭、错误、警告信息 | 开启 |
| 通用查询日志(General Query Log) | 记录所有客户端连接和执行的数据库 | 关闭 |
| 二进制日志(Binary Log) | 记录所有修改数据库内容的操作,用于数据恢复和主从复制 | 关闭(5.7)、开启(8.0) |
| 慢查询日志(Slow Query Log) | 记录执行时间超过阈值的查询,用于性能优化 | 关闭 |
| 中继日志(Relay Log) | 在主从复制中,从服务器用于存储主服务器二进制日志事件 | 主从时开启 |
| 重做日志(Redo Log) | InnoDB引擎特有,保持事务的持久性和恢复能力 | 开启 |
| 回滚日志(Undo Log) | 记录事务回滚信息,支持事务的原子性 | 开启 |
[MySQL日志分类]

2.日志配置与管理

MySQL配置文件
复制代码
/etc/my.cnf

2.0日志位置

|--------|-------------------------------------|
| 源码安装MySQL ||
| 数据存放目录 | /usr/local/mysql/data |
| 错误日志 | /usr/local/mysql/data/mysqld.log |
| 二进制日志 | /usr/local/mysql/data/binlog.000001 |
| RPM包安装MySQL ||
| 数据存放目录 | /var/lib/mysql |
| 错误日志 | /var/log/mysqld.log |
| 二进制日志 | /var/lib/mysql/binlog.000001 |
[MySQL日志位置]

2.1错误日志-Error Log

查看错误日志文件路径
复制代码
SHOW VARIABLES LIKE 'log_error';
相关配置-vim /etc/my. cnf(需重启MySQL服务)

log-error = /usr/local/mysql/data/mysqld.log -更改改日志路径

2.2通用查询日志-General Query Log

查看通用查询日志文件路径
复制代码
SHOW VARIABLES LIKE 'general%';
相关配置-vim /etc/my. cnf(需重启MySQL服务)

general_log = 1 -启动通用查询日志

general_log_file = /var/lib/mysql/general.log -更改日志路径

MySQL中可以执行

SET GLOBAL general_log = ON;

SET GLOBAL general_log_file = '/var/lib/mysql/general.log';

2.3慢查询日志-Slow Query Log

查看慢日志文件路径
复制代码
SHOW VARIABLES LIKE 'slow_query%';
查看慢日志记录规定时间
复制代码
SHOW VARIABLES LIKE 'long_query_time';
相关配置-vim /etc/my. cnf(需重启MySQL服务)

slow_query_log = 1 -启动慢查询日志

slow_query_log_file = /usr/local/mysql/data/slow_query.log -更改慢查询日志路径

long_query_time = 5 -设置慢查询被记录的时间

MySQL中可以执行

SET GLOBAL slow_query_log = ON;

SET GLOBAL slow_query_log_file = '/usr/local/mysql/data/slow_query.log';

SET GLOBAL long_query_time = 5.0;

2.4中继日志-Relay Log

中继日志用于主从复制环境,从服务器通过中继日志暂存从主服务器接收的二进制日志事件。

2.4.1以下命令均在从服务器执行

显示从库状态
复制代码
SHOW SLAVE STATUS\G
显示主库状态
复制代码
SHOW MASTER STATUS\G
查看中继日志相关参数
复制代码
SHOW VARIABLES LIKE '%relay%';
中继日志信息表
复制代码
SELECT * FROM mysql.slave_relay_log_info;

3.二进制日志

二进制日志记录所有数据变更,用于:数据恢复、主从复制、数据审计

3.1查看二进制日志状态

复制代码
SHOW VARIABLES LIKE '%log_bin%';

3.2查看当前二进制日志文件

复制代码
SHOW BINARY LOGS;
相关配置-vim /etc/my. cnf(需重启MySQL服务)

log-bin = /usr/local/mysql/data/mysql-bin -二进制日志文件前缀

server-id = 1 -服务器唯一标识符(主从复制必须)

binlog_format = ROW -修改二进制日志文件格式为ROW

SET GLOBAL binlog_format = 'ROW'; -动态修改日志格式

3.3二进制日志格式

|-----------|--------------------------|-----------|------------|
| 格式 | 特点 | 优缺点 | 使用场景 |
| STATEMENT | 记录SQL语句本身,而不是数据本身 | 文件小,复制效率高 | 简单查询,无函数依赖 |
| ROW | 记录每一行数据被修改了哪些内容,而不是SQL语句 | 文件大,回复速度慢 | 数据一致性要求高 |
| MIXED | 根据执行的SQL语句自动选择使用什么格式 | 管理相对复杂 | 大多数生产环境 |
[二进制日志格式]

3.4查看二进制日志内容

3.4.1使用mysqlbilog工具查看

复制代码
mysqlbinlog /usr/local/mysql/data/mysql-bin.000001

3.4.2解码查看详细内容

复制代码
mysqlbinlog -v --base64-output=DECODE-ROWS /usr/local/mysql/data/mysql-bin.000001

mysqlbinlog -v /usr/local/mysql/data/mysql-bin.000001

3.5二进制日志管理

3.5.1查看所有二进制日志文件

复制代码
SHOW BINARY LOGS;

3.5.2刷新日志,创建新的二进制日志文件

复制代码
FLUSH LOGS;

3.5.3删除指定时间前的二进制日志

复制代码
 PURGE BINARY LOGS BEFORE '2026-01-19 12:00:00';

3.5.4删除所有二进制日志

复制代码
RESET MASTER;

3.5.5临时关闭当前会话的二进制日志记录

复制代码
SET sql_log_bin = 0;

3.6二进制日志恢复数据案例

实验环境

先创建db5数据库,在删除

3.6.1基于时间点恢复

首先查看binlog日志找到创建db5的记录
使用命令恢复数据
复制代码
mysqlbinlog -v /var/lib/mysql/binlog.000011 --start-datetime="2026-01-19 20:30:34" --stop-datetime="2026-01-19 20:30:59" | mysql -uroot -p'Root@123'

3.6.2基于位置服务

首先查看binlog日志找到创建db5的记录
复制代码
mysqlbinlog /var/lib/mysql/binlog.000011
使用命令恢复数据
复制代码
mysqlbinlog -v /var/lib/mysql/binlog.000011 --start-position=601 --stop-position=706 | mysql -uroot -p'Root@123'
相关推荐
熬夜敲代码的小N2 小时前
MySQL数据可视化实战:从SQL雕琢到图表绽放
sql·mysql·信息可视化
喜欢吃豆2 小时前
PostgreSQL 高维向量存储架构深度解析:架构限制、核心原理与行业解决方案
数据库·人工智能·postgresql·架构·2025博客之星
茁壮成长的露露2 小时前
Percona Backup for MongoDB备份恢复操作
数据库·mongodb
l1t2 小时前
一个在postgresql中运行很快,但是在duckdb中运行很慢的SQL
数据库·sql·postgresql·duckdb
曹牧2 小时前
Oracle:增加十分钟
数据库·oracle
码界奇点2 小时前
深入解析MySQL9主从复制架构详解从原理到实战
数据库·sql·架构·可用性测试
独自归家的兔2 小时前
深度对比:PostgreSQL与MySQL的核心差异及选型指南
数据库·mysql·postgresql
结衣结衣.2 小时前
Redis的基本全局命令以及数据类型和内部编码
数据库·redis·bootstrap
抠脚学代码2 小时前
Qt与Linux
linux·数据库·qt