標籤:mysql ibdata file
mysql資料存放區目錄中的ibdata檔案
這個是資料檔案,不是記錄檔,將innodb_file_per_table開啟,使用獨立資料表空間,每個表有個.ibd檔案, ibdata1就只會存一些共用的資訊,不會很大
正解,開啟獨立資料表空間後,經常做一下optimize table就可以回收被刪除記錄佔用的片段空間, ibdata1檔案也不會再快速增長了
使用過MySQL的同學,剛開始接觸最多的莫過於MyISAM表引擎了,這種引擎的資料庫會分別建立三個檔案:表結構、表索引、表資料空間。我們可以將某個資料庫目錄隨即轉移到其他資料庫也可以正常工作。然而當你使用InnoDB的時候,一切都變了。
InnoDB 預設會將所有的資料庫InnoDB引擎的表資料存放區在一個共用空間中:ibdata1,這樣就感覺不爽,增刪資料庫的時候,ibdata1檔案不會自動收縮,單個資料庫的備份也將成為問題。通常只能將資料使用mysqldump 匯出,然後再匯入解決這個問題。
在MySQL的設定檔[mysqld]部分,增加innodb_file_per_table參數。可以修改InnoDB為獨立資料表空間模式,每個資料庫的每個表都會產生一個資料空間。
獨立資料表空間:
優點:
1. 每個表都有自已獨立的資料表空間。
2. 每個表的資料和索引都會存在自已的資料表空間中。
3. 可以實現單表在不同的資料庫中移動。
4. 空間可以回收(除drop table操作處,表空不能自已回收
a) Drop table操作自動回收資料表空間,如果對於統計分析或是日值表,刪除大量資料後可以通過:alter table TableName engine=innodb;回縮不用的空間。
b) 對於使innodb-plugin的Innodb使用turncate table也會使空間收縮。
c) 對於使用獨立資料表空間的表,不管怎麼刪除,資料表空間的片段不會太嚴重的影響效能,而且還有機會處理。
缺點:
單表增加過大,如超過100個G。
結論:
共用資料表空間在Insert操作上少有優勢。其它都沒獨立資料表空間表現好。當啟用獨立資料表空間時,請合理調整一 下:innodb_open_files 。
InnoDB Hot Backup(冷備)的資料表空間cp不會面對很多無用的copy了。而且利用innodb hot backup及資料表空間的管理命令可以實現單現移動。
1.innodb_file_per_table設定.開啟方法:
在my.cnf中[mysqld]下設定
innodb_file_per_table=1
2.查看是否開啟:
mysql> show variables like ‘%per_table%’;
3.關閉獨享資料表空間
innodb_file_per_table=0關閉獨立的資料表空間
mysql> show variables like ‘%per_table%’;
Innodb儲存引擎可以使用共用資料表空間或獨立資料表空間,使用獨立資料表空間時,需要將innodb_file_per_table加到設定檔中,也可以在variables中開啟。
共用資料表空間是將所有的表的資料和索引儲存在ibdata1中,這樣的缺點是拷貝時必須拷貝整個大檔案,而且刪除表後容易產生片段。
獨立資料表空間是為每個表建立一個.ibd檔案用來儲存資料和.frm用來存資料詞典資訊,這樣,mysql就將innodb表的資料存入各自對應的.ibd檔案中了,但結構等資訊還是會寫入ibdata。
innodb_file_per_table變數只能在設定檔裡修改,不能使用set global ...將innodb_file_per_table關閉之後,建立innoDB表時只產生.frm檔案,資料和索引都儲存在共用資料表空間ibdata1中。