數據目錄是 MySQL 資料庫的核心存儲區域,所有數據表、索引文件以及關鍵系統文件均保存於此。理解數據目錄的結構與管理方式,是資料庫管理員(DBA)進行備份、遷移、效能調優及故障排查的基礎。MySQL 服務器啟動時會讀取此目錄,客戶端不直接操作數據文件,所有數據交互均通過 mysqld 服務進程完成。
MySQL 的默認數據目錄因安裝方式與作業系統而異:
/usr/local/mysql/var/usr/local/mysql/dataC:\mysql\data生產環境中強烈建議通過配置文件或啟動參數自定義數據目錄路徑,避免使用系統盤或默認路徑,便於磁碟 I/O 隔離與容量擴展。
可在啟動命令中使用 --datadir=目錄路徑,或在配置文件(my.cnf/my.ini)的 [mysqld] 區塊設置 datadir=/path/to/datadir。
# 查看所有變量(包含 datadir) mysqladmin variables # 指定端口查詢多實例數據目錄 mysqladmin --host=127.0.0.1 --port=3306 variables # 使用 Socket 連接查詢 mysqladmin --host=localhost --socket=/tmp/mysql.sock variables # Windows 命名管道查詢 mysqladmin --host=. --socket=mysql variables
SHOW VARIABLES LIKE 'datadir';
mysqld --help | grep datadir
每個數據庫在數據目錄下對應一個子目錄。SHOW DATABASES 實際上就是列出這些子目錄。除數據文件外,數據目錄還包含以下關鍵文件:
my.cnf(若放置於此)hostname.pid,記錄 mysqld 進程 IDca.pem、server-cert.pem、server-key.pem 等ibdata1、ib_logfile* 等(不再遵循「一庫一目錄」結構)MySQL 將數據庫映射為文件系統目錄:
CREATE DATABASE db_name → 在數據目錄下創建 db_name 目錄DROP DATABASE db_name → 刪除 db_name 目錄及其內部表文件可通過 Shell 命令直接操作(需確保服務器未運行或表無鎖定):
# 創建空數據庫 cd /path/to/datadir mkdir db_name chmod 700 db_name # 刪除數據庫(謹慎使用,InnoDB 表不可此法刪除) rm -rf db_name
DROP DATABASE 不會刪除目錄中非 MySQL 識別的文件;InnoDB 表使用共享表空間,不可直接刪除目錄文件。
/data/mysql),分離系統 I/O 與數據庫 I/O。