MySQL之binlog用法及介绍

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_%';

image-20220716180829516

如上图所示则说明binlog开启成功

六、常用的binlog日志操作命令

1、查看所有binlog日志列表

mysql> show master logs;

image-20220716181051776

2、查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值

mysql> show master status;

image-20220716181608894

3、flush刷新log日志,自此刻开始产生一个新编号的binlog日志文件

image-20220716181658611

注意:每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志;

4、重置(清空)所有binlog日志

image-20220716181843752

七、查看binlog日志内容

Ⅰ 使用mysqlbinlog自带查看命令法

在kali系统中,myslq的binlog位于 /var/lib/mysql/ 路径下

image-20220716182932488

使用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)]

例子:

<
  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值