當前位置: 華文世界 > 科技

MySQL數據都存在哪兒了?

2024-08-25科技

在 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 檔的具體問題歡迎評論區留言!