当前位置: 首页 > article >正文

MySQL三大日志-Binlog

Binlog简介

Redo Log 是属于InnoDB引擎所特有的日志,而MySQL Server也有自己的日志,即 Binary log(二进制日志),简称Binlog。Binlog是记录所有数据库表结构变更以及表数据修改的二进制日志,不会记录SELECT和SHOW这类操作。Binlog日志是以事件形式记录,还包含语句所执行的消耗时间。

Binlog作用

  • 主从复制:在主库中开启Binlog功能,这样主库就可以把Binlog传递给从库,从库拿到 Binlog后实现数据恢复达到主从数据一致性。
  • 数据恢复:通过mysqlbinlog工具来恢复数据。

Binlog记录模式

Binlog文件名默认为“主机名_binlog-序列号”格式,例如oak_binlog-000001,也可以在配置文件中指定名称。文件记录模式有STATEMENT、ROW和MIXED三种,具体含义如下。

  • ROW:日志中会记录每一行数据被修改的情况,然后在 slave端对相同的数据进行修改。

优点:能清楚记录每一个行数据的修改细节,能完全实现主从数据同步和数据的恢复。

缺点:批量操作,会产生大量的日志,尤其是alter table会让日志暴涨。

  • STATMENT:每一条被修改数据的SQL都会记录到master的Binlog中,slave在复制的时候SQL进程会解析成和原来master端执行过的相同的SQL再次执行。简称SQL语句复制。

优点:日志量小,减少磁盘IO,提升存储和恢复速度

缺点:在某些情况下会导致主从数据不一致,比如last_insert_id()、now()等函数。

  • MIXED(mixed-based replication, MBR):以上两种模式的混合使用,一般会使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存Binlog,MySQL会根据执行的SQL语句选择写入模式。

Binlog文件结构

MySQL的Binlog文件中记录的是对数据库的各种修改操作,用来表示修改操作的数据结构是Log event。不同的修改操作对应的不同的log event。比较常用的log event有:Query event、Row event、Xid event等。Binlog文件的内容就是各种Log event的集合。

event

Binlog写入机制

  1. 根据记录模式和操作触发event事件生成log event(事件触发执行机制)
  2. 将事务执行过程中产生log event写入缓冲区,每个事务线程都有一个缓冲区

Log Event保存在一个binlog_cache_mngr数据结构中,在该结构中有两个缓冲区,一个是

stmt_cache,用于存放不支持事务的信息;另一个是trx_cache,用于存放支持事务的信息。

  1. 事务在提交阶段会将产生的log event写入到外部binlog文件中。

不同事务以串行方式将log event写入binlog文件中,所以一个事务包含的log event信息在

binlog文件中是连续的,中间不会插入其他事务的log event。

Binlog相关命令

  • Binlog状态查看

在这里插入图片描述

  • 开启Binlog功能

需要修改my.cnf或my.ini配置文件,在[mysqld]下面增加log_bin=mysql_bin_log,重启MySQL服务。

  • show binlog events

在这里插入图片描述

  • mysqlbinlog “文件名” > “test.sql”
  • 使用 Binlog 恢复数据

mysqlbinlog --start-datetime=“2024-01-01 00:00:00” --stop-datetime="2024-12-

20 00:00:00" mysqlbinlog.000001 | mysql -uroot -proot

mysqlbinlog --start-position=100 --stop-position=1000 mysqlbinlog.000001 | mysql -uroot

-proot

  • mysqldump:定期全部备份数据库数据。mysqlbinlog可以做增量备份和恢复操作。

Redo Log和Binlog区别

  • Redo Log是属于InnoDB引擎功能,Binlog是属于MySQL Server自带功能,并且是以二进制文件记录。
  • Redo Log属于物理日志,记录该数据页更新状态内容,Binlog是逻辑日志,记录更新过程。
  • Redo Log日志是循环写,日志空间大小是固定,Binlog是追加写入,写完一个写下一个,不会覆盖使用。
  • Redo Log作为服务器异常宕机后事务数据自动恢复使用,Binlog可以作为主从复制和数据恢复使用。Binlog没有自动crash-safe能力。

http://www.kler.cn/a/446848.html

相关文章:

  • 搭建MPI/CUDA开发环境
  • 【Maven】dependencyManagement依赖版本管理
  • LeetCode 热题 100_K 个一组翻转链表(31_25_困难_C++)(四指针法)
  • WeakAuras NES Script(lua)
  • 使用React构建一个掷骰子的小游戏
  • QT c++ 测控系统 一套报警规则(上)
  • linux作 samba 服务端,linux windows文件互传,免账号密码
  • 底层理论基础(单片机)
  • Vue3组件封装技巧与心得
  • 科技快讯 | 中国版星链正式升空;美团:已在部分城市试点优化疲劳管理机制;OpenAI开放满血o1模型API 成本暴降60%
  • java 基于冷热数据分离的思想设计LRU链表
  • 扫雷游戏(基础版)
  • 前端开发性能监控中的数据采集与性能调优方法
  • 前端通过new Blob下载文档流(下载zip或excel)
  • uniapp小程序样式穿透
  • 深度学习实战车辆目标跟踪【bytetrack/deepsort】
  • notepad++快捷键-多行编辑中如何使所有行的光标都向后移动一个单词的长度(每行单词长度不一定一致)
  • cenos如何升级git到2以上版本
  • centos7下docker 容器实现redis主从同步
  • 智慧农业云平台与水肥一体化:道品科技引领农业现代化新潮流
  • 玩转树莓派Pico(19): 迷你气象站5——软件整合
  • 代码随想录第52天
  • 【数据分析】层次贝叶斯
  • 电子应用设计方案-64:智能窗帘系统方案设计
  • React与Vue的区别(相同点和不同点)
  • 一个签名笔迹量化分析专家辅助系统