第三章 文件(學習筆記)

  1. 參數文件

  MySQL實例啓動時,數據庫會先讀取參數文件,用來尋找數據庫的各類文件所在位置以及指定某些初始化參數。與Oracle數據庫不一樣的是,若是沒有配置參數文件,MySQL啓動時,會加載默認值。數據庫

  靜態參數是隻讀的,動態參數能夠在MySQL實例運行中進行更改,其修改範圍能夠參考MySQL官方手冊中 Dynamics System Variables相關內容。緩存

  2. 日誌文件

  2.1 錯誤日誌(error log)spa

  該文件記錄了全部的錯誤信息,也記錄了一些警告信息和正確信息。能夠經過命令 SHOW VARIABLES LIKE 'log_error' 來定位該文件日誌

  2.2 慢查詢日誌(slow query log)orm

  能夠在MySQL啓動時設一個閾值(long_query_time = 10000ms),將運行時間超過該值的全部SQL語句都記錄到慢查詢日誌中。若是運行的SQL語句沒有使用索引(log_throttle_queries_not_using_indexes,每分鐘未使用索引的SQL語句多少次後加入慢查詢日誌),也會被加入到慢查詢日誌中。blog

  2.3 二進制日誌(binlog)索引

  二進制日誌記錄了對MySQL數據庫執行更改的全部操做(不包括SELECT SHOW等操做)。主要有如下幾種做用:事務

  • 恢復(recovery)  經過二進制日誌進行point-in-time 的恢復 (第八章介紹)
  • 複製(replication)經過複製和執行二進制日誌使一臺遠程的MySQL數據庫(通常爲slave)與一臺MySQL數據庫(master)進行實時同步。
  • 審計(audit)  用戶能夠經過二進制日誌中的信息來進行審計,判斷是否有對數據庫進行注入的攻擊。

  參數sync_binlog = [N]表示每寫緩衝多少次就同步到磁盤(全部未提交的二進制日誌會被記錄到一個緩存中去,等事務提交時,直接將緩存中的二進制日誌寫入二進制日誌文件)。若N爲1,表示採用同步寫磁盤的方式來寫二進制日誌(若是不是同步寫的,數據庫宕機時,可能最後一部分數據沒有寫入二進制日誌文件中)。可是設爲1,仍是有一種狀況致使問題發生。當使用InnoDB存儲引擎時,在一個事務發出COMMIT動做以前,因爲sync_binlog爲1,所以將二進制日誌當即寫入磁盤中。若是這時寫入了二進制日誌,可是還未提交日誌,發生了宕機。那麼在MySQL數據庫下次啓動時,因爲COMMIT操做並無發生,這個事務應該被回滾掉。可是二進制日誌已經記錄了該事務信息,因此不能被回滾。經過設置參數innodb_support_xa爲1來解決,該參數確保二進制日誌和InnoDB存儲引擎數據文件的同步。同步

  binlog_format 參數設置二進制文件的格式:it

  • STATEMENT  二進制日誌文件記錄的是邏輯SQL語句
  • ROW   二進制日誌文件記錄的是表中行的更改狀況(文件相應更大)
  • MIXED

  2.4 查詢日誌(log)

  記錄了全部對MySQL數據庫請求的信息,不管這些信息是否獲得了正確的執行。

  3. InnoDB存儲引擎文件

  3.1 表空間文件

  InnoDB將存儲的數據按表空間(tablespace)進行存放。

  3.2 重作日誌文件(redo log)

  每一個InnoDB存儲引擎至少有1個重作日誌文件組,每一個文件組下至少有兩個重作日誌文件,如默認的ib_logfile0和ib_logfile1。爲了得到更高的可靠性,用戶能夠設置多個鏡像日誌組,將不一樣的文件組放在不一樣的磁盤上,以此提升重作日誌的高可用性。在日誌組中,每一個重作日誌文件的大小一致,並以循環寫入的方式運行。從重作日誌緩衝往磁盤寫入時,是按512字節,也就是一個扇區的大小進行寫入。由於扇區是寫入的最小單位,因此重作日誌的寫入過程不須要doublewrite。

  重作日誌和二進制日誌的區別?

            

  由binlog 和redo log的區別可知:binlog日誌只用于歸檔,只依靠 binlog 是沒有crash-safe 能力的。但只有 redo log 也不行,由於 redo log 是 InnoDB特有的,且日誌上的記錄寫入磁盤後會被覆蓋掉。所以須要 binlog 和 redo log 兩者同時記錄,才能保證當數據庫發生宕機重啓時,數據不會丟失。

相關文章
相關標籤/搜索