在 MySQL 中,數據儲存和管理涉及到多個檔和檔類別,每種檔都有其特定的作用。今天就來聊聊MySQL幾個重要的檔。
廢話不多說,請看圖。此圖是我本地安裝的MySQL的數據儲存目錄。其中包含了redolog、binlog、行程ID、認證檔、以及各個數據庫目錄,其中apa、performance_schema、sys、mysql分別對應apa、performance_schema、sys、mysql庫
。performance_schema、sys、mysql為系統庫,檔比較特殊,本次暫不說明,
下面來說說使用者庫及其他各個檔的作用。
1. 數據檔
1.1 .ibd 檔
作用
:儲存 InnoDB 表的數據和索引。當啟用了獨立表空間(innodb_file_per_table)時,每個表的數據會儲存在一個獨立的 .ibd 檔中。
位置
:位於數據庫的物理數據目錄中,例如 /var/lib/mysql/db_name/。安裝MySQL時,--data-dir指定的目錄。
範例
:table_name.ibd
1.2 .frm 檔
作用
:儲存 MySQL 表的表結構定義,包括列資訊、索引資訊等。對於 MyISAM 和 InnoDB 儲存引擎,.frm 檔用於保存表的後設資料。
位置
:位於數據庫目錄中,例如 /var/lib/mysql/db_name/。
範例
:table_name.frm
2. 日誌檔
2.1 錯誤日誌(error log)
作用
:記錄 MySQL 伺服器的啟動、執行和停止過程中的錯誤資訊、警告和診斷資訊。
位置
:通常位於 /var/log/mysql/ 或 /var/log/mysqld.log。位置可以在 MySQL 配置檔中設定。
範例
:mysql-error.log
2.2 二進制日誌(binary log)
作用
:記錄所有對 MySQL 數據庫的更改操作,包括數據修改和表結構更改。二進制日誌用於數據恢復和復制。
位置
:在 MySQL 數據目錄中,如 /var/lib/mysql/。
範例
:mysql-bin.000001
2.3 重做日誌(redo log)
作用
:用於確保事務的永續性。重做日誌記錄了所有對數據庫的修改操作,確保即使在系統崩潰後也能恢復數據。
位置
:在 InnoDB 數據目錄中,如 /var/lib/mysql/。
範例
:ib_logfile0, ib_logfile1
2.4 事務日誌(undo log)
作用
:用於支持事務回滾。Undo 日誌記錄了事務中的每一個操作,以便在事務回滾時撤銷這些操作。
位置
:與 InnoDB 數據檔儲存在同一目錄中。
範例
:通常不直接以檔存在,數據保存在 .ibd 檔中。
3. 臨時檔
3.1 臨時表檔
作用
:用於儲存臨時表的數據。臨時表是在查詢過程中動態建立的,用於儲存中間結果。
位置
:在 MySQL 臨時檔目錄中,如 /tmp/ 或 MySQL 數據目錄下的臨時目錄。由於沒有使用臨時表,所以上圖看不到對應檔。
範例
:#sql_1234_5.frm, #sql_1234_6.ibd
4. 其他檔
4.1 關系圖檔(.TRG)
作用
:用於儲存觸發器的定義。在較舊的 MySQL 版本中,觸發器資訊可能儲存在獨立檔中。
位置
:通常位於數據庫目錄中。
範例
:table_name.trg
4.2 檢視檔(.VIEW)
作用
:儲存檢視的定義資訊。
位置
:通常位於數據庫目錄中。
範例
:view_name.frm
總結
數據檔
:.ibd(表數據)、.frm(表結構)
日誌檔
:錯誤日誌、二進制日誌、重做日誌、事務日誌
臨時檔
:臨時表檔
其他檔
:觸發器、檢視檔
透過了解這些檔及其作用,你可以更好地管理 MySQL 數據庫的備份、恢復和最佳化。如果有更多關於 MySQL 檔的具體問題歡迎評論區留言!