您现在的位置是:主页 > 数据库技术 > 数据库技术

MySQL的binlog怎么使用

IDCBT2022-01-13服务器技术人已围观

简介这篇文章主要介绍了MySQL的binlog怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL的binlog怎么使用文章都会有所收获,下面我们一起来看

这篇文章主要介绍了MySQL的binlog怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL的binlog怎么使用文章都会有所收获,下面我们一起来看看吧。

MySQL 中的日志比较重要的有 binlog(归档日志)、redo log(重做日志)以及 undo log,那么跟我们本文相关的主要是 binlog。

1. binlog

binlog 我们中文一般称作归档日志,如果大家看过松哥之前发的 MySQL 主从搭建,应该对这个日志有印象,当我们搭建 MySQL 主从的时候就离不开 binlog。

binlog 是 MySQL Server 层的日志,而不是存储引擎自带的日志,它记录了所有的 DDL 和 DML(不包含数据查询语句)语句,而且是以事件形式记录,还包含语句所执行的消耗的时间等,需要注意的是:

    binlog 是一种逻辑日志,他里边所记录的是一条 SQL 语句的原始逻辑,例如给某一个字段 +1,注意这个区别于 redo log 的物理日志(在某个数据页上做了什么修改)。

    binlog 文件写满后,会自动切换到下一个日志文件继续写,而不会覆盖以前的日志,这个也区别于 redo log,redo log 是循环写入的,即后面写入的可能会覆盖前面写入的。

    一般来说,我们在配置 binlog 的时候,可以指定 binlog 文件的有效期,这样在到期后,日志文件会自动删除,这样避免占用较多存储空间。

    根据 MySQL 官方文档的介绍,开启 binlog 之后,大概会有 1% 的性能损耗,不过这还是可以接受的,一般来说,binlog 有两个重要的使用场景:

      MySQL 主从复制时:在主机上开启 binlog,主机将 binlog 同步给从机,从机通过 binlog 来同步数据,进而实现主机和从机的数据同步。

      MySQL 数据恢复,通过使用 mysqlbinlog 工具再结合 binlog 文件,可以将数据恢复到过去的某一时刻。

      2. 开启 binlog

      为了演示方便,松哥这里在 Docker 中安装了 MySQL,我们以此为例来开始今天的演示。如果小伙伴们还不懂 docker 的使用,可以在公众号后台回复 docker,有松哥写的教程。

      首先我们在 docker 中安装好 MySQL,然后进入到容器中,通过如下命令可以查看 binlog 是否开启:

      这个 OFF 就表示 binlog 是一个关闭状态,没有开启,接下来我们来开启 binlog。

      开启 binlog 主要是修改 MySQL 的配置文件 mysqld.cnf,该文件在容器的 /etc/mysql/mysql.conf.d 目录下。

      针对该配置文件,我们做如下修改:

      # 这个参数表示启用 binlog 功能,并指定 binlog 的存储目录
      log-bin=javaboy_logbin
      # 设置一个 binlog 文件的最大字节
      # 设置最大 100MB
      max_binlog_size=104857600
      # 设置了 binlog 文件的有效期(单位:天)
      expire_logs_days = 7
      # binlog 日志只记录指定库的更新(配置主从复制的时候会用到)
      #binlog-do-db=javaboy_db
      # binlog 日志不记录指定库的更新(配置主从复制的时候会用到)
      #binlog-ignore-db=javaboy_no_db
      # 写缓存多少次,刷一次磁盘,默认 0 表示这个操作由操作系统根据自身负载自行决定多久写一次磁盘
      # 1 表示每一条事务提交都会立即写磁盘,n 则表示 n 个事务提交才会写磁盘
      sync_binlog=0
      # 为当前服务取一个唯一的 id(MySQL5.7 之后需要配置)
      server-id=1

      标签:

      很赞哦! ()

本栏推荐