在 mysql中數據文件存放於在my.cnf中datadir指定的路徑,使用的表引擎不一樣產生的文件格式、表文件個數也會有所差別。mysql的表引擎有 多種,表的擴展名也不同,如innodb用「 .ibd」,archive用「.arc 」,csv用「.csv」等。mysql
myisam表引擎sql
myisam表會產生三個文件:MYI、MYD、frm文件數據庫
frm文件:windows
主要存放表的元數據(meta),包括表結構定義信息等。不管是哪一個表引擎都會有一個frm文件,存放在數據庫的數據目錄下。api
.MYI文件(索引文件):數組
主要存放myisam的索引信息能夠被cache的內容主要源於 .MYI文件中,每一個myisam表對應一個 .myi文件,存放的位置與 .frm 、MYI同樣。服務器
innodb引擎網絡
使用innodb引擎時,須要理解獨立表空間、共享表空間。socket
獨立表空間:每一個表都會生成以獨立的文件方式來存儲,每一個表都一個.frm的描述文件,還有一個.ibd文件。其中這個文件包括了單獨一個表的數據及索引內容,默認狀況下它的存儲在mysql指定的目錄下。工具
獨立表空間優缺點:
優勢:
每一個表都有 本身獨立的表空間;每一個表的數據和索引都會存儲在各個獨立的表空間中;能夠實現 單表 在不一樣的數據進行遷移;表空間能夠回收(除了drop table操做,表空不能本身回收);drop table 操做自動回收表空間,若是對統計分析或是日值表,刪除大量數據後能夠經過 :alter table tablename engin=innodb進行回縮不用的空間;對於使用inodb-plugin的innodb使用truncate table會使用空間收縮。;對於使用獨立表空間,無論怎麼刪除 ,表空間的碎片都不會太嚴重。
缺點:
單表增長過 大,如超過100G。對於單表增加過大的問題,若是使用共享表空間能夠把文件分開,但有一樣有一個問題,若是訪問的範圍過大一樣會訪問多個文件,同樣會比 較慢。對於獨立表空間也有一個解決辦法是:使用分區表,也能夠把那個大的表空間移動到別的空間上而後作一個鏈接。其實從性能上出發,當一個表超過100個 G有可能響應也是較慢了,對於獨立表空間還容易發現問題早作處理。
共享表空間:某一個數據庫全部的表數據,索引文件所有都放在一個文件 中,默認這個共享表空間的文件路徑在data目錄下,默認的文件名爲 bata1,初始化爲10M。
共享表空間優缺點
優勢:能夠將表空間分紅多個文件存放在各個磁盤上(表空間文件大小不受表大小 的限制,如一個表能夠分佈在不一樣的文件上),數據和文件放在一塊兒方便管理。
缺點:全部的數據和索引存放 到一個文件中,未來會是一個很大的文件,雖然 能夠把一個大文件分紅多個小文件,可是多個表及索引在表空間中混合存儲,這樣對一個表作了大量刪除操做後表空間將有大量的空隙,特別是對統計分析、日值系統這類應用最不適合用共享表空間。
如何開啓獨立表空間?
查看是否開啓獨產表空間:
mysql> show variables like '%per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF |
+-----------------------+-------+
設置開啓:
在my.cnf文件中[mysqld] 節點下添加innodb_file_per_table=1
注:
innodb_file_per_table值來進行修改便可,可是對於以前使用過的共享表空間則不會影響,除非手動的去進行修改或者是
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數據目錄。
replication相關文件
1.master.info文件
master.info文件存放在slave端的data目錄下,裏面存的是slave對應的master端所讀取到的相關信息,包括master的主機地地,鏈接用戶、密碼、端口,當前日誌位置、已讀取到的日誌位置等信息。
2.relay log 和relay log index
mysql- relay-bin.xxxxxn文件用於存放Slave端的I/O線程從Master端所讀取到的BinaryLog信息,而後由Slave端的SQL 線程從該relaylog中讀取並解析相應的日誌信息,轉化成Master所執行的SQL語句,而後在Slave端應用。mysql-relay- bin.index文件的功能相似於mysql-bin.index,一樣是記錄日誌的存放位置的絕對路徑,只不過他所記錄的不是BinaryLog,而 是RelayLog。
3. relay-log.info文件
相似於master.info,它存放經過Slave的I/O線程寫入到本地的relaylog的相關信息。供Slave端的SQL線程以及某些管理操做隨時可以獲取當前複製的相關信息
其餘文件
一、systemconfigfile
MySQL的系統配置文件通常都是「my.cnf」,Unix/Linux下默認存放在"/etc"目錄下,Windows環境通常存放在 「c:/windows」目錄下面。「my.cnf」文件中包含多種參數選項組(group),每一種參數組都經過中括號給定了固定的組名,如 「[mysqld]」組中包括了mysqld
服務啓動時候的初始化參數,「[client]」組中包含着客戶端工具程序能夠讀取的參數,此外還有其餘針對於各個客戶端軟件的特定參數組,如 mysql程序使用的「[mysql]」,mysqlchk使用的「[mysqlchk]」,等等。若是讀者朋友本身編寫了某個客戶端程序,也能夠本身設 定
一個參數組名,將相關參數配置在裏面,而後調用mysql客戶端api程序中的參數讀取api讀取相關參數。
二、pidfile
pid file是mysqld應用程序在Unix/Linux環境下的一個進程文件,和許多其餘Unix/Linux服務端程序同樣,存放着本身的進程id。
三、socketfile
socket文件也是在Unix/Linux環境下才有的,用戶在Unix/Linux環境下客戶端鏈接能夠不經過TCP/IP網絡而直接使用UnixSocket來鏈接MySQL。