MySQLFS (MySQL File System) 是一個基於 FUSE (Filesystem in Userspace) 的虛擬文件系統,將 MySQL 表映射為目錄結構:**庫 → 目錄、表 → 子目錄、列 → 文件、行 → 文件內容**。本文介紹原理架構、掛載操作、讀寫示例、優缺點分析、適用場景、現代替代方案。
用戶空間 內核空間
+------------------+ +------------------+
| 應用程序 | | VFS (虛擬文件系統) |
| (ls/cat/cp/vi) | ←→ | ←→ FUSE 模塊 | ←→ MySQLFS 守護進程
+------------------+ +------------------+
↓
+------------------+
| MySQL 服務器 |
| (SQL 查詢/更新) |
+------------------+
MySQLFS 守護進程將文件系統操作 (open/read/write/readdir/unlink) 轉換為 SQL 語句執行。
# 1. 安裝 FUSE 和 MySQLFS
# Ubuntu
sudo apt-get install fuse libfuse-dev mysqlfs
# 或源碼編譯安裝
# 2. 配置連接信息 (通常 ~/.mysqlfs 或命令行參數)
# 假設 MySQL 運行在 localhost:3306,用戶 root,庫 test
# 3. 掛載
mkdir -p /mnt/mysql
mysqlfs -o host=localhost,user=root,password=pass,db=test /mnt/mysql
# 4. 探索
ls -la /mnt/mysql/
# dr-xr-xr-x 1 root root 4096 test (表目錄)
# -r-xr-xr-x 1 root root 4096 .uptime (特殊文件:服務器運行秒數)
# 5. 讀取表數據 (列文件)
cat /mnt/mysql/test/users/id
# 輸出所有用戶的 id 值,每行一個
cat /mnt/mysql/test/users/name
# 輸出所有用戶的 name 值
# 6. 讀取特定行 (主鍵目錄)
ls /mnt/mysql/test/users/id/1
# name email password_hash ...
cat /mnt/mysql/test/users/id/1/name
# 輸出 id=1 的用戶名
# 7. 寫入數據 (INSERT/UPDATE)
echo "new_user" > /mnt/mysql/test/users/id/0/name
echo "new@ex.com" > /mnt/mysql/test/users/id/0/email
# 自動生成 INSERT (id=0 視為新行)
# 8. 刪除行
rm -rf /mnt/mysql/test/users/id/5
# 自動執行 DELETE WHERE id=5
# 9. 卸載
fusermount -u /mnt/mysql
| 優點 | 缺點 |
|---|---|
| 零學習成本:熟悉 ls/cat/echo/rm 即可操作數據庫 | 性能極差:每次文件操作 = 網絡往返 + SQL 解析 + 事務提交 |
| 腳本自動化極簡:Shell 腳本直接處理數據庫 | 無事務支援:單文件操作自動提交,無法跨文件/表事務 |
| 備份/版本控制友好:cp/rsync/git 直接備份文件樹 | 並發災難:無行鎖映射,併發寫入極易衝突/丟失更新 |
| 跨平台訪問:無 MySQL 客戶端的機器也能掛載訪問 | 元數據同步延遲:表結構變更需重新掛載或刷新緩存 |
| 調試/導出方便:cat 導出列數據無需 SQL | 大數據不可用:全表掃描映射為大量文件讀取,記憶體/時間雙重爆炸 |
| 需求 | 現代方案 |
|---|---|
| 命令行交互式查詢 | mycli (自動補全、語法高亮)、mysqlsh (JS/Python/SQL 多模式) |
| 腳本自動化操作 | Python (mysql-connector/PyMySQL/SQLAlchemy)、Go (database/sql)、Shell + mysql 客戶端 |
| 備份/版本控制 | mysqldump + git、xtrabackup + S3、mydumper + 壓縮存儲 |
| 跨平台無客戶端訪問 | HTTP API (自建/Hasura/PostgREST) + curl、MySQL Router + 遠程連接 |
| 文件系統語義存儲 | 對象存儲 (S3/MinIO) + 元數據庫、分佈式文件系統 (CephFS/JuiceFS) |