首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL InnoDB 共享表空間 vs 獨立表空間:架構差異、優劣勢與遷移實戰

     編輯:MySQL 綜合教學

MySQL InnoDB 共享表空間 vs 獨立表空間:架構差異、優劣勢與遷移實戰

InnoDB 儲存架構核心選擇:共享表空間(System Tablespace)與獨立表空間。本文深度對比兩者架構、優缺點、適用場景與線上遷移方案。

架構對比

維度共享表空間 (預設關閉 innodb_file_per_table)獨立表空間 (開啟 innodb_file_per_table=ON)
檔案結構ibdata1, ibdata2... 所有表數據+索引混存每表一個 .ibd 檔案(含數據+索引),.frm 存結構
空間回收不支援,DELETE/TRUNCATE 釋放空間僅標記可重用,檔案不縮小支援:DROP TABLE 立即釋放;TRUNCATE/ALTER TABLE ENGINE=InnoDB 回縮
備份/遷移需備份整個 ibdata*,單表遷移困難單表 .ibd 可獨立備份/匯入(Transportable Tablespace)
效能隔離熱表/冷表 IO 互相影響可將熱表 .ibd 放高速磁碟/SSD
碎片整理極難,需全庫重建單表 OPTIMIZE TABLE / ALTER TABLE ... ENGINE=InnoDB

共享表空間優缺點

  • 優:管理單一/少數檔案,開啟檔案描述符少,舊版本相容性好。
  • 缺:ibdata 無限增長、無法縮小;統計/日誌類大量刪除產生大量洞;單表超大難以維護;備份檔案巨大(含大量未使用空間)。

獨立表空間優缺點

  • 優:空間可回收、單表可移動、碎片可整理、備份粒度細、IO 隔離彈性大。
  • 缺:單表超過 100GB 時檔案系統操作開銷大;需注意 open_files_limit;ibdata1 仍存字典/Undo,冷備必須包含。

線上遷移:共享 → 獨立

方案 A:邏輯備份重建(推薦,零風險)

# 1. 邏輯備份
mysqldump --single-transaction --routines --all-databases > alldb.sql
# 2. 修改配置
innodb_file_per_table = 1
# 3. 重啟 MySQL
# 4. 匯入
mysql < alldb.sql

方案 B:原地 ALTER TABLE(僅新表生效,舊表數據仍在 ibdata1)

SET GLOBAL innodb_file_per_table = 1;
ALTER TABLE table_name ENGINE=InnoDB;  -- 每張表執行一次
# 注意:舊表數據未遷移,僅新數據進 .ibd

驗證當前模式

SHOW VARIABLES LIKE 'innodb_file_per_table';
-- ON = 獨立,OFF = 共享
ls /var/lib/mysql/db_name/  -- 看是否有 .ibd 檔案

總結

MySQL 5.6+ 預設開啟 innodb_file_per_table=ON,**生產環境強烈建議使用獨立表空間**。共享表空間僅適合極簡單、唯讀、小體積場景。遷移請走邏輯備份重建路徑,確保數據零風險落地。

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