首页 > 数据库 >MySQL binlog日志总结

MySQL binlog日志总结

时间:2023-09-01 23:33:29浏览次数:56  
标签:binlog mysql cache MySQL 缓冲区 临时文件 日志

概念描述

binlog日志:
  • binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。binlog可用于实时备份,主从复制master->slave的数据同步。

知识总结

binlog相关参数:

  • log_bin:
#开启binlog参数,可以指定路径与自定义binlog名称
例:
log_bin = /data/mysql/binlogs/mysql-bin-129
  • log_bin_index
设置此参数是指定二进制索引文件的路径与名称
  • binlog_do_db/binlog_ignore_db
#binlog_do_db:此参数表示只记录指定数据库的二进制日志,默认全部记录。
#binlog_ignore_db:此参数表示不记录指定的数据库的二进制日志。
#这两个参数为互斥关系,一般只选择其一设置,只能在启动命令行中或配置文件中加入。

例:
binlog_do_db = db1(库级别添加,多个库用逗号分割)
binlog_ignore_db = db1
  • max_binlog_size
Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束。
  • sync_binlog
#这个参数直接影响mysql的性能和完整性
sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

#当设置为“1”的时候,是最安全但是性能损耗最大的设置。
  • binlog_cache_size/max_binlog_cache_size
binlog cache
#当执行DML语句的时候会向binlog cache 不断写入Event,作为Event的“中转站”
#整个事务的Event在commit时才会真正的写入binary log,在此之前,这些Event都被存放在binlog cache。

#binlog cache包含以下两个部分:
1.binlog cache缓冲区:由参数binlog_cache_size 控制。
2.binlog cache临时文件:由参数max_binlog_cache_size 控制。

#binlog cache流程:
1.开启读写事务
2.执行dml语句,在dml语句第一次执行时会分配内存空间给 binlog cache缓冲区
3.执行dml语句期间生成的event不断地写入 binlog cache缓冲区
4.如果binlog cache缓冲区已经写满,则将binlog cache缓冲区的数据写入binlog cache临时文件,同时清空binlog cache缓冲区,这个临时文件由ML开头无法查看。
5.事务提交,binlog cache缓冲区和binlog cache临时文件数据全部写入binary log进行固化,释放binlog cache缓冲区和binlog cache临时文件。这时binlog cache 缓冲区的内存空间将会保留以供下次使用,binlog cache临时文件大小截断为0,保留文件描述符(IO_CACHE)结构。
6.断开连接,这个过程会释放IO_CACHE,同时释放其持有的binlog cache缓冲区以及binlog cache临时文件

#参数max_binlog_cache_size:会话级别参数(默认与最大值都为4G),定义了binlog cache临时文件最大容量,如果某个事务的event 总量大于max_binlog_cache_size设置+binlog_cache_size设置的大小则会抛出报错(ERROR 1197)

#通过binlog_cache_use和binlog_cache_disk_use中可以看出是否使用了binlog cache缓冲区binlog cache临时文件(计数单位次)

MySQL binlog日志总结_mysql


MySQL binlog日志总结_mysql_02

  • 禁止当前会话中的binlog写入(当前会话生效)
    mysql> set sql_log_bin=1/0;(1开启,0禁用)
  • 查看当前binlog数量
    mysql> show binary logs;
  • 产生一个新的binlog日志文件
    mysql> flush logs;

binlog删除

  • 自动删除:
    通过binlog参数(expire_logs_days )来实现mysql自动删除binlog。
  • 手动删除:
purge master logs to 'binlog.000018'; //删除指定日志文件的日志索引中binlog日志文件(不包含binlog.000018)

purge master logs before '2023-05-15 10:20:00'; //删除指定日期以前的日志索引中binlog日志文件

标签:binlog,mysql,cache,MySQL,缓冲区,临时文件,日志
From: https://blog.51cto.com/u_13482808/7327078

