首頁 > 資料庫 > mysql教程 > mysql InnoDB的崩潰復原過程是什麼

mysql InnoDB的崩潰復原過程是什麼

WBOY
發布: 2023-05-28 11:07:11
轉載
1174 人瀏覽過

1、redo log操作:保證已提交交易影響的最新資料刷到資料頁裡。

2、undo log操作:保證未提交交易影響的資料頁回溯。

3、寫緩衝(change buffer)合併。

4、purge操作。

InnoDB的一種垃圾收集機制,使用單獨的後台執行緒週期性處理索引中標記刪除的資料。

實例

/* Look for MLOG_CHECKPOINT. */
recv_group_scan_log_recs(group, &contiguous_lsn, false);
/* The first scan should not have stored or applied any records. */
ut_ad(recv_sys->n_addrs == 0);
ut_ad(!recv_sys->found_corrupt_fs);
 
if (recv_sys->found_corrupt_log && !srv_force_recovery) {
log_mutex_exit();
return(DB_ERROR);
}
 
if (recv_sys->mlog_checkpoint_lsn == 0) {
if (!srv_read_only_mode
    && group->scanned_lsn != checkpoint_lsn) {
ib::error() << "Ignoring the redo log due to missing"
" MLOG_CHECKPOINT between the checkpoint "
<< checkpoint_lsn << " and the end "
<< group->scanned_lsn << ".";
if (srv_force_recovery < SRV_FORCE_NO_LOG_REDO) {
log_mutex_exit();
return(DB_ERROR);
}
}
 
group->scanned_lsn = checkpoint_lsn;
rescan = false;
} else {
contiguous_lsn = checkpoint_lsn;
rescan = recv_group_scan_log_recs(
group, &contiguous_lsn, false);
 
if ((recv_sys->found_corrupt_log && !srv_force_recovery)
    || recv_sys->found_corrupt_fs) {
log_mutex_exit();
return(DB_ERROR);
}
}
 
/* NOTE: we always do a 'recovery' at startup, but only if
there is something wrong we will print a message to the
user about recovery: */
 
if (checkpoint_lsn != flush_lsn) {
 
if (checkpoint_lsn + SIZE_OF_MLOG_CHECKPOINT < flush_lsn) {
ib::warn() << " Are you sure you are using the"
" right ib_logfiles to start up the database?"
" Log sequence number in the ib_logfiles is "
<< checkpoint_lsn << ", less than the"
" log sequence number in the first system"
" tablespace file header, " << flush_lsn << ".";
}
 
if (!recv_needed_recovery) {
 
ib::info() << "The log sequence number " << flush_lsn
<< " in the system tablespace does not match"
" the log sequence number " << checkpoint_lsn
<< " in the ib_logfiles!";
 
if (srv_read_only_mode) {
ib::error() << "Can&#39;t initiate database"
" recovery, running in read-only-mode.";
log_mutex_exit();
return(DB_READ_ONLY);
}
 
recv_init_crash_recovery();
}
}
 
log_sys->lsn = recv_sys->recovered_lsn;
 
if (recv_needed_recovery) {
err = recv_init_crash_recovery_spaces();
 
if (err != DB_SUCCESS) {
log_mutex_exit();
return(err);
}
 
if (rescan) {
contiguous_lsn = checkpoint_lsn;
recv_group_scan_log_recs(group, &contiguous_lsn, true);
 
if ((recv_sys->found_corrupt_log
     && !srv_force_recovery)
    || recv_sys->found_corrupt_fs) {
log_mutex_exit();
return(DB_ERROR);
}
}
} else {
ut_ad(!rescan || recv_sys->n_addrs == 0);
}
登入後複製

以上是mysql InnoDB的崩潰復原過程是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板