MySQL 8.0与MySQL 5.7的binlog差异小结

点击上方蓝字关注我

9e6033391e4447684fdb0299b6afcce7.png

    MySQL是一个广泛使用的开源关系型数据库管理系统,它提供了许多强大的功能,如事务、存储过程、触发器、视图、全文索引等。但是,MySQL也有一些不足之处,比如数据的安全性和可靠性。如果数据库发生故障或损坏,如何恢复数据?如果数据库需要进行主从复制或读写分离,如何保证数据的一致性?这些问题都需要借助一个特殊的机制来解决,那就是binlog。

b6ba105382d898f6f692a79bbfebeda8.jpeg


1. binlog的主要用途
    binlog是MySQL的一个重要特性,它是一个用于记录数据库变更的二进制日志文件,每一条会修改数据的SQL语句都会被记录在binlog中。通过binlog,我们可以实现以下几个目的:
•数据恢复:如果数据库发生故障或损坏,我们可以通过binlog来恢复数据,只需要将binlog中的SQL语句按照顺序重新执行一遍,就可以将数据库恢复到故障发生前的状态。
•主从复制:如果数据库需要进行主从复制,我们可以通过binlog来实现,只需要将主库的binlog传输到从库,并在从库上执行binlog中的SQL语句,就可以将从库的数据与主库保持一致。
•审计:如果数据库需要进行审计,我们可以通过binlog来实现,只需要分析binlog中的SQL语句,就可以了解数据库的变更历史,如何操作,何时操作,操作了哪些数据等。
    可以看出,binlog是MySQL的一个非常重要的特性,它对于数据库的安全性和可靠性有着重要的作用。但是,随着MySQL的版本更新,binlog也发生了一些变化,这些变化可能会影响我们对binlog的使用和理解。在本文中,我们将介绍MySQL 8.0版本与MySQL 5.7版本在binlog方面的主要差异,以及这些差异的原因和影响。

2.  binlog格式的变化
binlog的格式决定了binlog中记录的内容和形式,MySQL支持三种binlog格式,分别是:
• STATEMENT:每一条会修改数据的SQL语句都会记录在binlog中,不记录具体的数据变化,而是记录SQL语句的上下文信息,如执行时间、用户、数据库、表等。
•ROW:每一条会修改数据的SQL语句都会记录在binlog中,不记录SQL语句本身,而是记录每一行数据的变化,如插入、更新、删除等。
•MIXED:根据SQL语句的类型和特性,自动选择STATEMENT或ROW格式来记录binlog,以达到最佳的效果。
MySQL 8.0版本与MySQL 5.7版本在binlog格式方面的主要差异是:
• MySQL 8.0版本引入了一个新的系统变量binlog_expire_logs_seconds,用来设置binlog的过期时间,单位是秒。这个变量比MySQL 5.7的expire_logs_days更精确,可以根据需要动态调整。
•MySQL 8.0版本支持了事务性数据字典,这意味着数据字典的变更也会记录在binlog中,以保证主从复制的一致性。
•MySQL8.0版本增加了一个新的binlog事件类型TRANSACTION_PAYLOAD_EVENT,用来存储事务的元数据,如事务ID,事务大小,是否只读等。这些信息可以用来优化复制性能和监控事务活动。
•MySQL8.0版本改进了binlog的压缩算法,使用了zstd压缩库,可以提高压缩比和压缩速度,同时减少CPU的开销。
原因:
• MySQL 8.0版本引入了binlog_expire_logs_seconds变量,是为了提供更灵活的binlog管理,避免binlog文件过多占用磁盘空间,也避免binlog文件过少导致数据恢复或复制失败。
•MySQL 8.0版本支持了事务性数据字典,是为了提高数据库的可靠性和一致性,避免数据字典的损坏或不同步导致的问题。
•MySQL 8.0版本增加了TRANSACTION_PAYLOAD_EVENT事件类型,是为了提高复制的效率和稳定性,避免复制延迟或丢失数据的问题。
•MySQL 8.0版本改进了binlog的压缩算法,是为了提高binlog的传输和存储性能,节省网络和磁盘资源,降低系统的负载。
影响:
•MySQL 8.0版本引入了binlog_expire_logs_seconds变量,对于用户来说,可以更灵活地设置binlog的过期时间,根据业务需求和资源情况进行调整,提高binlog的管理效率。
•MySQL8.0版本支持了事务性数据字典,对于用户来说,可以更放心地使用MySQL,不用担心数据字典的损坏或不同步导致的问题,也可以更方便地查看和修改数据字典的信息。
•MySQL 8.0版本增加了TRANSACTION_PAYLOAD_EVENT事件类型,对于用户来说,可以更快速地进行主从复制,也可以更清晰地监控事务的活动,提高数据库的性能和可观察性。
•MySQL8.0版本改进了binlog的压缩算法,对于用户来说,可以更节省网络和磁盘资源,也可以更快地传输和存储binlog,提高数据库的性能和可靠性。

