對於innodb的數據存儲文件,首先要解決兩個概念性的問題: 共享表空間以及獨占表空間。(innodb引擎與MYISAM引擎的區別很大。特別是它的數據存儲方式等.)
共享表空間以及獨占表空間都是針對數據的存儲方式而言的。
共享表空間: 每一個數據庫的所有的表數據,索引文件全部放在一個文件中,默認這個共享表空間的文件路徑在data目錄下。 默認的文件名為:ibdata1 初始化為10M。
獨占表空間: 每一個表都將會生成以獨立的文件方式來進行存儲,每一個表都有一個.frm表描述文件,還有一個.ibd文件(這個文件包括了單獨一個表的數據內容以及索引內容)。
共享表空間:
優點:
1)可以放表空間分成多個文件存放到各個磁盤上(表空間文件大小不受表大小的限制,如一個表可以分布在不同的文件上)。表數據和表描述放在一起方便管理。
缺點:
1)所有的數據和索引存放到一個文件中,將有一個很常大的文件,雖然可以把一個大文件分成多個小文件,但是多個表及索引在表空間中混合存儲,這樣對於一個表做了大量刪除操作後表空間中將會有大量的空隙,特別是對於統計分析,日志系統這類應用最不適合用共享表空間。
獨立表空間(在配置文件(my.cnf)中設置innodb_file_per_table=1):
優點:
1)每個表都有自已獨立的表空間。
2)每個表的數據和索引都會存在自已的表空間中。
3)可以實現單表在不同的數據庫中移動。
4)空間可以回收(除drop table操作處,表空不能自已回收):
Drop table操作自動回收表空間,如果對於統計分析或是日志表,刪除大量數據後可以通過:alter table TableName engine=innodb;回縮不用的空間。
對於使innodb-plugin的Innodb使用turncate table也會使空間收縮。
對於使用獨立表空間的表,不管怎麼刪除,表空間的碎片不會太嚴重的影響性能,而且還有機會處理。
5)使用獨占表空間的效率以及性能會更高一點。
缺點:
1)單表增加過大,如超過100個G。
修改獨占空表空間配置,以下幾個參數必須在一起加入
innodb_data_home_dir = "/usr/local/mysql/var/" 數據庫文件所存放的目錄
innodb_log_group_home_dir = "/usr/local/mysql/var" 日志存放目錄
innodb_data_file_path=ibdata1:10M:autoextend 設置配置一個可擴展大小的尺寸為10MB的單獨文件(共享數據文件),名為ibdata1。沒有給出文件的位置,所以默認的是在MySQL的數據目錄內(如 /db/mysql/ibdata1)。
innodb_file_per_table=1 是否使用共享以及獨占表空間(1 為使用獨占表空間,0 為使用共享表空間)
innodb_file_per_table 通過這個參數來實現的轉化,如果為OFF說明所使用的是共享表空間【默認情況下,所使用的表空間為共享表空間】
innodb_file_per_table值來進行修改即可,但是對於之前使用過的共享表空間則不會影響,除非手動的去進行修改或者是
InnoDB不創建目錄,所以在啟動服務器之前請確認”所配置的路徑目錄”的確存在。
做數據的移植以及備份時,要注意數據文件的完整性.