【MySQL】InnoDB 引擎獨立表空間 innodb_file_per_table

使用過MySQL的同窗,剛開始接觸最多的莫過於MyISAM表引擎了,這種引擎的數據庫會分別建立三個文件:表結構、表索引、表數據空間。咱們能夠將某個數據庫目錄直接遷移到其餘數據庫也能夠正常工做。然而當你使用InnoDB的時候,一切都變了。 mysql

InnoDB 默認會將全部的數據庫InnoDB引擎的表數據存儲在一個共享空間中:ibdata1,這樣就感受不爽,增刪數據庫的時候,ibdata1文件不會自動收縮,單個數據庫的備份也將成爲問題。一般只能將數據使用mysqldump 導出,而後再導入解決這個問題。 sql

在MySQL的配置文件[mysqld]部分,增長innodb_file_per_table參數。 數據庫

能夠修改InnoDB爲獨立表空間模式,每一個數據庫的每一個表都會生成一個數據空間。 性能

獨立表空間: spa

優勢: 索引

    1.  每一個表都有自已獨立的表空間。
    2.  每一個表的數據和索引都會存在自已的表空間中。
    3.  能夠實現單表在不一樣的數據庫中移動。
    4.  空間能夠回收(除drop table操做處,表空不能自已回收) innodb

        a)         Drop table操做自動回收表空間,若是對於統計分析或是日值表,刪除大量數據後能夠經過:alter table TableName engine=innodb;回縮不用的空間。 table

        b)         對於使innodb-plugin的Innodb使用turncate table也會使空間收縮。 配置

        c)         對於使用獨立表空間的表,無論怎麼刪除,表空間的碎片不會太嚴重的影響性能,並且還有機會處理。 file

缺點:

    單表增長過大,如超過100個G。

結論:

    共享表空間在Insert操做上少有優點。其它都沒獨立表空間表現好。當啓用獨立表空間時,請合理調整一 下:innodb_open_files 。

    InnoDB Hot Backup(冷備)的表空間cp不會面對不少無用的copy了。並且利用innodb hot backup及表空間的管理命令能夠實現單現移動。

相關文章
相關標籤/搜索