一、FORMAT_DESCRIPTION_EVENT
1、FORMAT_DESCRIPTION_EVENT的作用
本Event是binary log的第一個(gè)Event。這個(gè)Event比較簡單,因?yàn)樗鼣y帶的數(shù)據(jù)都是固定的,沒有可變部分。其中包含了binary log的版本信息、MySQL的版本信息、Event_header的長度、以及每個(gè)Event type的固定部分的長度。
下面信息將會(huì)保存在從庫的內(nèi)存中:
- 在從庫的內(nèi)存中保存主庫的信息,這個(gè)變量是Master_info.mi_description_event。
queue_event函數(shù)中case binary_log::FORMAT_DESCRIPTION_EVENT部分。
- 將從庫的relay log的FORMAT_DESCRIPTION_EVENT記錄為和主庫相同,即更新Relay_log_info.rli_description_event。
Format_description_log_event::do_apply_event函數(shù)中如下片段:
/* Save the information describing this binlog */
copy_crypto_data(*rli->get_rli_description_event());
const_cast<Relay_log_info *>(rli)->set_rli_description_event(this);
至少下面幾個(gè)地方都會(huì)讀取其中的信息:
- 每次SQL線程應(yīng)用Event的時(shí)候會(huì)獲取Event_header的長度和相應(yīng)Event固定部分的長度。
- IO線程啟動(dòng)的時(shí)候檢測(cè)版本,參考函數(shù)get_master_version_and_clock。
- 將信息寫入到relay log的開頭的FORMAT_DESCRIPTION_EVENT中。
它一定出現(xiàn)在binary log開頭,位置固定為‘#4’。