【MySQL】MySQL中的二进制日志,它有哪些格式?

二进制日志(binary log)的一些概念

二进制日志(Binary Log)是MySQL中非常重要的组件,用于记录数据库中的数据更改和结构更改。下面是一些基本的概念与说明。

  • 包含数据和模式更改及其时间戳:
    • 二进制日志包括对数据库进行的各种更改,包括INSERT、UPDATE、DELETE等数据更改,以及ALTER TABLE等模式更改。
    • 每个记录都包括时间戳,记录了更改发生的时间。
  • 基于语句或基于行的日志记录:
    • 二进制日志可以配置为不同的格式,包括基于语句(Statement-Based)和基于行(Row-Based)的日志记录。
    • 基于语句记录会记录SQL语句,而基于行记录会记录每一行数据的更改。
  • 用途:
    • 从备份的时间点恢复:可以使用二进制日志来还原数据库到特定的时间点,以便恢复丢失的数据。
    • 从备份的完全恢复:将二进制日志与备份结合使用,以完全还原数据库状态。
    • 复制:二进制日志用于将主服务器上的更改传递给从属服务器,以保持数据同步。
  • 轮转:
    • 二进制日志会定期轮转,以控制日志文件的大小和数量。轮转发生在以下情况下:MySQL重新启动时;达到了max_binlog_size设置的最大大小;执行FLUSH LOGS语句时。
  • 可以通过不同的方式检查和管理二进制日志:
    • 元数据查询:可以使用SHOW BINARY LOGSSHOW MASTER STATUS等命令来查看有关二进制日志的元数据信息,如日志文件列表和位置。
    • 内容查看:使用mysqlbinlog命令可以查看二进制日志的内容,以了解其中包含的SQL语句和事件。

二进制日志的格式

MySQL支持三种不同的二进制日志格式,它们决定了如何记录二进制日志中的信息。我们可以通过设置全局或会话级别的binlog_format服务器变量来选择二进制日志的格式。以下是这三种格式的说明:

  • 基于行的日志记录(Row-Based Logging):
    • 基于行的日志记录是MySQL的默认格式。
    • 在这种格式下,二进制日志会记录对表中行数据的每个更改操作。这包括INSERT、UPDATE和DELETE操作。比如,使用update语句更改了一行,那么就会将修改过的行记录下来。
    • 缺点是可能产生较大的日志文件,因为它记录了所有更改的详细数据信息。优点是记录非常详细,可以完全还原每个更改。
  • 基于语句的日志记录(Statement-Based Logging):
    • 在这种格式下,二进制日志记录的是SQL语句,而不是行级操作。如果一条SQL语句修改了多行数据,只会记录一次该语句,而不是每一行的修改。
    • 优点是生成的日志文件通常较小,因此节省了磁盘空间和网络带宽。缺点是在某些情况下,SQL语句可能不足以完全还原数据的更改,特别是涉及到随机函数或非确定性操作时。
  • 混合记录(Mixed Logging):
    • 在这种格式下,默认使用基于语句的日志记录,当语句不确定时会使用基于行的日志记录。
    • 这种格式试图兼顾基于行和基于语句的优点,以提供更灵活的日志记录。

注意:不能在运行时更改binlog_format变量,必须在MySQL启动时设置。一些情况下,如从存储函数或触发器中进行更改、启用NDB存储引擎、或会话当前正在使用基于行的复制时,可能无法更改binlog_format变量。

感谢 💖

好啦,这次的分享就到这里,感谢大家看到这里🤞

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不怕娜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值