MySQL中幾個重要的文件


一、數據庫層面

  • 錯誤日志文件(error log)
  • 二進制日志文件(binary log)
  • 慢查詢日志(slow log)
  • 全量日志(general log):general log 會記錄MySQL數據庫所有操作的SQL語句,包含select和show。該功能默認是關閉的,因為log的量會非常龐大。

其中log_output參數,可以取FILE、TABLE、NONE三個值。若該參數指定為NONE,即使開啟了general log也不會記錄log。若該參數指定為TABLE,則會在mysql數據庫下創建一個general_log 表。該參數不僅僅影響general log 的存儲方式,還會影響到slow log的存儲方式。一般是使用FILE的存儲方式。

  • 審計日志(audit log)
  • 中繼日志(relay log):relay log是主從復制中,從服務器上一個重要的文件。從服務器的I/O線程將主服務器的binary log 讀取過來並記錄到從服務器本地文件(relay log)中,然后從服務器的SQL線程會讀取relay log的內容並應用到從服務器。
  • Pid文件:MySQL數據庫是一個單進程多線程模型的數據庫,實例啟動后,會將自己為唯一進程號記錄到自己的Pid文件中。Pid文件存放在數據目錄(/data/mysql/)下,命名規則是將主機名作為前綴。
  • Socket文件:mysql數據庫有兩種連接方式,網絡連接和本地連接,mysql.sock文件是服務器與本地客戶端進行通信發UNIX套接字文件,其默認位置是/tmp/mysql.sock.
  • 表結構文件:MySQL8.0之前把以.frm結尾的文件稱為表結構文件。從8.0開始frm表的定義被消除,把文件中的表數據都寫到了系統表空間,通過利用InnoDB存儲引擎實現表DDL語句操作的原子性(在該版本之前是無法實現DDL語句的原子性的,如truncate是無法回滾的)。

二、存儲引擎層面


  在InnoDB存儲引擎層面主要分為兩種日志,一種是redo log 一種是undo log。InnoDB支持事物、支持MVCC多版本並發控制。InnoDB的多版本是通過undo 和回滾段來實現的。InnoDB是索引組織表,每行記錄都包含DB_ROW_ID、DB_TRX_ID、DB_ROLL_PTR和DELETE_BIT幾個隱藏字段。DB_TRX_ID:用來標識最近一次對本行記錄做修改的事務的標識符,即最后一次修改本行記錄的事務id。delete操作在內部來看是一次update操作,更新行中的刪除標識位DELELE_BIT。
DB_ROLL_PTR:指向當前數據的undo log記錄,回滾數據通過這個指針來尋找記錄被更新之前的內容信息。DB_ROW_ID:包含一個隨着新行插入而單調遞增的行ID, 當由innodb自動產生聚集索引時,聚集索引會包括這個行ID的值,否則這個行ID不會出現在任何索引中。DELELE_BIT:用於標識該記錄是否被刪除。

 

  • redo log,又稱重做日志,用於記錄事物操作變化,記錄的是事物被修改后的值,不管事物是否提交都會記錄下來,在實例和介質失敗時,如數據庫掉電,就可以利用redo log 恢復到掉電前的時刻,以此來保證數據的完整性。
  • undo log,對記錄的變更操作時不僅會產生redo記錄,也會產生undo記錄(insert、update、delete)。但undo只記錄變更前的舊數據。通常可以使用undo日志來實現回滾操作,保證事務的一致性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM