mysql 查看表v空间自增涨_mysql文件结构及InnoDB引擎表空间整理
一、Mysql 的目錄結(jié)構(gòu)
1、bin目錄
用于放置一些可執(zhí)行文件,如mysql.exe、mysqld.exe、mysqlshow.exe等。
2、data目錄
用于放置一些日志文件及數(shù)據(jù)庫(kù)
3、include目錄
用于存放一些頭文件,如:mysql.h、mysql_ername.h等。
4、lib目錄
用于放置一些庫(kù)文件
4、docs目錄
存放一些目錄
5、share目錄
用于存放字符集、語(yǔ)言等信息
6、my.ini
是MySQL數(shù)據(jù)庫(kù)中使用的配置文件,linux下是my.cnf
7、my-huge.ini
適合超大型數(shù)據(jù)庫(kù)使用的配置文件
8、my-large.ini
適合大型數(shù)據(jù)庫(kù)的配置文件
9、my-medium.ini
適合中型數(shù)據(jù)庫(kù)的配置我呢見
10、my-small.ini
適合小型數(shù)據(jù)庫(kù)的配置文件
11、my-template.ini
配置文件模板、Mysql配置向?qū)⒃撆渲梦募械倪x項(xiàng)寫入my.ini文件
12、my-innodb-heavy-4G.ini
示該配置文件只對(duì)于InnoDB存儲(chǔ)引擎有效,而且服務(wù)器的內(nèi)存不能小于4GB
二、日志文件
默認(rèn)都存儲(chǔ)在datadir指定的目錄,如windows下的data目錄,linux下的/var/lib/mysql目錄
1、錯(cuò)誤日志
記錄mysql啟動(dòng)、停止、運(yùn)行過程中發(fā)生的各種嚴(yán)重錯(cuò)誤信息。
可以使用--log-error[=file_name]參數(shù)指定日志位置
log-error=/var/log/mysqld.log
2、通用日志
記錄建立客戶端連接和執(zhí)行的語(yǔ)句,而binglog不記錄select語(yǔ)句。
--general_log[={0關(guān)閉|1啟動(dòng)}]
--log-output[=value] value的值可以是table,file,none的一個(gè)或多個(gè)的組合,中間用逗號(hào)進(jìn)行分割
--general_log_file=file_name
--log[=file_name]或-l [file_name]
datadir目錄下的,默認(rèn)文件名為host_name.log
如果想在session級(jí)別控制日志是否被記錄,則通過在session中設(shè)置參數(shù)sql_log_off為on或off來進(jìn)行控制。
3、二進(jìn)制日志
類似于Oracle的歸檔日志,記錄所有的DDL和dml語(yǔ)句,但不包含select語(yǔ)句,語(yǔ)句以事件形式保存,用于主從復(fù)制
默認(rèn)不啟用,啟用使用參數(shù)--log-bin[=file_name]
log-bin=/var/log/mysql-bin/bin.log
server-id=2
4、慢查詢?nèi)罩?/p>
記錄執(zhí)行時(shí)間超過long_query_time秒的所有查詢
slow_query_log=1|0 設(shè)置啟動(dòng)1和關(guān)閉0
slow_query_log_file=/var/log/mysql-slow/slow.log 指定慢查詢?nèi)罩韭窂?/p>
long_query_time=3
使用 ../bin/mysqldumpslow faspdev-slow.log 進(jìn)行慢查詢?nèi)罩緟R總處理
5、刷新日志方法
1)flush logs
2)mysqladmin flush-logs
3)mysqladmin refresh
二、數(shù)據(jù)文件結(jié)構(gòu)
1、表對(duì)象數(shù)據(jù)文件
數(shù)據(jù)文件類型取決于存儲(chǔ)引擎
frm文件 表對(duì)象結(jié)構(gòu)定義文件,與引擎無關(guān)
db.opt 此文件在每一個(gè)自建的庫(kù)里都會(huì)有,記錄這個(gè)庫(kù)的默認(rèn)使用的字符集和校驗(yàn)規(guī)。
trg 觸發(fā)器文件
InnoDB引擎數(shù)據(jù)文件:
由于該存儲(chǔ)引擎在事務(wù)上具有優(yōu)勢(shì),即支持具有提交、回滾及崩潰恢復(fù)能力等事務(wù)特性,所以比MyISAM存儲(chǔ)引擎占用更多的磁盤空間。因此當(dāng)需要頻繁的更新、刪除操作,同時(shí)還對(duì)事務(wù)的完整性要求較高,需要實(shí)現(xiàn)并發(fā)控制,建議選擇。
分為共享表空間ibdataX和獨(dú)立表空間ibd文件,存放表數(shù)據(jù)、索引
共享表空間只有.frm和.ibdata1文件,存放InnoDB系統(tǒng)信息、用戶表、索引
獨(dú)立表空間包含.frm和.ibd文件
ib_logfileX 日志文件
MyISAM引擎數(shù)據(jù)文件:
由于該存儲(chǔ)引擎不支持事務(wù)、也不支持外鍵,所以訪問速度較快。因此當(dāng)對(duì)事務(wù)完整性沒有要求并以訪問為主的應(yīng)用適合使用該存儲(chǔ)引擎。
MYD文件 MyISAM數(shù)據(jù)文件,全稱.mydata
MYI文件 MyISAM索引文件,全稱.myindex
LOG文件 日志文件
其他引擎數(shù)據(jù)文件:
CSV文件 CSV引擎數(shù)據(jù)文件
ARZ文件 ARCHIVE引擎數(shù)據(jù)文件
MEMORY存儲(chǔ)引擎存儲(chǔ)數(shù)據(jù)的位置是內(nèi)存,因此訪問速度最快,但是安全上沒有保障。適合于需要快速的訪問或臨時(shí)表。
2、pid文件/sock文件
pid文件是mysqld應(yīng)用程序在Unix/Linux環(huán)境下的一個(gè)進(jìn)程文件,和許多其他Unix/Linux服務(wù)端程序一樣,它存放著自己的進(jìn)程id
socket文件也是在Unix/Linux環(huán)境下才有的,用戶在Unix/Linux環(huán)境下客戶端連接可以不通過TCP/IP網(wǎng)絡(luò)而直接使用Unix Socket來連接mysql.
三、默認(rèn)數(shù)據(jù)庫(kù)
mysql mysql系統(tǒng)數(shù)據(jù)庫(kù),存放用戶信息
test 測(cè)試數(shù)據(jù)庫(kù),空的數(shù)據(jù)庫(kù)
performance_schema 存放設(shè)置表、線程記錄、歷史事件記錄、事件統(tǒng)計(jì)
四、innodb表空間
1.innodb表空間存儲(chǔ)結(jié)構(gòu)
段,區(qū)均為邏輯概念,并且段管理由innodb存儲(chǔ)引擎內(nèi)部完成!
區(qū),區(qū)是由連續(xù)的頁(yè)(Page)組成的空間,在任何情況下每個(gè)區(qū)大小都為1MB,為了保證頁(yè)的連續(xù)性,InnoDB存儲(chǔ)引擎每次從磁盤一次申請(qǐng)4-5個(gè)區(qū)
頁(yè),頁(yè)是innodb存儲(chǔ)引擎磁盤管理的最小單位,頁(yè)的大小默認(rèn)是16KB,可以由innodb_page_size參數(shù)設(shè)置,設(shè)置完成后,不可以對(duì)其再次進(jìn)行修改。
2.innodb中表空間可以分為以下幾種:
系統(tǒng)表空間
獨(dú)立表空間
undo表空間
臨時(shí)表空間(temporary tablespace)
通用表空間(general tablespace)
3.系統(tǒng)表空間(即共享表空間)
show variables like "innodb_data_file_path";
查詢結(jié)果:innodb_data_file_path | ibdata1:12M:autoextend
#ibdata1:指定默認(rèn)文件名#12M:指定默認(rèn)文件大小#autoextend: 表示文件是自增的,當(dāng)超過12M時(shí),會(huì)自動(dòng)增加大小,沒有指定表空間的位置,默認(rèn)是在數(shù)據(jù)庫(kù)目
#注意添加文件時(shí)的格式寫法
innodb_data_file_path=ibdata1:100M:autoestend;/data/ibdata2:200M
2.獨(dú)立表空間
在配置文件(my.cnf)中設(shè)置: innodb_file_per_table=[1|0]
優(yōu)點(diǎn):
1.每個(gè)表都有自已獨(dú)立的表空間。
2.每個(gè)表的數(shù)據(jù)和索引都會(huì)存在自已的表空間中。
3.可以實(shí)現(xiàn)單表在不同的數(shù)據(jù)庫(kù)中移動(dòng)。
4.空間可以回收
缺點(diǎn):
1.單表增加過大,如超過100個(gè)G。
2.相比較之下,使用獨(dú)占表空間的效率以及性能會(huì)更高一點(diǎn)。
3.通用表空間
通用表空間是在MySQL5.7中添加的一個(gè)新功能。可以數(shù)據(jù)庫(kù)中指定的某幾張表的數(shù)據(jù)寫到同一個(gè)表空間,類似于系統(tǒng)的共享存儲(chǔ)空間。
#創(chuàng)建通用表空間
mysql> create tablespace ts add datafile "ts1.ibd" engine=innodb;
Query OK, 0 rows affected (0.04 sec)
#datafile若是使用絕對(duì)路徑,則可以指定datadir之外的目錄,默認(rèn)是在datadir指定的目錄
#創(chuàng)建的表空間已經(jīng)存在
mysql> system ls -lh /data/mysql/ts1.ibd
-rw-r----- 1 mysql mysql 64K Oct 23 06:42 /data/mysql/ts1.ibd
#把多張表指向一個(gè)表空間
mysql> create table test1(id int, name varchar(20)) tablespace=ts;
Query OK, 0 rows affected (0.02 sec)
mysql> create table test2(id int, name varchar(20)) tablespace=ts;
Query OK, 0 rows affected (0.02 sec)
mysql> create table test3(id int, name varchar(20)) tablespace=ts;
Query OK, 0 rows affected (0.01 sec)
#使用show create table 語(yǔ)句可以發(fā)現(xiàn)上面三張表的表空間均為ts。
#刪除表空間
mysql> create tablespace ts2 add datafile "ts2.ibd" engine=innodb;
Query OK, 0 rows affected (0.01 sec)
mysql> drop tablespace ts2;
Query OK, 0 rows affected (0.02 sec)
4.undo表空間
MySQL5.6可以使用獨(dú)立undo表空間,并放到單獨(dú)的文件目錄下。采用獨(dú)立undo表空間,再也不用擔(dān)心undo會(huì)把 ibdata1 文件搞大。可以把undo文件部署到單獨(dú)的高速存儲(chǔ)設(shè)備上。
在數(shù)據(jù)庫(kù)初始化的時(shí)候就使用如下三個(gè)參數(shù)
innodb_undo_tablespaces=3 #設(shè)置為3個(gè)
innodb_undo_logs=128 #默認(rèn)128個(gè)回滾段
innodb_undo_directory =mysql_home/undo
5.臨時(shí)表空間
臨時(shí)表空間就是存放臨時(shí)表的表空間
MySQL 5.7對(duì)于InnoDB存儲(chǔ)引擎的臨時(shí)表空間做了優(yōu)化。在MySQL 5.7之前,INNODB引擎的臨時(shí)表都保存在ibdata里面,而ibdata的貪婪式磁盤占用導(dǎo)致臨時(shí)表的創(chuàng)建與刪除對(duì)其他正常表產(chǎn)生非常大的性能影響。
優(yōu)化:
MySQL 5.7 把臨時(shí)表的數(shù)據(jù)以及回滾信息(僅限于未壓縮表)從共享表空間里面剝離出來,形成自己?jiǎn)为?dú)的表空間,參數(shù)為innodb_temp_data_file_path。
在MySQL 5.7 中把臨時(shí)表的相關(guān)檢索信息保存在系統(tǒng)信息表中:information_schema.innodb_temp_table_info. 而MySQL 5.7之前的版本想要查看臨時(shí)表的系統(tǒng)信息是沒有太好的辦法。可以使用select * frominformation_schema.innodb_temp_table_info 查詢臨時(shí)表。
臨時(shí)表
臨時(shí)表顧名思義,就是臨時(shí)的,用完銷毀掉的表。 數(shù)據(jù)既可以保存在臨時(shí)的文件系統(tǒng)上,也可以保存在固定的磁盤文件系統(tǒng)上。
臨時(shí)表有下面幾種:
1、全局臨時(shí)表
這種臨時(shí)表從數(shù)據(jù)庫(kù)實(shí)例啟動(dòng)后開始生效,在數(shù)據(jù)庫(kù)實(shí)例銷毀后失效。在MySQL里面這種臨時(shí)表對(duì)應(yīng)的是內(nèi)存表,即memory引擎。
2、會(huì)話級(jí)別臨時(shí)表
這種臨時(shí)表在用戶登錄系統(tǒng)成功后生效,在用戶退出時(shí)失效。在MySQL里的臨時(shí)表指的就是以create temporary table 這樣的關(guān)鍵詞創(chuàng)建的表。
3、事務(wù)級(jí)別臨時(shí)表
這種臨時(shí)表在事務(wù)開始時(shí)生效,事務(wù)提交或者回滾后失效。 在MySQL里面沒有這種臨時(shí)表,必須利用會(huì)話級(jí)別的臨時(shí)表間接實(shí)現(xiàn)。
4、檢索級(jí)別臨時(shí)表
這種臨時(shí)表在SQL語(yǔ)句執(zhí)行之間產(chǎn)生,執(zhí)行完畢后失效。 在MySQL里面這種臨時(shí)表不是很固定,跟隨MySQL默認(rèn)存儲(chǔ)引擎來變化。比如默認(rèn)存儲(chǔ)引擎是MyISAM,臨時(shí)表的引擎就是MyISAM,并且文件生成形式以及數(shù)據(jù)運(yùn)作形式和MyISAM一樣,只是數(shù)據(jù)保存在內(nèi)存里;如果默認(rèn)引擎是INNODB,那么臨時(shí)表的引擎就是INNODB,此時(shí)它的所有信息都保存在共享表空間ibdata里面。
總結(jié)
以上是生活随笔為你收集整理的mysql 查看表v空间自增涨_mysql文件结构及InnoDB引擎表空间整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java excel 导出图片_JAVA
- 下一篇: python适合开发游戏吗_用pytho