首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 數據目錄結構深度解析:位置、表表示法、狀態文件與備份策略

     編輯:MySQL 資料庫相關知識

數據目錄位置確定

安裝方式預設路徑
源碼編譯/usr/local/var
二進位包/usr/local/mysql/data
RPM/DEB/var/lib/mysql
WindowsBASEDIR\data

啟動時可用 --datadir=/path/to/dir 覆蓋。查看當前值:

mysqladmin variables | grep datadir
# 或 SQL
SELECT @@datadir;

目錄層級結構

DATADIR/
├── mysql/                    # 系統庫 (授權表、幫助表、時區表)
├── performance_schema/       # 性能架構表 (內存表,無實體文件)
├── information_schema/       # 視圖介面,無實體目錄
├── sys/                      # sys schema 視圖
├── db_name_1/                # 用戶資料庫目錄
│   ├── db.opt                # 資料庫屬性 (字符集、校對規則)
│   ├── tbl1.frm              # 表結構定義 (8.0 已合併至 SDI)
│   ├── tbl1.ibd              # InnoDB 獨立表空間 (file_per_table=ON)
│   └── tbl1.MYD/.MYI         # MyISAM 數據/索引
├── db_name_2/
├── #innodb_temp/             # 臨時表空間
├── #innodb_redo/             # Redo Log (8.0+)
├── auto.cnf                  # server_uuid
├── mysqld.pid                # 進程 ID
├── hostname.err              # 錯誤日誌
├── hostname.log              # 一般查詢日誌
├── hostname-bin.000001       # Binlog
├── hostname-relay-bin.000001 # Relay Log (從庫)
└── master.info / relay-log.info # 複制元數據 (8.0 移至表)

資料庫與表的文件表示法

  • 資料庫 = 目錄:CREATE DATABASE 相當於 mkdir + chmod 700
  • 表 = 多個文件:
    • InnoDB (file_per_table=ON):.frm (8.0 無) + .ibd (數據+索引)
    • MyISAM:.frm + .MYD (數據) + .MYI (索引)
  • DROP DATABASE = 刪除目錄及表文件,保留非表文件
  • SHOW DATABASES = 列出子目錄名

關鍵狀態文件詳解

文件用途配置參數備份必要性
.pid進程 ID,啟停腳本依賴pid_file否 (重啟自建)
.err錯誤日誌 (啟動/異常/備份資訊)log_error是 (診斷關鍵)
.log一般查詢日誌 (所有 SQL)general_log_file選擇性 (審計用)
-bin.*二進位日誌 (增量備份、複制)log_bin是 (PITR 核心)
-relay-bin.*中繼日誌 (從庫)relay_log否 (可從主庫重建)
master.info主庫連線資訊 (5.6-)—否

重定位策略:三種方法對比

對象啟動參數選項文件符號連結
整個數據目錄✅ --datadir✅ datadir✅ (Linux)
單個資料庫❌❌✅ (移動目錄 + ln -s)
單個表 (MyISAM)❌❌⚠️ 可行但 ALTER TABLE 會失效
PID/日誌文件✅ --pid-file 等✅❌

實戰:移動大庫到獨立磁碟

# 1. 停服務
systemctl stop mysqld

# 2. 移動目標庫目錄
mv /var/lib/mysql/big_db /mnt/disk2/mysql_data/

# 3. 建立符號連結
ln -s /mnt/disk2/mysql_data/big_db /var/lib/mysql/big_db

# 4. 啟動
systemctl start mysqld

備份策略結合目錄結構

  1. 物理備份 (XtraBackup):直接複製 DATADIR,需備份 .ibd, Redo Log, Binlog,支援增量、流式、壓縮。
  2. 邏輯備份 (mysqldump/mydumper):導出 SQL,跨版本/引擎遷移通用。
  3. 快照備份 (LVM/ZFS/AWS EBS):FLUSH TABLES WITH READ LOCK → 快照 → UNLOCK TABLES,秒級完成。
  4. 關鍵文件清單:*.ibd, *.frm (5.7), ibdata1, Redo Log, Binlog, auto.cnf (server_uuid)

總結

掌握 MySQL 數據目錄結構是故障診斷、備份恢復、遷移擴容、權限管理的基礎。InnoDB 獨立表空間 (.ibd) + Binlog + Redo Log 是核心備份對象;符號連結提供零停機 (秒級) 磁碟遷移能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved