第二个改变是为Redo log引入了版本信息(WL#8845),存储在ib_logfile的头部,从文件头开始,描述如下
MacrobytesDescLOG_HEADER_FORMAT 4 当前值为1(LOG_HEADER_FORMAT_CURRENT),在老版本中这里的值总是为0
LOG_HEADER_PAD1 4 新版本未使用
LOG_HEADER_START_LSN 8 当前iblogfile的开始LSN
LOG_HEADER_CREATOR 32 记录版本信息,和MySQL版本相关,例如在5.7.11中,这里存储的是”MySQL 5.7.11”(LOG_HEADER_CREATOR_CURRENT)
每次切换到下一个iblogfile时,都会更新该文件头信息(log_group_file_header_flush)
新的版本支持兼容老版本(recv_find_max_checkpoint_0),但升级到新版本后,就无法在异常状态下in-place降级到旧版本了(除非做一次clean的shutdown,并清理掉iblogfile)。
具体实现参阅该commit。
在MySQL的InnoDB存储引擎中count(*)函数的优化