Innodb有兩種管理表空間的方法mysql
獨立表空間:每一張表都會生成獨立的文件來進行存儲,每一張表都有一個.frm表描述文件,和一個.ibd文件。其中ibd文件包括了單獨一個表的數據內容和索引內容。sql
共享表空間:某一個數據庫的全部表的數據和索引文件都放在一個文件下,默認的文件是.ibdata1文件,初始值是10M,默認是存放在數據文件的根目錄下(mysql/var)。數據庫
在性能和運維上獨立表空間比共享的表空間有不少優點運維
共享表空間性能
優勢:操作系統
表空間能夠分紅多個文件存放到各個磁盤,因此表也就能夠分紅多個文件存放在磁盤上,表的大小不受磁盤大小的限制(不少文檔描述有點問題)。blog
數據和文件放在一塊兒方便管理索引
缺點:文檔
多個表及索引在表空間中混合存儲,這樣對於一個表作了大量刪除操做後表空間中將會有大量的空隙,特別是對於統計分析,日值系統這類應用最不適合用共享表空間。innodb
共享表空間分配後不能回縮
進行數據庫的冷備很慢,mysqldump是一個好的處理方式
獨立空間
優勢:
缺點:
單表增長過大,響應也是較慢,可使用分區表
單表增長過大,當單表佔用空間過大時,存儲空間不足,只能從操做系統層面思考解決方法
共享表空間和獨立表空間之間的轉換
1.查看當前表空間狀況:
show variables like '%per_table';
ON表明獨立表空間管理,OFF表明共享表空間管理;
2.修改數據庫的表空間管理方式
修改配置文件 ,在/etc/my.cnf文件中設置
innodb_file_per_table=1 爲使用獨佔表空間
innodb_file_per_table=0 爲使用共享表空間
重啓mysql
3.共享表空間轉化爲獨立表空間的方法
(1)須要設置innodb_file_per_table=1
(2)單個表
alter table table_name engine=innodb;
不少表
先把數據庫導出,而後刪除數據再進行導入操做,該操做能夠用mysqldump進行操做
總結:
通過以上操做便完成數據庫的存儲空間的轉換
當數據量很小的時候建議使用共享表空間的管理方式。數據量很大的時候建議使用獨立表空間的管理方式