2013-02-04 76 views
1

我一直在尋找ibdata1文件的大小,但只看到11MB就知道了。還有另一個名稱爲manu的文件夾,它與數據庫名稱相同,爲15GB。 (在我的本地機器上)爲什麼ibdata1文件佔用的空間比.frm + .MYD + .MYI文件少?

我看着活的服務器和它們完全相反!

ibdata1文件是128 GB,並且.frm + .MYD + .MYI文件大小較小的文件夾。

如果我期待已久的統計數據(本機) -

manu DB is 15GB 
ibdata1 is 11MB 

與此相伴,在文件夾「馬努」,每個表都有3個文件 - (只是一個例子:表NEWS)。

NEWS.frm 
NEWS.MYD 
NEWS.MYI 

很多次我把'manu'(在我的本地)和重新創建的表中的所有表都刪除了。

我的問題是,爲什麼現場數據庫包含ibdata中的所有內容(我假設ibdata1將包含我們在mysql表中看到的所有數據),以及爲什麼ibdata1的活性很小,並且與它們相關的文件很大。它不是在我的本地存儲ibdata1中的所有數據嗎?

可能是什麼問題。

其實我想重建數據庫並設置innodb_file_per_table,因爲許多刪除表沒有釋放空間,數據庫大小越來越大。

回答

3

這是因爲您的本地服務器使用不同於您的實時服務器的引擎。

當表是InnoDB引擎時,它們的數據存儲在ibdata1中,當它們存儲在.MY *文件中時,它們是引擎MyISAM。

在數據庫中,甚至可以混合使用不同引擎的表格。

主要區別在於,InnoDB能夠處理事務。這意味着當任何事情失敗時,語句可以恢復,而MyISAM則無法做到這一點。

創建數據庫時可以指定新建表的默認引擎。我想這發生在你的情況。您可以簡單地轉儲您的表,並在創建的備份腳本中,您可以在每個CREATE TABLE聲明末尾替換引擎。然後再次插入數據,你很好。

+0

我怎樣才能使它一樣活的服務器。如果我採用live DB的備份並將其轉儲到本地將都是相同的? –

+0

是的,這將起作用。 – fancyPants

0

我知道這是一個有點老問題,但要加一個重要的事情是,ibdata通過2種方式存儲從InnoDB表中的數據:

1-沒有啓用的my.cnf(my.ini文件)innodb_file_per_table ,所有來自InnoDB表的數據都存儲在ibdata文件中,如果它有些損壞,恭喜,你只是失去了一切!如果啓用my.cnf(my.ini)innodb_file_per_table,則每個表(.frm)都將擁有自己的數據文件(.ibd),ibdata1將用作「緩存」/「工作文件」,如果使用my.cnf(my.ini)innodb_file_per_table,if你損壞你的mysql,你可以使用.ibd文件恢復你的數據。

一些方法來恢復你的錶轉儲(操作的表成爲無用後)如下: http://www.chriscalender.com/recovering-an-innodb-table-from-only-an-ibd-file/ http://dev.mysql.com/doc/refman/5.0/en/forcing-innodb-recovery.html http://www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on-a-Mac

如果你失去了你的數據,永遠,永遠的後盾之前使用「innodb_force_recovery」因爲這會破壞你的ibdata文件,即使值爲1,2和3,也存在一個風險,值4,5和6,它肯定會造成損害,因爲它們是一種更加激進的方式來強制MySQL讀取傾銷數據。 (詳見:http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_force_recovery

最後,但並非不重要,避免受到損壞ibdata文件和丟失數據,總是明確地DECLARE innodb_fast_shutdown = 0在你的my.cnf(my.ini文件)文件,如它的默認值你不聲明它,是「1」,快速關機會忽略一些安全操作,並可以輕易破壞你的ibdata文件。 細節:http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_fast_shutdown

更多的InnoDB參數: http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html

相關問題