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

innodb_file_per_table=1 為使用獨(dú)占表空間
innodb_file_per_table=0 為使用共享表空間
修改獨(dú)占空表空間的數(shù)據(jù)存儲(chǔ)位置
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ù)說(shuō)明:
這個(gè)設(shè)置配置一個(gè)可擴(kuò)展大小的尺寸為10MB的單獨(dú)文件,名為ibdata1。沒(méi)有給出文件的位置,所以默認(rèn)的是在MySQL的數(shù)據(jù)目錄內(nèi)。【對(duì)數(shù)據(jù)來(lái)進(jìn)行初始化的設(shè)置】
innodb_data_home_dir 代表為數(shù)據(jù)庫(kù)文件所存放的目錄
innodb_log_group_home_dir 為日志存放目錄
innodb_file_per_table 是否使用共享以及獨(dú)占表空間來(lái)
以上的幾個(gè)參數(shù)必須在一起加入。
對(duì)于參數(shù)一些注意的地方
InnoDB不創(chuàng)建目錄,所以在啟動(dòng)服務(wù)器之前請(qǐng)確認(rèn)”所配置的路徑目錄”的確存在。這對(duì)你配置的任何日志文件目錄來(lái)說(shuō)也是真實(shí)的。使用Unix或DOS的mkdir命令來(lái)創(chuàng)建任何必需的目錄。
通過(guò)把innodb_data_home_dir的值原原本本地部署到數(shù)據(jù)文件名,并在需要的地方添加斜杠或反斜杠,InnoDB為每個(gè)數(shù)據(jù)文件形成目錄路徑。
如果innodb_data_home_dir選項(xiàng)根本沒(méi)有在my.cnf中提到,默認(rèn)值是“dot”目錄 ./,這意思是MySQL數(shù)據(jù)目錄。
所以在做數(shù)據(jù)的移植以及備份時(shí),一定要注意數(shù)據(jù)文件的完整性.
您可能感興趣的文章:
- mysql 行列動(dòng)態(tài)轉(zhuǎn)換的實(shí)現(xiàn)(列聯(lián)表,交叉表)
- mysql鎖表和解鎖語(yǔ)句分享
- MySQL中基本的多表連接查詢教程
- mysql表的清空、刪除和修改操作詳解
- MySQL中使用表別名與字段別名的基本教程
- MYSQL性能優(yōu)化分享(分庫(kù)分表)
- 修改MySQL數(shù)據(jù)庫(kù)中表和表中字段的編碼方式的方法
- mysql數(shù)據(jù)庫(kù)修改數(shù)據(jù)表引擎的方法
- mysql中復(fù)制表結(jié)構(gòu)的方法小結(jié)
- MySql表、字段、庫(kù)的字符集修改及查看方法
- MySQL橫縱表相互轉(zhuǎn)化操作實(shí)現(xiàn)方法
相關(guān)文章
詳解JDBC數(shù)據(jù)庫(kù)鏈接及相關(guān)方法的封裝
這篇文章主要介紹了詳解JDBC數(shù)據(jù)庫(kù)鏈接及相關(guān)方法的封裝的相關(guān)資料,下面是封裝的具體類(lèi),用到了泛型和反射,希望能幫助到大家,需要的朋友可以參考下2017-08-08
linux 下配置安裝mysql以及配置【經(jīng)驗(yàn)】
這篇文章主要介紹了linux 下配置安裝mysql以及配置【經(jīng)驗(yàn)】,需要的朋友可以參考下2016-05-05
Mysql InnoDB引擎的索引與存儲(chǔ)結(jié)構(gòu)詳解
這篇文章主要給大家介紹了Mysql InnoDB引擎的索引與存儲(chǔ)結(jié)構(gòu)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
一文弄懂MySQL中redo?log與binlog的區(qū)別
在學(xué)習(xí)mysql數(shù)據(jù)庫(kù)時(shí),不可避免要去接觸到redo log和binlog,好多人對(duì)這兩者的概念分不太清,下面這篇文章主要給大家介紹了關(guān)于MySQL中redo?log與binlog區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-02-02
win2008 R2服務(wù)器下修改MySQL 5.5數(shù)據(jù)庫(kù)data目錄的方法
這篇文章主要介紹了win2008 R2服務(wù)器下修改MySQL 5.5數(shù)據(jù)庫(kù)data目錄的方法,需要的朋友可以參考下2016-04-04
Mysq詳細(xì)講解如何解決庫(kù)存并發(fā)問(wèn)題
這篇文章主要為大家詳細(xì)介紹了如何使用Mysq解決庫(kù)存并發(fā)問(wèn)題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
MySQL拼接字符串函數(shù)GROUP_CONCAT詳解
本文給大家詳細(xì)講解了MySQL的拼接字符串函數(shù)GROUP_CONCAT的幾種使用方法以及詳細(xì)示例,有需要的小伙伴可以參考下2020-02-02

