MySQL的binlog日志详解

binlog就是binarylog,二进制日志文件,这个文件记录了MySQL所有的DML操作。通过binlog日志我们可以做数据恢复,增量备份,主主复制和主从复制等等。对于开发者可能对binlog并不怎么关注,但是对于运维或者架构人员来讲是非常重要的。MySQL5.7这个版本默认是不开启binlog日志的,具体的开启方式可以查看https://blog.csdn.net/king_kgh…

大家好,又见面了,我是你们的朋友全栈君。

binlog 就是binary log,二进制日志文件,这个文件记录了MySQL所有的DML操作。通过binlog日志我们可以做数据恢复,增量备份,主主复制和主从复制等等。对于开发者可能对binlog并不怎么关注,但是对于运维或者架构人员来讲是非常重要的。

MySQL 5.7这个版本默认是不开启binlog日志的,具体的开启方式可以查看https://blog.csdn.net/king_kgh/article/details/74800513

binlog开启成功之后,binlog文件的位置可以在my.inf配置文件中查看。也可以在MySQL的命令行中查看。命令行查看代码如下

show variables like '%log_bin%';

我们也可以看一下当前MySQL的binlog的情况

show master status;

MySQL的binlog日志详解

从上图可以看到,当前只有一个binlog文件,文件名为:mysql-bin.000001。每当我们重启一次,会自动生成一个binlog文件,我们重启完毕之后再来执行同样的命令,内容如下:

MySQL的binlog日志详解

存放binlog的目录下也多个了这么一个文件。

当然,我们也可以手动的来刷新binlog文件,通过 flush logs,同样会新创建一个binlog文件。实际上当服务器在重启时,也会调用flush logs操作。

MySQL的binlog日志详解

如果我们想把这些文件全部清空,可以使用reset master 来处理

MySQL的binlog日志详解

下面我来看针对单个文件的操作,首先我们想看一下文件的内容

找到binlog的目录,比如我们要看mysql-bin.000001

vi mysql-bin.000001

MySQL的binlog日志详解

我们看到的一堆乱码。我们知道这是一堆的二进制文件,所以以文本的方式打开二进制文件一定是有问题的,那么我们该如何查看这个文件的内容呢?

mysql给我们提供了一个用于查看binlog日志的工具,叫做mysqlbinlog

mysqlbinlog myql-bin.000001

MySQL的binlog日志详解

这个文件比较长,一次打开看不完怎么办呢,这里可以使用linux的管道,这里就不详细的说了,可以自己去查找关于linux的一些知识。

注意到上面的截图中有一个position字段,这个字段类似于一个指针,目前这个字段的值为154,表示的就是binlog当前的位置。我们每次执行dml操作,position都会改变。比如我们先来创建一个数据 test

在创建之前我们可以清一下binlog日志方便我们查看,可以使用 reset master。在生产环境中,这个操作是非常危险的,那么我们可以使用flush logs来处理,生成一个新的binlog文件。不管采用哪种方式,我们在测试的环境中,只要有一个新的binlog文件就可以了。生成了新的binlog文件之后,我们可以通过show master status 来查看状态

MySQL的binlog日志详解

下面我们来执行一个dml语句,比如我们要创建一个test数据库

create database test;

然后我们来查看创建之后的状态,如下,我们发现position从154变成了313,也就是说我们的操作是在154到313之间,然后我们再来看binlog的内容。

MySQL的binlog日志详解

我们截取154到313之间的binlog的内容如下:

# at 154

#170708 9:24:02 server id 12345 end_log_pos 219 CRC32 0x30763ffe Anonymous_GTID last_committed=0 sequence_number=1

SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;

# at 219

#170708 9:24:02 server id 12345 end_log_pos 313 CRC32 0x4d0140b3 Query thread_id=5 exec_time=0 error_code=0

SET TIMESTAMP=1499477042/*!*/;

SET @@session.pseudo_thread_id=5/*!*/;

SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;

SET @@session.sql_mode=1436549152/*!*/;

SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;

/*!\C utf8 *//*!*/;

SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;

SET @@session.lc_time_names=0/*!*/;

SET @@session.collation_database=DEFAULT/*!*/;

create database test

/*!*/;

SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;

DELIMITER ;

# End of log file

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

我们可以看到,mysql做了很多的隐含的操作,细心的朋友会看到有这个一句:create database test;

 

下面我们来简单总结一下关于binlog:

1.binlog文件会随服务的启动创建一个新文件

2.通过flush logs 可以手动刷新日志,生成一个新的binlog文件

3.通过show master status 可以查看binlog的状态

4.通过reset master 可以清空binlog日志文件

5.通过mysqlbinlog 工具可以查看binlog日志的内容

6.通过执行dml,mysql会自动记录binlog

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125467.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java的常量

    java的常量JAVA变量与常量常量常量值常量常量的声明定义常量常量在c语言编程网中的定义是指在程序的整个运行过程中值保持不变的量。在这里要注意常量和常量值是不同的概念,常量值是常量的具体和直观的表现形式,常量是形式化的表现。这里体现出常量值这一定义,我认为的常量值就是值,具体的某一数值百度出来的常量是定义为两种意思:一是不可变的变量,也是最最最开始接触java知道的,二如上。平时所说的值指的是常量值,常量是不可变的变量(用final修饰的变量)常量值提到常量值不得不说一下计数法,八进制、十进制、十六进制所代

  • MFC 读取EXCEL中数据[通俗易懂]

    MFC 读取EXCEL中数据[通俗易懂]MFC读取Excel例子(2013-01-1200:04:24)转载▼标签:365mfcit分类:MFC-office操作1.       首先要将excel类添加到工程中。在ClassWizard中,【AddClass】,在Excel的安装目录找到Excel.exe(Microsoft2003是Excel

  • Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStreamJavaIO流学习总结三:缓冲流转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54292148本文出自【赵彦军的博客】InputStream|__FilterInputStream|__BufferedInputStream首先抛出一个问题,有了InputStream为什么还要有Buffered

    2022年10月20日
  • oracle修改用户名密码语句_oracle修改数据库用户名

    oracle修改用户名密码语句_oracle修改数据库用户名oracle修改用户名,密码首先我们打开命令行,cmd,进入oracle的后台管理界面,当然,还有很多其他的方式可以进入oracle后台管理界面,比如使用PL/SQL界面化工具,或者使用oracle自带的SQL工具。打开命令窗口,登录oracle后台管理界面:具体命令为在运行处输入cmd,在弹出的命令提示窗口输入setoracle_sid=数据库名称,输入sqlplus进入ora…

  • 解决win10升级后无法打开VC问题「建议收藏」

    解决win10升级后无法打开VC问题「建议收藏」最近有不少小伙伴问到:“为什么win10自动升级后,我之前安装的VC怎么打不开了,一直报‘应用程序无法正常启动(0xc0000142)之类的错误’”。有的小伙伴把之前安装过的VC卸载后重装,然而重装后并没有解决问题,VC仍然打不开,还是报上面的错误。博主亲自尝试的一翻,并将报错的截图献给大家(有图有真相),对于有过经历的小伙伴一定很熟悉吧。       好了,咱们就直接进入主题

  • Pytest(11)allure报告「建议收藏」

    Pytest(11)allure报告「建议收藏」前言allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面。mac环境:

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号