Mysql BinLog存储机制与数据恢复方式

 更新时间:2024年06月01日 15:04:34   作者:FYHannnnnn  
这篇文章主要介绍了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(row-based replication, RBR):日志中会记录每一行数据被修改的情况,然后在 slave端对相同的数据进行修改。

  • 优点:能清楚记录每一个行数据的修改细节,能完全实现主从数据同步和数据的恢复。
  • 缺点:批量操作,会产生大量的日志,尤其是alter table会让日志暴涨。

STATMENT(statement-based replication, SBR):每一条被修改数据的SQL都会记录到 master的Binlog中,slave在复制的时候SQL进程会解析成和原来master端执行过的相同的 SQL再次执行。简称SQL语句复制。(Sql语句的复制和Redo Log有相似)

  • 优点:日志量小,减少磁盘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的集合。

Log Event结构图:

四,BinLog 写入机制

1,根据记录模式和操作触发event事件生成log event(事件触发执行机制)

2,将事务执行过程中产生log event写入缓冲区,每个事务线程都有一个缓冲区 Log Event保存在一个binlog_cache_mngr数据结构中,在该结构中有两个缓冲区,一个是 stmt_cache,用于存放不支持事务的信息;另一个是trx_cache,用于存放支持事务的信息。

3,事务在提交阶段会将产生的log event写入到外部binlog文件中。 不同事务以串行方式将log event写入binlog文件中,所以一个事务包含的log event信息在 binlog文件中是连续的,中间不会插入其他事务的log event。

五,BinLog 与 redo Log区别

Redo Log是属于InnoDB引擎功能,Binlog是属于MySQL Server自带功能,并且是以二进制 文件记录。

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

六,BinLog 日志分析与恢复

I,BinLog开启相关配置要修改my.cnf或my.ini配置文件,在[mysqld]下面log_bin=mysql_bin_log

II. 查看服务器上有哪些BinLog文件命令: show binary logs;

III.查看当前朝哪一个文件中写入内容命令: show master status;

IV.查看当前有哪一些事件类型命令:show binlog events; or 指定文件名称 show binlog events in 文件名

V.mysqlbinlog 文件名,查看BinLog内容(此命令非cmd命令,需要到安装mysql服务器上执行),执行该命令时需要注意不能带有分号,否则报错

如果想要恢复这一段,那么就要使用到起始点和结束点,或者去使用时间,但是时间不规范,因为同时间并发操作下,恢复可能会出现问题。

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

恢复命令如下:

按指定时间恢复

mysqlbinlog --start-datetime="2021-10-27 14:23:00" --stopdatetime="2021-10-27 14:30:00" mysqlbinlog.000002 | mysql -uXXX -pXXX

按事件位置号恢复

mysqlbinlog --start-position=9281 --stop-position=9232 mysqlbinlog.000002 | mysql -uXXX -pXXX

VI.BinLog 文件删除

purge binary logs to 'mysqlbinlog.000001'; //删除指定文件
purge binary logs before '2021-10-27 00:00:00'; //删除指定时间之前的文件
reset master; //清除所有文件

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解MySQL实现主从复制过程

    详解MySQL实现主从复制过程

    这篇文章主要为大家详细介绍了MySQL主从复制的实现过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 详解mysql5.7密码忘记解决方法

    详解mysql5.7密码忘记解决方法

    这篇文章主要介绍了mysql5.7密码忘记解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • MySQL配置文件my.cnf中文版对照

    MySQL配置文件my.cnf中文版对照

    MySQL配置文件my.cnf中文版,使用mysql的朋友可以参考下,了解每个参数的重要性。
    2011-09-09
  • MySQL不支持INTERSECT和MINUS及其替代方法

    MySQL不支持INTERSECT和MINUS及其替代方法

    这篇文章主要介绍了MySQL不支持INTERSECT和MINUS情况下的替代方法,需要的朋友可以参考下
    2014-03-03
  • MySQL中distinct和group by去重的区别解析

    MySQL中distinct和group by去重的区别解析

    在MySQL中,我们经常需要对查询结果进行去重,而DISTINCT和GROUP BY是实现这一功能的两种常见方法,这篇文章主要介绍了MySQL中distinct和group by去重的区别,需要的朋友可以参考下
    2025-01-01
  • MySQL 8.0 中 LIMIT 优化新特性使用场景及最佳实践

    MySQL 8.0 中 LIMIT 优化新特性使用场景及最佳实践

    MySQL 8.0.21新增prefer_ordering_index参数,允许干预优化器在排序索引与过滤索引间的偏好,解决分页查询性能问题,提升效率,本文给大家介绍MySQL8.0 中LIMIT优化新特性,感兴趣的朋友一起看看吧
    2025-07-07
  • MySQL 中字符集详细介绍

    MySQL 中字符集详细介绍

    这篇文章主要介绍了MySQL 中字符集详细介绍,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Mysql使用insert插入多条记录 批量新增数据

    Mysql使用insert插入多条记录 批量新增数据

    这篇文章主要介绍了Mysql使用insert插入多条记录批量新增数据,需要的朋友可以参考下
    2017-08-08
  • mysql 8.0.12 安装配置图文教程

    mysql 8.0.12 安装配置图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.12 安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Mysql 中的多表连接和连接类型详解

    Mysql 中的多表连接和连接类型详解

    这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据组合在一起,从而进行更复杂的查询和分析,感兴趣的朋友一起看看吧
    2025-01-01

最新评论