MySQL INNODB表空間兩種配置闡述
在mysql中,也出現了類似oracle中的表空間概念。
開啟了Innodb的innodb_file_per_table這個引數之後【innodb_file_per_table = 1】,也就是啟用InnoDB的獨立表空間模式,便於管理。此時,在新建的innodb表的資料庫目錄下會多出來一個.ibd這個檔案。mysql會把這個innodb表的資料存放在這個檔案中。並且每個innodb表此時都會對應這麼一個ibd檔案。
mysql手冊說明很清楚:
If innodb_file_per_table
is disabled (the default), InnoDB
creates tables in the
innodb_file_per_table
is enabled, InnoDB
creates each new table using its own .ibd
file for storing data and indexes, rather than in the system tablespace.
很搞不懂為什麼innodb_file_per_table
預設是不開啟的。
開啟之後有什麼好處呢?
可以實現單表在不同的資料庫之間移動。
InnoDB 預設會將所有的資料庫InnoDB引擎的表資料儲存在一個共享空間
-------------------------------------------------------------------------------
需要說明的是:
1、設定了獨立表空間之後,如果改成了共享表空間,那麼,此時如果執行表的插入操作,資料會存放在哪裡呢?
對於之前已經存在了的表,還是存放在獨立表空間。對於新建的表,就會存放在共享表空間了。
2、如果一開始用了共享表空間,後來改了innodb_file_per_table
變數的值,改成獨立表空間了,那麼資料如何儲存?
對於已經存在了的innodb引擎的表來說,資料還是存放在共享表空間的,而此時如果建立了新的表,那麼就會在資料庫的目錄中多出一個.ibd的檔案用於儲存這個新表的資料。
總結上面的1、2,就是:原來的還是按照原來的方式儲存。新的表按照新的規則來儲存。
3、mysql在第二點上處理的不太妥當,新舊資料為什麼要分開存放,為什麼不能自動把共享表空間裡的資料匯入到獨立表空間中?