mysql初識之數據文件及其他文件
數據文件
在mysql中數據文件存放於在my.cnf中datadir指定的路徑,使用的表引擎不同產生的文件格式、表文件個數也會有所差異。mysql的表引擎有多種,表的擴展名也不一樣,如innodb用“ .ibd”,archive用“.arc ”,csv用“.csv”等。
myisam表引擎
myisam表會產生三個文件:MYI、MYD、frm文件
frm文件:
主要存放表的元數據(meta),包括表結構設定信息等。不論是哪個表引擎都會有一個frm文件,存放在資料庫的數據目錄下。
.MYI文件(索引文件):
主要存放myisam的索引信息可以被cache的內容主要源於 .MYI文件中,每個myisam表對應一個 .myi文件,存放的位置與 .frm 、MYI一樣。
innodb引擎
使用innodb引擎時,需要理解獨立表空間、共享表空間。
獨立表空間:每個表都會生成以獨立的文件方式來存儲,每個表都一個.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線程以及某些管理操作隨時能夠獲取當前復制的相關信息
其他文件
1、systemconfigfile
MySQL的系統配置文件一般都是“my.cnf”,Unix/Linux下默認存放在"/etc"目錄下,Windows環境一般存放在“c:/windows”目錄下面。“my.cnf”文件中包含多種參數選項組(group),每一種參數組都通過中括號給定瞭固定的組名,如“[mysqld]”組中包括瞭mysqld
服務啟動時候的初始化參數,“[client]”組中包含著客戶端工具程式可以讀取的參數,此外還有其他針對於各個客戶端軟件的特定參數組,如mysql程式使用的“[mysql]”,mysqlchk使用的“[mysqlchk]”,等等。如果讀者朋友自己編寫瞭某個客戶端程式,也可以自己設定
一個參數組名,將相關參數配置在裡面,然後調用mysql客戶端api程式中的參數讀取api讀取相關參數。
2、pidfile
pid file是mysqld應用程式在Unix/Linux環境下的一個進程文件,和許多其他Unix/Linux服務端程式一樣,存放著自己的進程id。
3、socketfile
socket文件也是在Unix/Linux環境下才有的,用戶在Unix/Linux環境下客戶端連接可以不通過TCP/IP網絡而直接使用UnixSocket來連接MySQL。