Mysql表空間
Mysql表空間
對於innodb的資料結構,首先要解決兩個概念性的問題: 共享表空間以及獨佔表空間。
共享表空間以及獨佔表空間都是針對資料的儲存方式而言的。
共享表空間: 某一個資料庫的所有的表資料,索引檔案全部放在一個檔案中,預設這個共享表空間的檔案路徑在data目錄下。 預設的檔名為:ibdata1 初始化為10M。
獨佔表空間: 每一個表都將會生成以獨立的檔案方式來進行儲存,每一個表都有一個.frm表描述檔案,還有一個.ibd檔案。
其中這個檔案包括了單獨一個表的資料內容以及索引內容,預設情況下它的儲存位置也是在表的位置之中。
兩者之間的優缺點
共享表空間:
優點:
可以放表空間分成多個檔案存放到各個磁碟上(表空間檔案大小不受表大小的限制,如一個表可以分佈在不同步的檔案上)。資料和檔案放在一起方便管理。
缺點:
所有的資料和索引存放到一個檔案中以為著將有一個很常大的檔案,雖然可以把一個大檔案分成多個小檔案,但是多個表及索引在表空間中混合儲存,這樣對於一個表做了大量刪除操作後表空間中將會有大量的空隙,特別是對於統計分析,日值系統這類應用最不適合用共享表空間。
獨立表空間:在配置檔案(my.cnf)中設定: innodb_file_per_table = 1
優點:
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=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資料目錄。
所以在做資料的移植以及備份時,一定要注意資料檔案的完整性.
需要說明的是:
1、設定了獨立表空間之後,如果改成了共享表空間,那麼,此時如果執行表的插入操作,資料會存放在哪裡呢?
對於之前已經存在了的表,還是存放在獨立表空間。對於新建的表,就會存放在共享表空間了。
2、如果一開始用了獨立表空間,後來改了innodb_file_per_table變數的值,改成獨立表空間了,那麼資料如何儲存?
對於已經存在了的innodb引擎的表來說,資料還是存放在共享表空間的,而此時如果建立了新的表,那麼就會在資料庫的目錄中多出一個.ibd的檔案用於儲存這個新表的資料。
總結上面的1、2,就是:原來的還是按照原來的方式儲存。新的表按照新的規則來儲存。
對於innodb的資料結構,首先要解決兩個概念性的問題: 共享表空間以及獨佔表空間。
共享表空間以及獨佔表空間都是針對資料的儲存方式而言的。
共享表空間: 某一個資料庫的所有的表資料,索引檔案全部放在一個檔案中,預設這個共享表空間的檔案路徑在data目錄下。 預設的檔名為:ibdata1 初始化為10M。
獨佔表空間: 每一個表都將會生成以獨立的檔案方式來進行儲存,每一個表都有一個.frm表描述檔案,還有一個.ibd檔案。
其中這個檔案包括了單獨一個表的資料內容以及索引內容,預設情況下它的儲存位置也是在表的位置之中。
兩者之間的優缺點
共享表空間:
優點:
可以放表空間分成多個檔案存放到各個磁碟上(表空間檔案大小不受表大小的限制,如一個表可以分佈在不同步的檔案上)。資料和檔案放在一起方便管理。
缺點:
所有的資料和索引存放到一個檔案中以為著將有一個很常大的檔案,雖然可以把一個大檔案分成多個小檔案,但是多個表及索引在表空間中混合儲存,這樣對於一個表做了大量刪除操作後表空間中將會有大量的空隙,特別是對於統計分析,日值系統這類應用最不適合用共享表空間。
獨立表空間:在配置檔案(my.cnf)中設定: innodb_file_per_table = 1
優點:
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=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資料目錄。
所以在做資料的移植以及備份時,一定要注意資料檔案的完整性.
需要說明的是:
1、設定了獨立表空間之後,如果改成了共享表空間,那麼,此時如果執行表的插入操作,資料會存放在哪裡呢?
對於之前已經存在了的表,還是存放在獨立表空間。對於新建的表,就會存放在共享表空間了。
2、如果一開始用了獨立表空間,後來改了innodb_file_per_table變數的值,改成獨立表空間了,那麼資料如何儲存?
對於已經存在了的innodb引擎的表來說,資料還是存放在共享表空間的,而此時如果建立了新的表,那麼就會在資料庫的目錄中多出一個.ibd的檔案用於儲存這個新表的資料。
總結上面的1、2,就是:原來的還是按照原來的方式儲存。新的表按照新的規則來儲存。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29500582/viewspace-1807880/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL InnoDB表空間加密MySql加密
- MySQL 傳輸表空間MySql
- mysql之 表空間傳輸MySql
- mysql收縮共享表空間MySql
- MySQL InnoDB Undo表空間配置MySql
- MySQL 中的共享表空間與獨立表空間如何選擇MySql
- MySQL InnoDB臨時表空間配置MySql
- MySQL 遷移表空間,備份單表MySql
- mysql臨時表,臨時表空間,ibtmp1表空間暴增原因初探MySql
- 16、表空間 建立表空間
- mysql關於表空間的總結MySql
- MySQL 增加InnoDB系統表空間大小MySql
- MySQL InnoDB File-Per-Table表空間MySql
- MySQL 系統表空間檔案解析MySql
- MySQL innodb表使用表空間物理檔案複製表MySql
- MySQL 5.7新支援--通用表空間實戰MySql
- MySQL UNDO表空間獨立和截斷MySql
- 談談什麼是MySQL的表空間?MySql
- MySQL使用小技巧(information_schema表空間)MySqlORM
- MySQL空間最佳化(空間清理)MySql
- MySQL 8.0表空間新特性簡單實驗MySql
- MYSQL造資料佔用臨時表空間MySql
- mysql共享表空間擴容,收縮,遷移MySql
- MySQL 減少InnoDB系統表空間的大小MySql
- Oracle表空間Oracle
- oracle 表空間Oracle
- PostgreSQL 表空間SQL
- PostgreSQL:表空間SQL
- MySQL共享表空間各個版本之間的演變圖MySql
- 當使用者無限制使用表空間配額且表空間有足夠空間時出現超出表空間的空間限額
- 表空間利用率及表空間的補充
- UNDO表空間空間回收及切換
- 淺談mysql中各種表空間(tablespaces)的概念MySql
- MySQL傳輸表空間的簡單使用方法MySql
- MySQL InnoDB系統表空間資料檔案配置MySql
- undo表空間容量
- 增加oracle表空間Oracle
- Configure innodb 表空間
- 表空間限額