淺析mysql 共享表空間與獨享表空間以及他們之間的轉化
更新時間:2013年06月22日 16:23:16 作者:
本篇文章是對mysql 共享表空間與獨享表空間以及他們之間的轉化進行了詳細的分析介紹,需要的朋友參考下
innodb這種引擎,與MYISAM引擎的區(qū)別很大。特別是它的數(shù)據(jù)存儲格式等.
對于innodb的數(shù)據(jù)結構,首先要解決兩個概念性的問題: 共享表空間以及獨占表空間。
什么是共享表空間和獨占表空間
共享表空間以及獨占表空間都是針對數(shù)據(jù)的存儲方式而言的。
共享表空間: 某一個數(shù)據(jù)庫的所有的表數(shù)據(jù),索引文件全部放在一個文件中,默認這個共享表空間的文件路徑在data目錄下。 默認的文件名為:ibdata1 初始化為10M。
獨占表空間: 每一個表都將會生成以獨立的文件方式來進行存儲,每一個表都有一個.frm表描述文件,還有一個.ibd文件。 其中這個文件包括了單獨一個表的數(shù)據(jù)內容以及索引內容,默認情況下它的存儲位置也是在表的位置之中。
兩者之間的優(yōu)缺點
共享表空間:
優(yōu)點:
可以放表空間分成多個文件存放到各個磁盤上(表空間文件大小不受表大小的限制,如一個表可以分布在不同步的文件上)。數(shù)據(jù)和文件放在一起方便管理。
缺點:
所有的數(shù)據(jù)和索引存放到一個文件中以為著將有一個很常大的文件,雖然可以把一個大文件分成多個小文件,但是多個表及索引在表空間中混合存儲,這樣對于一個表做了大量刪除操作后表空間中將會有大量的空隙,特別是對于統(tǒng)計分析,日值系統(tǒng)這類應用最不適合用共享表空間。
獨立表空間:在配置文件(my.cnf)中設置: innodb_file_per_table
優(yōu)點:
1. 每個表都有自已獨立的表空間。
2. 每個表的數(shù)據(jù)和索引都會存在自已的表空間中。
3. 可以實現(xiàn)單表在不同的數(shù)據(jù)庫中移動。
4. 空間可以回收(除drop table操作處,表空不能自已回收)
a) Drop table操作自動回收表空間,如果對于統(tǒng)計分析或是日值表,刪除大量數(shù)據(jù)后可以通過:alter table TableName engine=innodb;回縮不用的空間。
b) 對于使innodb-plugin的Innodb使用turncate table也會使空間收縮。
c) 對于使用獨立表空間的表,不管怎么刪除,表空間的碎片不會太嚴重的影響性能,而且還有機會處理。
缺點:
單表增加過大,如超過100個G。
相比較之下,使用獨占表空間的效率以及性能會更高一點。
共享表空間以及獨占表空間之間的轉化
innodb_file_per_table 通過這個參數(shù)來實現(xiàn)的轉化,如果為OFF說明所使用的是獨占表空間【默認情況下,所使用的表空間為共享表空間】
innodb_file_per_table=1 為使用獨占表空間
innodb_file_per_table=0 為使用共享表空間
修改獨占空表空間的數(shù)據(jù)存儲位置
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
參數(shù)說明:
這個設置配置一個可擴展大小的尺寸為10MB的單獨文件,名為ibdata1。沒有給出文件的位置,所以默認的是在MySQL的數(shù)據(jù)目錄內?!緦?shù)據(jù)來進行初始化的設置】
innodb_data_home_dir 代表為數(shù)據(jù)庫文件所存放的目錄
innodb_log_group_home_dir 為日志存放目錄
innodb_file_per_table 是否使用共享以及獨占表空間來
以上的幾個參數(shù)必須在一起加入。
對于參數(shù)一些注意的地方
InnoDB不創(chuàng)建目錄,所以在啟動服務器之前請確認”所配置的路徑目錄”的確存在。這對你配置的任何日志文件目錄來說也是真實的。使用Unix或DOS的mkdir命令來創(chuàng)建任何必需的目錄。
通過把innodb_data_home_dir的值原原本本地部署到數(shù)據(jù)文件名,并在需要的地方添加斜杠或反斜杠,InnoDB為每個數(shù)據(jù)文件形成目錄路徑。
如果innodb_data_home_dir選項根本沒有在my.cnf中提到,默認值是“dot”目錄 ./,這意思是MySQL數(shù)據(jù)目錄。
所以在做數(shù)據(jù)的移植以及備份時,一定要注意數(shù)據(jù)文件的完整性.
對于innodb的數(shù)據(jù)結構,首先要解決兩個概念性的問題: 共享表空間以及獨占表空間。
什么是共享表空間和獨占表空間
共享表空間以及獨占表空間都是針對數(shù)據(jù)的存儲方式而言的。
共享表空間: 某一個數(shù)據(jù)庫的所有的表數(shù)據(jù),索引文件全部放在一個文件中,默認這個共享表空間的文件路徑在data目錄下。 默認的文件名為:ibdata1 初始化為10M。
獨占表空間: 每一個表都將會生成以獨立的文件方式來進行存儲,每一個表都有一個.frm表描述文件,還有一個.ibd文件。 其中這個文件包括了單獨一個表的數(shù)據(jù)內容以及索引內容,默認情況下它的存儲位置也是在表的位置之中。
兩者之間的優(yōu)缺點
共享表空間:
優(yōu)點:
可以放表空間分成多個文件存放到各個磁盤上(表空間文件大小不受表大小的限制,如一個表可以分布在不同步的文件上)。數(shù)據(jù)和文件放在一起方便管理。
缺點:
所有的數(shù)據(jù)和索引存放到一個文件中以為著將有一個很常大的文件,雖然可以把一個大文件分成多個小文件,但是多個表及索引在表空間中混合存儲,這樣對于一個表做了大量刪除操作后表空間中將會有大量的空隙,特別是對于統(tǒng)計分析,日值系統(tǒng)這類應用最不適合用共享表空間。
獨立表空間:在配置文件(my.cnf)中設置: innodb_file_per_table
優(yōu)點:
1. 每個表都有自已獨立的表空間。
2. 每個表的數(shù)據(jù)和索引都會存在自已的表空間中。
3. 可以實現(xiàn)單表在不同的數(shù)據(jù)庫中移動。
4. 空間可以回收(除drop table操作處,表空不能自已回收)
a) Drop table操作自動回收表空間,如果對于統(tǒng)計分析或是日值表,刪除大量數(shù)據(jù)后可以通過:alter table TableName engine=innodb;回縮不用的空間。
b) 對于使innodb-plugin的Innodb使用turncate table也會使空間收縮。
c) 對于使用獨立表空間的表,不管怎么刪除,表空間的碎片不會太嚴重的影響性能,而且還有機會處理。
缺點:
單表增加過大,如超過100個G。
相比較之下,使用獨占表空間的效率以及性能會更高一點。
共享表空間以及獨占表空間之間的轉化
innodb_file_per_table 通過這個參數(shù)來實現(xiàn)的轉化,如果為OFF說明所使用的是獨占表空間【默認情況下,所使用的表空間為共享表空間】
innodb_file_per_table=1 為使用獨占表空間
innodb_file_per_table=0 為使用共享表空間
修改獨占空表空間的數(shù)據(jù)存儲位置
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
參數(shù)說明:
這個設置配置一個可擴展大小的尺寸為10MB的單獨文件,名為ibdata1。沒有給出文件的位置,所以默認的是在MySQL的數(shù)據(jù)目錄內?!緦?shù)據(jù)來進行初始化的設置】
innodb_data_home_dir 代表為數(shù)據(jù)庫文件所存放的目錄
innodb_log_group_home_dir 為日志存放目錄
innodb_file_per_table 是否使用共享以及獨占表空間來
以上的幾個參數(shù)必須在一起加入。
對于參數(shù)一些注意的地方
InnoDB不創(chuàng)建目錄,所以在啟動服務器之前請確認”所配置的路徑目錄”的確存在。這對你配置的任何日志文件目錄來說也是真實的。使用Unix或DOS的mkdir命令來創(chuàng)建任何必需的目錄。
通過把innodb_data_home_dir的值原原本本地部署到數(shù)據(jù)文件名,并在需要的地方添加斜杠或反斜杠,InnoDB為每個數(shù)據(jù)文件形成目錄路徑。
如果innodb_data_home_dir選項根本沒有在my.cnf中提到,默認值是“dot”目錄 ./,這意思是MySQL數(shù)據(jù)目錄。
所以在做數(shù)據(jù)的移植以及備份時,一定要注意數(shù)據(jù)文件的完整性.
相關文章
linux 下配置安裝mysql以及配置【經(jīng)驗】
這篇文章主要介紹了linux 下配置安裝mysql以及配置【經(jīng)驗】,需要的朋友可以參考下2016-05-05一文弄懂MySQL中redo?log與binlog的區(qū)別
在學習mysql數(shù)據(jù)庫時,不可避免要去接觸到redo log和binlog,好多人對這兩者的概念分不太清,下面這篇文章主要給大家介紹了關于MySQL中redo?log與binlog區(qū)別的相關資料,需要的朋友可以參考下2022-02-02win2008 R2服務器下修改MySQL 5.5數(shù)據(jù)庫data目錄的方法
這篇文章主要介紹了win2008 R2服務器下修改MySQL 5.5數(shù)據(jù)庫data目錄的方法,需要的朋友可以參考下2016-04-04MySQL拼接字符串函數(shù)GROUP_CONCAT詳解
本文給大家詳細講解了MySQL的拼接字符串函數(shù)GROUP_CONCAT的幾種使用方法以及詳細示例,有需要的小伙伴可以參考下2020-02-02