一、數據庫層面
- 錯誤日志文件(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日志來實現回滾操作,保證事務的一致性。