MySQL是一種開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),廣泛使用于網(wǎng)站開發(fā)、軟件開發(fā)和其他數(shù)據(jù)處理領(lǐng)域,其數(shù)據(jù)存儲在文件中,本文將詳解MySQL數(shù)據(jù)庫文件。
MySQL的數(shù)據(jù)文件主要由三類文件組成:frm文件、MYD文件和MYI文件。
frm文件存儲MySQL表的定義,該文件包括表結(jié)構(gòu)及其元數(shù)據(jù)信息。MySQL在創(chuàng)建表時會自動生成一個frm文件。
MYD文件存儲MySQL表的數(shù)據(jù),該文件包括字段和數(shù)據(jù)的內(nèi)容。當MySQL表中有記錄被添加、更新或刪除時,MYD文件會隨之改變。
MYI文件是MySQL表的索引文件,用于加速MySQL數(shù)據(jù)庫的查詢,該文件包括索引值和數(shù)據(jù)結(jié)構(gòu)。MYI文件保存的是數(shù)據(jù)在MySQL表中的位置信息。
MySQL數(shù)據(jù)庫中的所有文件都存儲在數(shù)據(jù)庫的 datadir 目錄下。通過SHOW VARIABLES命令可以查看datadir的具體路徑。
以下代碼演示如何創(chuàng)建表和查看frm、MYD和MYI文件的具體位置:
CREATE TABLE `example` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; SHOW VARIABLES LIKE '%datadir%';執(zhí)行完上述代碼后,MySQL會在datadir目錄下生成一個名為example的文件夾,其中包括example.frm、example.MYD和example.MYI三個文件。 注意:以上代碼中的ENGINE和CHARSET參數(shù)是可選的,可根據(jù)實際需求進行設(shè)置。 我們可以通過以下代碼查看example表在文件中的大小:
SELECT concat(table_name,'.',engine) as `table/Engine`, concat(round(data_length/(1024*1024),2),' MB') as `Data Size`, concat(round(index_length/(1024*1024),2),' MB') as `Index Size`, concat(round((data_length+index_length)/(1024*1024),2),' MB') as `Total Size`, round(index_length/data_length,2) as `Index/Total` FROM information_schema.tables WHERE table_schema='database_name' and table_name='example';其中,database_name需替換為實際的數(shù)據(jù)庫名。執(zhí)行以上代碼后,MySQL會返回example表的大小信息,包括數(shù)據(jù)大小、索引大小、總大小和索引占比信息。 通過以上代碼演示,我們可以更深入地了解MySQL數(shù)據(jù)庫文件的存儲方式和具體位置,有助于更好地管理和維護MySQL數(shù)據(jù)庫。