mysql二进制日志(binlog)读取、删除、位置和格式详细讲解
一.概述
二进制日志(binlog)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句, 语句以"事件"的形式保存,它描述了数据的更改过程,此日志对灾难时的数据恢复起着极其重要的作用。
1.1 日志的位置和格式
在my.cnf中可以查看log-bin的位置,mysqld将包含所有更新数据的sql命令写入日志文件,位置如下图所示:
下面通过环境变量来查看当前binlog位置和状态
-- 通过环境变量来查看位置 SHOW VARIABLES LIKE '%log_bin%'
下面查询所有binlog日志文件
上图中mysql-bin.index是日志的索引文件,记录了最大的日志序号。
1.2 日志的读取
由于日志以二进制方式存储,不能直接读取,需要用mysqlbinlog工具来查看。在33篇里有讲到开启binlog以及查看内容,这里不在详述。
https://www.cnblogs.com/MrHSR/p/9555313.html
1.3 日志的删除
对于繁忙的事务处理系统,每天会生成大量日志内容,日志如果长时间不清除,将会对磁盘空间带来很大的浪费,因此定期删除日志是DBA维护mysql数据库的一个重要工作内容,下面介绍几种方法。
(1) 执行sql 的reset master; 命令,该命令将删除所有binlog日志,新日志编号从000001开始。请谨慎使用此语句,以确保不会丢失二进制日志文件数据。特别是在主从库上,导致日志不同步报错。清空所有日志如下:
(2) 使用purge以日志编号为条件。例如:执行purge master logs to 'mysql-bin.000006'; 将删除06编号之前的所有日志,如下图所示:
(3) 使用purge 以时间为条件。例如:执行purge master logs before '2018-09-06'; 删除9月6日之前的所有日志,如下图所示:
(4) 使用expire_logs_days
此参数设置在my.cnf中,是用来设置日志的过期天数,过了指定的天数后日志将会自动删除,这样有利于减少DBA的管理的工作量。如下所示:
注意在my.cnf中参数如果设置错误。例如设置成expire_logs_day=1。 在重启mysql服务器,进程将启动失败,如下图所示:
在my.cnf中设置,重新启动mysql服务 如下图所示:
-- 通过环境变量来查看位置 SHOW VARIABLES LIKE '%expire_logs_days%'
现来查看日志,重启服务后日志只保留了一天,也就是今天9月7日的日志。如下图所示:
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解