問題
mysqlbinlog 是將 binlog 解析成可讀可執行的 SQL 的重要工具。
但解析體積較大的 binlog 時,如何查看 mysqlbinlog 的執行進度就變成了一個問題,mysqlbinlog 並未提供 –progress 這樣的參數。
那要怎麼查看 mysqlbinlog 的解析進度?
實驗
我們在 實驗 08 中介紹瞭如何生成隨機數據。可以利用其中技巧,生成較大的 binlog,我們忽略這個過程。
從已有的 binlog 開始,bin.000002 大約有 1.1 個 G:
用 mysqlbinlog 解析該 binlog:
大概會執行 4.6 秒左右。大家仔細做實驗時,可以將 binlog 放大一些,讓執行實驗更長一些。
我們在 mysqlbinlog 解析時,查看其文件句柄:
可以看到 mysqlbinlog 用句柄 3 讀取 binlog。(我們暫時忽略句柄 4 指向的臨時文件,其涉及到了行格式的解析過程,我們安排在以後的實驗中慢慢介紹)
獲取了 mysqlbinlog 處理文件句柄 3 的進度,就可以大概估算 mysqlbinlog 的整體進度:
可以看到 mysqlbinlog 此時的進度大概是 600M 左右,整體進度估算為 54%。
結論
我們無法讓 mysqlbinlog 直接輸出進度,於是通過觀察 mysqlbinlog 對 binlog 的讀取進度,估算mysqlbinlog 的整體處理進度。
mysqlbinlog 不是真的"流式"處理 binlog,所以本實驗只能是估算,大家在實驗時,會觀察到 mysqlbinlog 讀取了全部 binlog 後,會繼續處理一點時間,才完成所有工作。
我們以後安排實驗來研究 mysqlbinlog 是如何處理 binlog 的。
關於 MySQL 的技術內容,你們還有什麼想知道的嗎?趕緊留言告訴小編吧!