当用户发出commit的时候, mysql服务器宕机了, 下次启动的时候是回滚还是恢复呢....图片
强制kill掉mysqld
图片
启动mysqld 验证数据
发现有数据, 说明启动的时候恢复了数据
图片
结论
说明binlog写完之后宕机, 下次启动就能正常恢复. binlog未写宕机,下次启动就会回滚...主要是因为binlog要用来做主从,一但写了binlog,那么从库就可能已经有数据了, 此时回滚的话,主从数据就不一致了, 所有得提交....MYSQL_BIN_LOG::process_flush_stage_queue 回滚
刷binlog前 MYSQL_BIN_LOG::flush_cache_to_file 回滚
刷binlog后 MYSQL_BIN_LOG...::flush_cache_to_file 提交
其实还可以使用gdb看下mysqld启动的时候是怎样恢复的.