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