极客时间上MySQL实战45讲第二讲中关于binlog的描述是不是错误的?

redo log 是物理日志,记录的是"在某个数据页上做了什么修改";
binlog是逻辑日志,记录的是这个语句的原始逻辑,比如"给ID=2 这一行的c字段加1";

上面是极客时间上的内容;

然而
根据高性能MySQL第二版第8章 复制讲述:
MySQL支持两种复制方案:基于语句复制(Statement-Based Replication)和基于行复制(Row-Based Replication)
基于语句复制在MySQL3.23就存在了,它也是现在使用最多的复制方式。
基于行复制是MySQL5.1的新特性。

基于行复制不就是直接复制一行的内容在binlog吗?怎么还能说是逻辑日志,记录的是语句的原始逻辑呢

阅读 3.2k
4 个回答

这个是正确的,可能你理解有误。目前 redo 日志不参与复制,而且只有 Innodb 引擎有 redo 日志。

基于语句复制和基于行复制指的是 binlog 的格式,由参数 binlog_format 指定。

  • 基于语句复制就是把你执行的语句记录在 binlog 里面
  • 基于行复制就是把行变化以 SQL 的形式记录在 binlog 里面
binlog_format

谢谢邀请。
回答这类问题,肯定还是根据官方的文档来看,官方文档 (https://dev.mysql.com/doc/ref... 对binlog的描述:

The server's binary log consists of files containing “events” that describe modifications to database contents. The server writes these files in binary format. To display their contents in text format, use the mysqlbinlog utility. You can also use mysqlbinlog to display the contents of relay log files written by a slave server in a replication setup because relay logs have the same format as binary logs.

binlog记录了对MySQL数据库执行更改的所有操作(即DDL和DML语句),但不包括SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改。改变数据库的SQL语句执行结束时,将在binlog的末尾写入一条记录,同时通知语句解析器,语句执行完毕。

是正确的,binlog中的bin是指该log二进制方式存储,而不是记录数据的二进制修改

抱歉,来晚一步,谢谢邀请!赞成楼上给出的答案:)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题