简单记录一下
我们知道在做Crash recovery的时候需要根据事物状态做相应的处理
- ACTIVE :回滚 - PREPARE:一句binlog中的XID进行判断是否回滚还是提交 - COMMIT:当然就提交了
那么这种状态记录在哪里的呢?实际上他是记录在undo segment header和undo log record header中的。恢复后undo是完整的我们只需要复活这些事物就好如下: 参考函数:
trx_lists_init_at_db_start
trx_resurrect_insert
trx_resurrect_update
trx_rollback_or_clean_recovered
#define TRX_UNDO_ACTIVE 1 /* contains an undo log of an active
transaction */
#define TRX_UNDO_CACHED 2 /* cached for quick reuse */
#define TRX_UNDO_TO_FREE 3 /* insert undo segment can be freed */
#define TRX_UNDO_TO_PURGE 4 /* update undo segment will not be
reused: it can be freed in purge when
all undo data in it is removed */
#define TRX_UNDO_PREPARED 5 /* contains an undo log of an
prepared transaction */