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。