MySQL 安裝方式不同(RPM 包、二進制 tarball、源碼編譯),文件佈局存在顯著差異。理解目錄結構有助於配置文件定位、日誌分析、多實例部署與權限管理。本文系統梳理三種主流部署模式的目錄映射關係。
文件分散在系統標準目錄,遵循 FHS(文件系統層級標準):
| 系統路徑 | 內容說明 |
|---|---|
| /usr/bin | 客戶端程序與腳本(mysql、mysqldump、mysqladmin 等) |
| /usr/sbin | 服務端核心程序 mysqld |
| /var/lib/mysql | 數據庫文件、日誌文件(含 ibdata1、*.ibd、binlog、relaylog 等) |
| /usr/share/doc/packages/mysql | 文檔、README、授權協議 |
| /usr/include/mysql | C API 頭文件(開發編譯依賴) |
| /usr/lib/mysql | 共享庫文件(libmysqlclient.so 等) |
| /usr/share/mysql | 錯誤消息文件、字符集定義、配置模板(my-*.cnf) |
| /usr/share/sql-bench | 基準測試腳本 |
特點: 符合 Linux 發行版包管理規範,便於 rpm -ql mysql-community-server 查詢文件歸屬;但多實例部署需手動規劃數據目錄與配置文件分離。
解壓後形成自包含目錄樹,所有組件集中在一個前綴下:
| 相對路徑 | 內容說明 |
|---|---|
| bin/ | 客戶端程序與 mysqld 服務端 |
| data/ | 數據庫文件、日誌文件(初始化後生成) |
| docs/ | 文檔、ChangeLog |
| include/ | C API 頭文件 |
| lib/ | 共享庫文件 |
| scripts/ | 核心腳本:mysql_install_db(初始化數據目錄) |
| share/mysql/ | 錯誤消息、字符集文件 |
| sql-bench/ | 基準測試程序 |
特點: 遷移極其方便(整目錄拷貝即可),適合多實例並行(不同端口、不同 data 目錄、不同 my.cnf);升級只需解壓新版並修改啟動腳本指向的 basedir/datadir。
./configure --prefix=/usr/local/mysql && make && make install 後生成:
| 相對路徑 | 內容說明 |
|---|---|
| bin/ | 客戶端程序與腳本 |
| include/mysql/ | C API 頭文件 |
| info/ | Info 格式文檔 |
| lib/mysql/ | 共享庫文件 |
| libexec/ | mysqld 服務端(歷史原因單獨放置) |
| share/mysql/ | 錯誤消息文件 |
| sql-bench/ | 基準測試與 crash-me 測試 |
| var/ | 數據庫與日誌文件(需手動執行 mysql_install_db 初始化) |
特點: 可深度定制編譯選項(如啟用/禁用存儲引擎、調整默認字符集、優化 CPU 指令集),但構建耗時長、依賴編譯工具鏈、升級需重新編譯。
| 功能分類 | RPM | Tarball | 源碼編譯 |
|---|---|---|---|
| 服務端程序 | /usr/sbin/mysqld | bin/mysqld | libexec/mysqld |
| 客戶端工具 | /usr/bin/ | bin/ | bin/ |
| 數據目錄 | /var/lib/mysql | data/ | var/ |
| 配置模板 | /usr/share/mysql/my-*.cnf | support-files/my-*.cnf | support-files/my-*.cnf |
| 錯誤/字符集 | /usr/share/mysql/ | share/mysql/ | share/mysql/ |
| 初始化腳本 | 包含在 rpm 腳本中 | scripts/mysql_install_db | scripts/mysql_install_db |
/opt/mysql/{version}/{instance}),便於自動化運維。my.cnf 放置於實例專屬目錄(如 /etc/mysql/3306/my.cnf),啟動時指定 --defaults-file。datadir、log_bin、innodb_log_file 掛載到不同物理磁盤/RAID 組,提升 I/O 隔離度。mysql_upgrade、切換流量,實現分鐘級回滾能力。