在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。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
