基于MySQL5.7版本,5.7版本在恢复过程做了优化,本文描述不考虑之前版本。

回到顶部(go to top)

1 初始化崩溃恢复

    数据库关闭只有2种情况,正常关闭,非正常关闭(包括数据库实例crash及服务器crash)。

    正常关闭情况,所有buffer pool里边的脏页都会都会刷新一遍到磁盘,同时记录最新LSN到ibdata文件的第一个page中。而非正常关闭来不及做这些操作,也就是没及时把脏数据flush到磁盘,也没有记录最新LSN到ibdata file。

    当我们重启数据库实例的时候,数据库做2个阶段性操作:redo log处理,undo log及binlog 处理。

1.1 redo log处理

  • 打开系统表空间ibdata,读取第一个page中的LSN,若第一个页损坏,则依次往后面的page读,知道有个完整的page能够提供LSN,这个LSN当作上次shutdown时的checkpoint点,后续恢复,从这个LSN点开始恢复