Jw
首页
技术
英语
首页
技术
英语
  • MySQL

    • MySQL 基础
    • 环境变量配置(PATH)
    • SQL 语法与分类
    • MySQL 数据类型
    • SQL - DDL 数据定义语言
    • SQL - DML 数据操作语言
    • SQL - DQL 数据查询语言
    • SQL - DCL 数据控制语言
    • MySQL 函数
    • SQL 约束
    • SQL 外键约束
    • 多表关系
    • 多表查询(连接查询)
    • 隐式内连接 vs 显式内连接
    • 子查询
    • 多表查询案例
    • 事务
    • 并发事务问题与隔离级别
    • MySQL 体系结构与存储引擎
    • 索引概述
    • 索引结构
    • 索引分类
    • 索引语法
    • SQL 性能分析
    • 索引使用
    • 索引设计原则
    • SQL 优化 - 插入数据与主键优化
    • SQL 优化 - order by 与 group by
    • SQL 优化 - limit / count / update
    • 视图
    • 存储过程
    • 存储过程 - 变量
    • 存储过程 - 流程控制、游标与条件处理
    • 存储函数
    • 触发器
    • 锁概述与全局锁
    • 表级锁
    • 行级锁
    • InnoDB 逻辑存储结构
    • InnoDB 架构
    • 事务原理(redo / undo log)
    • MVCC
    • MySQL 系统数据库
    • MySQL 常用工具
    • 数据备份与导入导出
    • 错误日志与二进制日志
    • 查询日志与慢查询日志
    • 主从复制 - 概述与原理
    • 主从复制 - 搭建
    • Mycat 配置
    • Mycat 垂直拆分与水平拆分
    • Mycat 分片规则
    • Mycat 管理与监控
    • Mycat 读写分离 - 一主一从
    • Mycat 读写分离 - 双主双从

错误日志与二进制日志

错误日志记录 mysqld 启停与严重错误,排障先看它;二进制日志记录所有 DDL / DML,用于数据恢复和主从复制。

一、错误日志

  • 错误日志是 MySQL 中最重要的日志之一:记录 mysqld 启动和停止时,以及服务器运行过程中发生任何严重错误时的相关信息。
  • 当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。
  • 该日志默认开启,默认存放目录 /var/log/,默认日志文件名为 mysqld.log。
-- 查看错误日志的位置
SHOW VARIABLES LIKE '%log_error%';
# 查看错误日志尾部(排障常用)
tail -n 100 /var/log/mysqld.log

Windows 下默认文件通常是数据目录中的 主机名.err。

二、二进制日志(BINLOG)

2.1 介绍

  • 二进制日志记录了所有的 DDL(数据定义语言) 和 DML(数据操纵语言) 语句,但**不包括数据查询(SELECT、SHOW)**语句。
  • 作用:① 灾难时的数据恢复;② MySQL 的主从复制。
  • 在 MySQL 8 版本中,二进制日志默认开启。
-- 查看二进制日志相关参数
SHOW VARIABLES LIKE '%log_bin%';
参数示例值含义
log_binON是否开启二进制日志
log_bin_basename/var/lib/mysql/binlog日志文件基本名,实际文件为 binlog.000008 等
log_bin_index/var/lib/mysql/binlog.index日志索引文件
log_bin_trust_function_creatorsOFF是否信任函数创建者
log_bin_use_v1_row_eventsOFF是否使用 v1 行事件
sql_log_binON当前会话是否记录二进制日志

日志目录下会按编号递增生成 binlog.000008、binlog.000009……以及 binlog.index。

2.2 日志格式

格式含义
STATEMENT基于 SQL 语句的日志记录,记录的是 SQL 语句,对数据进行修改的 SQL 都会记录在日志文件中
ROW基于行的日志记录,记录的是每一行的数据变更(默认)
MIXED混合了 STATEMENT 和 ROW,默认采用 STATEMENT,某些特殊情况下会自动切换为 ROW 记录
-- 查看当前二进制日志格式
SHOW VARIABLES LIKE '%binlog_format%';

ROW 记录的是行变更,日志量通常更大,但主从复制更可靠;STATEMENT 日志小,但某些函数 / 时间相关语句可能主从不一致。

2.3 日志查看

由于日志以二进制方式存储,不能直接读取,需要通过二进制日志查询工具 mysqlbinlog 查看:

mysqlbinlog [参数选项] logfilename
参数含义
-d指定数据库名称,只列出指定的数据库相关操作
-o忽略掉日志中的前 n 行命令
-v将行事件(数据变更)重构为 SQL 语句
-w将行事件(数据变更)重构为 SQL 语句,并输出注释信息
# 查看 binlog 内容(ROW 格式加 -v 才能看到具体变更)
mysqlbinlog -v /var/lib/mysql/binlog.000008

2.4 日志删除

对于比较繁忙的业务系统,每天生成的 binlog 数据巨大,长时间不清理会占用大量磁盘空间。常用清理方式:

指令含义
RESET MASTER删除全部 binlog 日志;删除后日志编号将从 binlog.000001 重新开始
PURGE MASTER LOGS TO 'binlog.******'删除 ****** 编号之前的所有日志
PURGE MASTER LOGS BEFORE 'yyyy-mm-dd hh24:mi:ss'删除该时间之前产生的所有日志

也可以配置过期时间,到期自动删除:

-- 查看二进制日志过期时间(秒)
SHOW VARIABLES LIKE '%binlog_expire_logs_seconds%';

RESET MASTER 会清空全部 binlog,主从环境或需按 binlog 恢复时不要随意执行。

速查

-- 错误日志位置
SHOW VARIABLES LIKE '%log_error%';

-- 二进制日志:是否开启、文件位置、格式
SHOW VARIABLES LIKE '%log_bin%';
SHOW VARIABLES LIKE '%binlog_format%';

-- 清理 binlog:全部 / 指定编号之前 / 指定时间之前
RESET MASTER;
PURGE MASTER LOGS TO 'binlog.000010';
PURGE MASTER LOGS BEFORE '2026-10-25 00:00:00';

-- 查看过期时间(秒)
SHOW VARIABLES LIKE '%binlog_expire_logs_seconds%';
# 查看 binlog 文本内容
mysqlbinlog -v /var/lib/mysql/binlog.000008

# 只看指定库、跳过前 10 行
mysqlbinlog -d itcast -o 10 -v /var/lib/mysql/binlog.000008
要做什么用什么
服务起不来 / 报严重错误先看错误日志 mysqld.log
恢复误删数据binlog + mysqlbinlog 找到对应操作
主从复制binlog(ROW 格式更可靠)
磁盘被 binlog 占满PURGE 或设置 binlog_expire_logs_seconds

相关

  • 查询日志与慢查询日志:general_log 与 slow_query_log
  • MySQL 常用工具:mysqlbinlog 的完整选项表
  • 事务原理(redo log 与 undo log):redo log 与 binlog 的区别
  • 数据备份与导入导出:mysqldump 备份与恢复
最近更新: 2026/10/25 11:41
Contributors: liujw
Prev
数据备份与导入导出
Next
查询日志与慢查询日志