MySQL 日誌相關

2021-10-03 19:53:56 字數 3442 閱讀 7165

2. redo log 和 binlog 有什麼區別?

3. 什麼是 crash-safe?

4. 什麼是髒頁和乾淨頁?

5. 什麼情況下會引發 mysql 刷髒頁(flush)的操作?

6. mysql 刷髒頁的速度很慢可能是什麼原因?

7. 如何控制 mysql 只重新整理當前髒頁?

8.mysql 的 wal 技術是解決什麼問題的?

9. 為什麼有時候會感覺 mysql 偶爾卡一下?

10. redo log 和 binlog 是怎麼關聯的?

11. mysql 怎麼知道 binlog 是完整的?

12.mysql 中可不可以只要 binlog,不要 redo log?

13. mysql 中可不可以只要 redo log,不要 binlog?

14. 為什麼 binlog cache 是每個執行緒自己維護的,而 redo log buffer 是全域性共用的?

15. 事務執行期間,還未提交,如果發生 crash,redo log 丟失,會導致主備不一致呢?

16. 在 mysql 中用什麼機制來優化隨機讀/寫磁碟對 io 的消耗?

17. 關於redo log 和 binlog一些正確說法

18. 有沒有辦法把 mysql 的資料恢復到過去某個指定的時間節點?怎麼恢復?

1. mysql 有哪些重要的日誌檔案?

a. 錯誤日誌

mv hostname.err hostname.err.old mysqladmin flush-logs
b. 查詢日誌

在併發操作非常多的場景下,查詢資訊會非常多,那麼如果都記錄下來會導致 io 非常大,影響 mysql 效能,因此如果不是在除錯環境下,是不建議開啟查詢日誌功能的。

查詢日誌的開啟有助於幫助我們分析哪些語句執行密集,執行密集的 select 語句對應的資料是否能夠被快取,同時也可以幫助我們分析問題,所以,我們可以根據自己的實際情況來決定是否開啟查詢日誌。

查詢日誌模式是關閉的,可以通過以下命令開啟查詢日誌,general_log=1 為開啟查詢日誌,0 為關閉查詢日誌,這個設定命令即時生效,不用重啟 mysql 伺服器:

set

global generallog=

1set

global logoutput=

'table'

;

c. 慢日誌:
set

global slowquerylog=

'on'

;

d. redo log(重做日誌)

e. undo log(回滾日誌)

f. bin log(二進位制日誌)

binlog 對於事務儲存引擎的崩潰恢復也有非常重要的作用:

binlog 預設是關閉狀態,可以在 mysql 配置檔案(my.cnf)中通過配置引數 log-bin = [base-name] 開啟記錄 binlog 日誌,如果不指定 base-name,則預設二進位制日誌檔名為主機名,並以自增的數字作為字尾,比如:mysql-bin.000001,所在目錄為資料庫所在目錄(datadir)

通過以下命令來查詢 binlog 是否開啟:

show variables like

'log_%'

;

row 格式是從 mysql 5.1 開始支援基於行的複製,也就是基於資料的複製,基於行的更改:

mixed 也是 mysql 預設使用的二進位制日誌記錄方式

2. redo log 和 binlog 有什麼區別?

redo log(重做日誌)和 binlog(歸檔日誌)都是 mysql 的重要的日誌,它們的區別如下:

最開始 mysql 裡並沒有 innodb 引擎,mysql 自帶的引擎是 myisam,但是 myisam 沒有 crash-safe 的能力,binlog 日誌只能用於歸檔。

而 innodb 是另乙個公司以外掛程式形式引入 mysql 的,既然只依靠 binlog 是沒有 crash-safe 能力的,所以 innodb 使用另外一套日誌系統,也就是 redo log 來實現 crash-safe 能力。

3. 什麼是 crash-safe?

crash-safe 是指發生宕機等意外情況下,伺服器重啟後資料依然不會丟失的情況。

4. 什麼是髒頁和乾淨頁?

5. 什麼情況下會引發 mysql 刷髒頁(flush)的操作?

6. mysql 刷髒頁的速度很慢可能是什麼原因?

7. 如何控制 mysql 只重新整理當前髒頁?

在 innodb 中設定innodb_flush_neighbors這個引數的值為 0,來規定 mysql 只刷當前髒頁,mysql 8 這個值預設是 0。

8.mysql 的 wal 技術是解決什麼問題的?

9. 為什麼有時候會感覺 mysql 偶爾卡一下?

如果偶爾感覺 mysql 卡一下,可能是 mysql 正在刷髒頁,正在把記憶體中的更新操作刷到磁碟中。

10. redo log 和 binlog 是怎麼關聯的?

它們有乙個共同的資料字段,叫 xid。崩潰恢復的時候,會按順序掃瞄 redo log:

11. mysql 怎麼知道 binlog 是完整的?

12.mysql 中可不可以只要 binlog,不要 redo log?

不可以,binlog 沒有崩潰恢復的能力。

13. mysql 中可不可以只要 redo log,不要 binlog?

不可以,原因有以下兩個:

14. 為什麼 binlog cache 是每個執行緒自己維護的,而 redo log buffer 是全域性共用的?

因為 binlog 是不能「被打斷的」,乙個事務的 binlog 必須連續寫,因此要整個事務完成後,再一起寫到檔案裡。而 redo log 並沒有這個要求,中間有生成的日誌可以寫到 redo log buffer 中,redo log buffer 中的內容還能「搭便車」,其他事務提交的時候可以被一起寫到磁碟中。

15. 事務執行期間,還未提交,如果發生 crash,redo log 丟失,會導致主備不一致呢?

不會,因為這時候 binlog 也還在 binlog cache 裡,沒發給備庫,crash 以後 redo log 和 binlog 都沒有了,從業務角度看這個事務也沒有提交,所以資料是一致的。

16. 在 mysql 中用什麼機制來優化隨機讀/寫磁碟對 io 的消耗?

redo log 是用來節省隨機寫磁碟的 io 消耗,而 change buffer 主要是節省隨機讀磁碟的 io 消耗。redo log 會把 mysql 的更新操作先記錄到記憶體中,之後再統一更新到磁碟,而 change buffer 也是把關鍵查詢資料先載入到記憶體中,以便優化 mysql 的查詢。

17. 關於redo log 和 binlog一些正確說法

18. 有沒有辦法把 mysql 的資料恢復到過去某個指定的時間節點?怎麼恢復?

MySQL日誌相關

對於mysql的日誌還沒有仔細研究過,目前只是使用了乙個通用日誌,所以在這裡先列舉mysql的主要日誌檔案,接下來有時間會去研究一下,畢竟很多時候,日誌可以更精確的定位問題,所以了解一下mysql的日誌系統還是很有必要的。檢視日誌是否啟用 show variables like log 1 mysq...

Mysql日誌相關

在 mysql 中也稱為通用日誌 general log 查詢日誌裡面記錄了資料庫執行的所有命令,不管語句是否正確,都會被記錄,原因如下 查詢日誌的開啟有助於幫助我們分析哪些語句執行密集,執行密集的 select 語句對應的資料是否能夠被快取,同時也可以幫助我們分析問題,但是在併發操作非常多的場景下...

MySQL相關日誌介紹

錯誤日誌 log error 查詢日誌 query log 二進位制日誌 binary log 2.相關日誌的作用 1 錯誤日誌 error log 記錄mysql服務程序mysql在啟動 關閉或者執行過程中遇到的錯誤訊息.是工作中排查錯誤的重要工具.2 查詢日誌 query log 1 普通查詢日...