3. binlog管理的变化
binlog的管理主要涉及到binlog的生成、传输、存储、删除等操作,MySQL提供了一些命令和变量来进行binlog的管理,如:
•  show master logs:查看所有binlog的日志列表。
•  show master status:查看binlog日志状态。
•  flush logs:刷新binlog日志文件,刷新之后会创建一个新的binlog日志文件。
•  reset master:清空所有的binlog日志文件。
•  mysqlbinlog:查看或解析binlog日志文件的内容。
•  log_bin:binlog的开关。
•  binlog_format:binlog日志的格式。
•  expire_logs_days:binlog日志的过期天数。
•  sync_binlog:binlog日志的同步策略。
MySQL 8.0版本与MySQL 5.7版本在binlog管理方面的主要差异是:
• MySQL 8.0版本引入了一个新的系统变量binlog_expire_logs_seconds,用来设置binlog的过期时间,单位是秒。这个变量比MySQL 5.7的expire_logs_days更精确,可以根据需要动态调整
•MySQL8.0版本引入了一个新的系统变量binlog_rotate_encryption_master_key_at_startup,用来设置是否在启动时旋转加密的binlog主键。如果这个变量设置为ON,那么每次服务器重启时,都会生成一个新的binlog加密密钥,并用作新的binlog主键。这样可以增强binlog的安全性,防止密钥泄露或被破解
•MySQL 8.0版本支持使用ALTER INSTANCE ROTATE BINLOG MASTER KEY语句手动旋转binlog主键。当使用这个语句时,服务器会执行以下操作:生成一个新的binlog加密密钥并存储在密钥环上,用作新的binlog主键;旋转所有通道上的binlog和中继日志文件;使用新的binlog主键加密新的和现有的binlog和中继日志文件的文件密码;删除不再使用的binlog加密密钥
•MySQL8.0版本支持使用binlog_row_event_max_size系统变量设置row格式的binlog事件的最大大小,单位是字节。这个变量是一个软限制,尽可能地将binlog中的行分组到不超过这个值的事件中。如果一个事件无法分割,那么最大大小可以超过。这个变量的值必须是(或者会被向下取整到)256的倍数。默认值是8192字节


4.  小结

MySQL 8.0和MySQL 5.7之间的二进制日志(binlog)主要的变化如下:

  • 默认的binlog格式:MySQL 8.0默认使用ROW格式,ROW格式记录每行数据的变化,而STATEMENT格式记录SQL语句的执行

  • 新的binlog缓冲机制:MySQL 8.0引入了一种新的binlog缓冲机制,可以提高性能并减少磁盘I/O。在MySQL 5.7中,使用了基于磁盘的binlog缓冲

  • binlog加密:MySQL 8.0引入了二进制日志的加密功能,可以在传输过程中对binlog进行加密。MySQL 5.7没有原生支持二进制日志的加密

  • 在线binlog重置:MySQL 8.0支持在线重置二进制日志,而MySQL 5.7需要停止和启动MySQL服务进行重置

  • 新的事务描述事件:MySQL 8.0引入了新的ANONYMOUS_GTID_EVENT事务描述事件,用于记录匿名GTID的信息。MySQL 5.7中没有这个事件

  • GTID的一些改进:MySQL 8.0对GTID的处理进行了一些改进,提高了复制的可靠性和易用性其他性能和安全性的改进:

  • MySQL 8.0包含许多其他性能和安全性的改进,包括更好的并行复制支持、更好的崩溃安全性等

f7ac1d914c61e82cf67b530bfab7a222.png

往期精彩回顾

1.  MySQL高可用之MHA集群部署

2.  mysql8.0新增用户及加密规则修改的那些事

3.  比hive快10倍的大数据查询利器-- presto

4.  监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

5.  PostgreSQL主从复制--物理复制

6.  MySQL传统点位复制在线转为GTID模式复制

7.  MySQL敏感数据加密及解密

8.  MySQL数据备份及还原(一)

9.  MySQL数据备份及还原(二)

de99b3e3a69f5c8f939affea32c716d0.png

扫码关注     

ad6a2ca0c14a88a00dac2151d4da023d.jpeg

f26d91f6f13c65d61278b819fefade43.png

53a0cc9f526f4c4653bb6311517ee56e.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值