innodb表的資料結構
innodb這種引擎,與myisam引擎的區別很大。特別是它的資料儲存格式等.
對於innodb的資料結構,首先要解決兩個概念性的問題: 共享表空間以及獨佔表空間。
什麼是共享表空間和獨佔表空間
共享表空間以及獨佔表空間都是針對資料的儲存方式而言的。
共享表空間: 某乙個資料庫的所有的表資料,索引檔案全部放在乙個檔案中,預設這個共享表空間的檔案路徑在data目錄下。 預設的檔名為:ibdata1 初始化為10m。
獨佔表空間: 每乙個表都將會生成以獨立的檔案方式來進行儲存,每乙個表都有乙個.frm表描述檔案,還有乙個.ibd檔案。 其中這個檔案包括了單獨乙個表的資料內容以及索引內容,預設情況下它的儲存位置也是在表的位置之中。
兩者之間的優缺點
共享表空間:
優點:可以放表空間分成多個檔案存放到各個磁碟上(表空間檔案大小不受表大小的限制,如乙個表可以分布在不同步的檔案上)。資料和檔案放在一起方便管理。
缺點:所有的資料和索引存放到乙個檔案中意味著將有乙個很常大的檔案,雖然可以把乙個大檔案分成多個小檔案,但是多個表及索引在表空間中混合儲存,這樣對於乙個表做了大量刪除操作後表空間中將會有大量的空隙,特別是對於統計分析,日值系統這類應用最不適合用共享表空間。
獨立表空間:
在配置檔案(my.cnf)中設定: innodb_file_per_table
優點:1. 每個表都有自已獨立的表空間。
2. 每個表的資料和索引都會存在自已的表空間中。
3. 可以實現單錶在不同的資料庫中移動。
4. 空間可以**(除drop table操作處,表空不能自已**)
a) drop table操作自動**表空間,如果對於統計分析或是日值表,刪除大量資料後可以通過:alter table tablename engine=innodb;回縮不用的空間。
b) 對於使innodb-plugin的innodb使用turncate table也會使空間收縮。
c) 對於使用獨立表空間的表,不管怎麼刪除,表空間的碎片不會太嚴重的影響效能,而且還有機會處理。
缺點:單錶增加過大,如超過100個g。
相比較之下,使用獨佔表空間的效率以及效能會更高一點。
共享表空間以及獨佔表空間之間的轉化
innodb_file_per_table 通過這個引數來實現的轉化,如果為off說明所使用的是獨佔表空間【預設情況下,所使用的表空間為共享表空間】
innodb_file_per_table值來進行修改即可,但是對於之前使用過的共享表空間則不會影響,除非手動的去進行修改或者是
innodb_file_per_table=1 為使用獨佔表空間
innodb_file_per_table=0 為使用共享表空間
修改獨佔空表空間的資料儲存位置
innodb_data_home_dir = "c:\mysql\data\"
innodb_log_group_home_dir = "c:\mysql\data\"
innodb_data_file_path=ibdata1:10m:autoextend
innodb_file_per_table=1
引數說明:
這個設定配置乙個可擴充套件大小的尺寸為10mb的單獨檔案,名為ibdata1。沒有給出檔案的位置,所以預設的是在mysql的資料目錄內。【對資料來進行初始化的設定】
innodb_data_home_dir 代表為資料庫檔案所存放的目錄
innodb_log_group_home_dir 為日誌存放目錄
innodb_file_per_table 是否使用共享以及獨佔表空間來
以上的幾個引數必須在一起加入。
對於引數一些注意的地方
innodb不建立目錄,所以在啟動伺服器之前請確認」所配置的路徑目錄」的確存在。這對你配置的任何日誌檔案目錄來說也是真實的。使用unix或dos的mkdir命令來建立任何必需的目錄。
通過把innodb_data_home_dir的值原原本本地部署到資料檔名,並在需要的地方新增斜槓或反斜槓,innodb為每個資料檔案形成目錄路徑。
如果innodb_data_home_dir選項根本沒有在my.cnf中提到,預設值是「dot」目錄 ./,這意思是mysql資料目錄。
所以在做資料的移植以及備份時,一定要注意資料檔案的完整性.
**---
innodb這種引擎,與myisam引擎的區別很大。特別是它的資料儲存格式等.
Mysql InnoDB 共享表空間和獨立表空間
前言 學習mysql的時候總是習慣性的和oracle資料庫進行比較。在學習mysql innodb的儲存結構的時候也免不了跟oracle進行比較。oracle的資料儲存有表空間 段 區 塊 資料檔案 mysql innodb的儲存管理也類似,但是mysql增加了乙個共享表空間和獨立表空間的概念 一 ...
共享表空間到獨立表空間的轉化流程
遷移步驟1 show variables like per table 遷移步驟2 service mysqld stop 遷移步驟3 修改配置檔案 innodb file per table 1 遷移步驟4 mysqldump 備份需要的資料 mysqldump u p all databases...
檢查使用共享表空間的表
最近接手一台新的資料庫機器,發現某些庫某些表沒有ibd檔案只有frm檔案,而ibdata1檔案一共有20g 估計是使用了共享表空間 存放在ibdata1檔案裡 於是寫了乙個指令碼,檢查例項下哪些庫哪些表使用了共享表空間,原理是如果有frm檔案而沒有ibd檔案就認為是使用了共享表空間 bin bash...