相关文章

  • DBeaver 使用中遇到驱动的问题并解决方案--mysql
    一、DBeaver的下载二、DBeaver的安装1、双击下载的EXE安装包,按提示选择目录进行安装即可三、DBeaver的配置1、第一次启动时会有一个弹窗,意思是添加一个连接数据库的模板,可以选择否2、点击窗口-首选项-连接-驱动-Maven,点击添加,增加仓库源地址(阿里云:https://maven.aliyun.com/......
  • .NetCore6 与 MySql 联查 (使用Lambda表达式树)
    MySql 官网链接:  https://www.donet5.com/Doc/99999999999/1180    2. 落实代码  or and 并且(满足所有条件) 或者(满足其中一个条件)  查询 OrIF !非空,查询  3. 联查表  官网找方法   4.落实  我这有一个字典表......
  • Git使用教程-安装、配置、建立本地仓库、本地仓库的基本操作(查看工作区的文件状态,添加
    Git介绍一、为什么要学习Git?在开发一个软件时,这份工作通常需要一个team来完成。我们把这个软件划分为不同的模块,每个人负责一个模块的开发和维护。在这个过程中,如何保持team中成员软件开发的同步,保存开发周期中各个历史版本,解决team中成员间开发的版本冲突?Git是对这个问题......
  • mysql超出最大连接数解决方法
    遇到mysql超出最大连接数,相信不少人第一反应就是查看mysql进程,看有没有慢查询,当然这个做法是完全正确的!但是很多时候真正的问题不在这里。今天有遇到同样的问题,一味查看mysql进程和慢查询日志,无果。后来老大提点了一下,查看一下nginx日志,发现有一两个访问执行时候比较长,然后使用top......
  • mysql的GTID同步
    什么是GTID?GTID(GlobalTransactionID)是对于一个已提交事务的编号,并且是一个全局唯一的编号。GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。下面是一个GTID的具体形式:03a1eb63......
  • 下载和安装MySQL服务器
    要下载和安装MySQL服务器,您可以按照以下步骤进行操作。请注意,MySQL的版本和安装方法可能会有所不同,因此确保查看官方网站以获取最新的安装指南和下载链接。以下是在常见的Windows、Linux和macOS操作系统上安装MySQL服务器的基本步骤:在Windows上安装MySQL服务器:访问MySQL官方......
  • 达梦数据库:第一章:MySQL数据库与达梦数据库的区别
    达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM,它具有如下特点:1、通用性达梦数据库管理系统兼容多种硬件体系,可运行于X86、X64、SPARC、POWER等硬件体系之上。DM各种平台上的数据存储结构和消息通信结构完全一致,使得DM各种组件在不同的硬......
  • MySQL 的 commit 是怎么 commit 的?【转】
    MySQL的 commit命令提交事务时,内部会进行两阶段(Prepare和Commit)提交,这篇文章基于MySQL8.0.33对MySQL的两阶段提交进行源码分析,带你了解提交事务过程中都经历了什么。以下是整体逻辑:一、Prepare阶段1.BinlogPrepare获取上一个事务最大的 sequencenumber时间戳。......
  • 【MySQL】MySQL主从复制延迟原因及处理思路
     MySQL主从复制延迟原因及处理思路主库DML请求频繁(TPS较大)主库写请求较多,有大量insert、delete、update并发操作,短时间产生了大量的binlog【原因分析】主库并发写入数据,而从库SQLThread为单线程应用日志,很容易造成relaylog堆积,产生延迟。【解决思路】做sharding,通过s......
  • 通过延迟从库来恢复MySQL数据【转】
    在前面,我们讲了,通过创建一个临时从库,再把数据同步到误操作的前一个事务,来恢复误删除的数据,可以点击跳转。但是临时准备一套从库,会多花费很多时间,那有没有更快的办法呢?这一篇文章,就讲一下通过延迟从库,来恢复误删除的数据。比如平时这个从库都是延迟主库1小时,当主库出现误操作,从......