數據目錄位置確定
| 安裝方式 | 預設路徑 |
| 源碼編譯 | /usr/local/var |
| 二進位包 | /usr/local/mysql/data |
| RPM/DEB | /var/lib/mysql |
| Windows | BASEDIR\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
備份策略結合目錄結構
- 物理備份 (XtraBackup):直接複製
DATADIR,需備份 .ibd, Redo Log, Binlog,支援增量、流式、壓縮。
- 邏輯備份 (mysqldump/mydumper):導出 SQL,跨版本/引擎遷移通用。
- 快照備份 (LVM/ZFS/AWS EBS):
FLUSH TABLES WITH READ LOCK → 快照 → UNLOCK TABLES,秒級完成。
- 關鍵文件清單:
*.ibd, *.frm (5.7), ibdata1, Redo Log, Binlog, auto.cnf (server_uuid)
總結
掌握 MySQL 數據目錄結構是故障診斷、備份恢復、遷移擴容、權限管理的基礎。InnoDB 獨立表空間 (.ibd) + Binlog + Redo Log 是核心備份對象;符號連結提供零停機 (秒級) 磁碟遷移能力。