binlog
文章目录
一、什么是binlog?
- binlog是一个二进制格式的文件,可以说是MySQL最重要的日志,它记录了所有的DDL(create、alter、drop)和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。
- 默认情况下,binlog日志是二进制格式的,不能使用查看文本工具的命令(比如,cat,vi等)查看,而使用mysqlbinlog解析查看。
总结:binlog记录数据库增删改,不记录查询的二进制日志.
二、binlog有什么作用?
- 主要作用是用于数据库的主从复制及数据的增量恢复。
- 当有数据写入到数据库时,还会同时把更新的SQL语句写入到对应的binlog文件里,这个文件就是上文说的binlog文件。使用mysqldump备份时,只是对一段时间的数据进行全备,但是如果备份后突然发现数据库服务器故障,这个时候就要用到binlog的日志了。
三、binlog日志分类
- 二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件
- 二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句select)语句事件。
四、binlog与redolog的区别?
这两者使用方式不一样
- binlog 会记录表所有更改操作,包括更新删除数据,更改表结构等等,主要用于人工恢复数据,而 redo log 对于我们是不可见的,它是 InnoDB 用于保证 crash-safe 能力的,也就是在事务提交后MySQL崩溃的话,可以保证事务的持久性,即事务提交后其更改是永久性的。一句话概括:binlog 是用作人工恢复数据,redolog 是 MySQL 自己使用,用于保证在数据库崩溃时的事务持久性。
- redo log 是 InnoDB 引擎特有的,binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。
- redo log 文件是固定大小的,是循环写的,写满了会从头继续写,而 binlog 是追加写的,写满了再新建文件接着写。
五、如何配置binlog?
注意:在kali系统中,binlog配置文件位于:
/etc/mysql/my.cnf
1、打开配置文件:
vim /etc/mysql/my.cnf
2、在配置文件的末尾添加如下代码:
[mysqld]
log-bin=mysql-bin
3、重启mysqld服务使配置生效
/etc/init.d/mysqld stop
/etc/init.d/mysqld restart
**注意:**每次服务器(数据库)重启,服务器会调用flush logs;,新创建一个binlog日志!
4、查看binlog日志是否开启
进入MySQL查看:
myslq -uroot -p
mysql> show variables like 'log_%';
如上图所示则说明binlog开启成功
六、常用的binlog日志操作命令
1、查看所有binlog日志列表
mysql> show master logs;
2、查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值
mysql> show master status;
3、flush刷新log日志,自此刻开始产生一个新编号的binlog日志文件
注意:每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志;
4、重置(清空)所有binlog日志
七、查看binlog日志内容
Ⅰ 使用mysqlbinlog自带查看命令法
在kali系统中,myslq的binlog位于 /var/lib/mysql/
路径下
使用mysqlbinlog命令查看binlog日志内容,下面截取其中的一个片段分析:
mysqlbinlog mysql-bin.000001
..............
# at 624
#160925 21:29:53 server id 1 end_log_pos 796 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1474810193/*!*/;
insert into member(`name`,`sex`,`age`,`classid`) values('wangshibo','m',27,'cls1'),('guohuihui','w',27,'cls2') **#执行的sql语句**
/*!*/;
# at 796
#160925 21:29:53 server id 1 end_log_pos 823 Xid = 17 **#执行的时间**
.............
名称解释:
server id 1 : 数据库主机的服务号;
end_log_pos 796: sql结束时的pos节点
thread_id=3: 线程号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R23nNCdV-1657975954231)(https://s2.loli.net/2022/07/16/UNslHQ5IiETdO9c.png)]
例子:
<