MySQL的binlog日志使用详解

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

MySQL 5.7这个版本默认是不开启binlog日志的,具体的开启方式可以查看https://www.jb51.net/article/207953.htm

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

show variables like '%log_bin%';

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

show master status;

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

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

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

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

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

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

vi mysql-bin.000001

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

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

mysqlbinlog myql-bin.000001

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

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

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

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

create database test;

然后我们来查看创建之后的状态,如下,我们发现position从154变成了313,也就是说我们的操作是在154到313之间,然后我们再来看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

到此这篇关于MySQL的binlog日志使用详解的文章就介绍到这了,更多相关MySQL binlog日志使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mysql数据库清理binlog日志命令详解

    概述 今天主要分享下mysql数据库应该如何正确的删除binlog日志,这里要注意不要强制使用rm命令进行清除.否则mysq-bin.index错乱,最终导致后期expire-log-days配置项失效. 1.查看binlog日志 mysql> show binary logs; 2.删除某个日志文件之前的所有日志文件 purge binary logs to 'mysql-bin.000035'; 3.清理2019-09-09 13:00:00前binlog日志 PURGE MASTER LO

  • MySQL 自动清理binlog日志的方法

    说明: 开启MySQL binlog日志的服务器,如果不设置自动清理日志,默认binlog日志一直保留着,时间一长,服务器磁盘空间被binlog日志占满,导致MySQL数据库出错. 使用下面方法可以安全清理binlog日志 一.没有主从同步的情况下清理日志 mysql -uroot -p123456 -e 'PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ),INTERVAL 5 DAY)'; #mysql 定时清理5天前的binlog mysql -u root

  • mysql binlog(二进制日志)查看方法

    例如,在创建新表或更新现有表上的数据时,这些事件将存储在mysql binlog中,也就是MySQL数据库的二进制日志. 二进制日志在MySQL复制中非常有用,主服务器将数据从二进制日志发送到远程服务器. 当您在MySQL中执行任何类型的恢复操作时,您还将处理二进制日志文件. mysqlbinlog命令用于以可读的用户友好格式查看二进制日志的内容. 那么我们怎么获取查看mysql binlog(二进制日志)? 下面给大家介绍获取当前二进制日志列表的命令方法. 从mysql执行以下show bin

  • MySQL读取Binlog日志常见的3种错误

    1. mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8mb4' 当我们在my.cnf中添加default-character-set=utf8mb4选项,那么在mysqlbinlog查看binlog时就会报错. 解决方案:.mysqlbinlog 后面添加 --no-defaults 选项 例如: mysql bin可执行文件所在路径/bin/mysqlbinlog --no-defaults binlog所在目录

  • 开启MySQL的binlog日志的方法步骤

    binlog 就是binary log,二进制日志文件,这个文件记录了mysql所有的dml操作.通过binlog日志我们可以做数据恢复,做主住复制和主从复制等等.对于开发者可能对binlog并不怎么关注,但是对于运维或者架构人员来讲是非常重要的. 如何开启mysql的binlog日志呢? 在my.inf主配置文件中直接添加三行 log_bin=ON log_bin_basename=/var/lib/mysql/mysql-bin log_bin_index=/var/lib/mysql/my

  • Mysql数据库之Binlog日志使用总结(必看篇)

    binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了.下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理: 一.binlog日志介绍 1)什么是binlog binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句.语句以"事件"的形式保存,它描述数据更改. 2)binlog作用 因为有了数据更新的binlog,所以可以用于实时备份,与master/slave主从复制结合. 3)和b

  • mysql binlog二进制日志详解

    基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句. 作用: 1.二进制日志的主要目的是在恢复使能够最大可能地更新数据库,因为二进制日志包含备份后进行的所有更新. 2.二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句. 不良影响: 运行服务器时若启用二进制日志则性能大约慢1%. 如何启动: 通过 –log-bin=file选项可以启用 (更改my.ini文件) 日志位置 >>如果没有指定文件名,则Mysql使

  • mysql 正确清理binlog日志的两种方法

    mysq 正确清理binlog日志 前言: MySQL中的binlog日志记录了数据库中数据的变动,便于对数据的基于时间点和基于位置的恢复,但是binlog也会日渐增大,占用很大的磁盘空间,因此,要对binlog使用正确安全的方法清理掉一部分没用的日志. [方法一]手动清理binlog 清理前的准备: ① 查看主库和从库正在使用的binlog是哪个文件 show master status\G show slave status\G ② 在删除binlog日志之前,首先对binlog日志备份,以

  • MySQL的binlog日志使用详解

    binlog 就是binary log,二进制日志文件,这个文件记录了MySQL所有的DML操作.通过binlog日志我们可以做数据恢复,增量备份,主主复制和主从复制等等.对于开发者可能对binlog并不怎么关注,但是对于运维或者架构人员来讲是非常重要的. MySQL 5.7这个版本默认是不开启binlog日志的,具体的开启方式可以查看https://www.jb51.net/article/207953.htm binlog开启成功之后,binlog文件的位置可以在my.inf配置文件中查看.

  • 详解监听MySQL的binlog日志工具分析:Canal

    Canal是阿里巴巴旗下的一款开源项目,利用Java开发.主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费,目前主要支持MySQL. GitHub地址:https://github.com/alibaba/canal 在介绍Canal内部原理之前,首先来了解一下MySQL Master/Slave同步原理: MySQL master启动binlog机制,将数据变更写入二进制日志(binary log, 其中记录叫做二进制日志事件binary log events,可以通过sho

  • mysql日志文件General_log和Binlog开启及详解

    目录 背景: General_log 详解 1.介绍 2.开启数据库general_log步骤 Binlog 详解 1.介绍 2.开启binlog日志 3.常用binlog日志操作命令 4.mysqlbinlog命令使用 5.binlog的三种工作模式 总结 背景: 周末归纳下mysql的日志文件,其中general_log在mysql入侵中已经用到过,binlog即将会用到.注:mysql版本为5.7.20 General_log 详解 1.介绍 开启 general log 将所有到达MyS

  • MySQL之高可用架构详解

    目录 引言 MySQL高可用 一主一备: MySQL主从同步的几种模式: 总结 引言 "高可用"是互联网一个永恒的话题,先避开MySQL不谈,为了保证各种服务的高可用有几种常用的解决方案. 服务冗余:把服务部署多份,当某个节点不可用时,切换到其他节点.服务冗余对于无状态的服务是相对容易的. 服务备份:有些服务是无法同时存在多个运行时的,比如说:Nginx的反向代理,一些集群的leader节点.这时可以存在一个备份服务,处于随时待命状态. 自动切换:服务冗余之后,当某个节点不可用时,要做

  • redhat7.1 安装mysql 5.7.10步骤详解(图文详解)

    在redhat下安装MySQL,步骤如下 Mysql目录安装位置:/usr/local/mysql 数据库保存位置:/data/mysql 日志保存位置:/data/log/mysql 下载安装包 http://downloads.mysql.com/archives/community/ 1. 获取mysql安装包,mysql-5.7.10-Linux-glibc2.5-x86_64.tar解压后目录如下. 2. 解压mysql-5.7.10-linux-glibc2.5-x86_64.tar

  • MySQL 各个索引的使用详解

    一. 慢查询日志 1.1 MySQL的日志类型 日志用于记录数据库的运行情况,以及用户对数据库执行的各类操作.当数据库发生故障时,可以根据日志分析和解决问题,从而对数据库进行恢复. 1.2 认识慢查询日志 慢查询日志用于记录MySQL数据库中响应时间超过指定阈值的语句.慢查询日志通常也被称之为慢日志,因为它不仅仅只针对SELECT语句,像INSERT.UPDATE.DELETE等语句,只要响应时间超过所设定阈值都会记录在慢查询日志中. 1.3 如何开启慢查询日志命令 慢查询日志可以通过命令临时设

  • MYSQL中Truncate的用法详解

    本文导读:删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所有行,而不记录单个行删除操作.TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似:但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少.下面介绍SQL中Truncate的用法 当你不再需要该表时, 用 drop:当你仍要保留该表,但要删除所有记录时, 用 truncate:当你要删除部分记录时(always with a WHE

  • MYSQL大量写入问题优化详解

    摘要:大家提到Mysql的性能优化都是注重于优化sql以及索引来提升查询性能,大多数产品或者网站面临的更多的高并发数据读取问题.然而在大量写入数据场景该如何优化呢? 今天这里主要给大家介绍,在有大量写入的场景,进行优化的方案. 总的来说MYSQL数据库写入性能主要受限于数据库自身的配置,以及操作系统的性能,磁盘IO的性能.主要的优化手段包括以下几点: 1.调整数据库参数 (1) innodb_flush_log_at_trx_commit 默认为1,这是数据库的事务提交设置参数,可选值如下: 0

随机推荐