最近發(fā)現(xiàn)自己服務器空間剩下不多了鹃锈,因為我往MySQL中上傳了一個將近7G的sql误甚,于是本來還剩11G可用拌汇,瞬間變得只剩4G柒桑。關鍵是,后來我把這個超大的數(shù)據(jù)庫drop掉噪舀,結果df -h一看存儲魁淳,我的天,仍然只有4G可用傅联,于是我慌了先改。
后來發(fā)現(xiàn),是/var/lib/mysql/目錄下有個ibdata1這么個東西蒸走,占了8.7G仇奶,同級目錄下還有和每個數(shù)據(jù)庫對應的一個文件夾,以及mysql/文件夾比驻,和ib_logfile0该溯、ib_logfile1等文件。所以占空間的主要就是這個ibdata1别惦,這是個什么東西呢狈茉?能不能直接刪掉呢?我把ibdata1改了個名字掸掸,改成ibdata1_bak氯庆,發(fā)現(xiàn)MySQL又自動生成了一個新的ibdata1,size小很多了扰付,但是直接導致其他數(shù)據(jù)庫無法正常使用堤撵,說明ibdata1里面存有其他數(shù)據(jù)庫所需要的數(shù)據(jù)。
去網(wǎng)上查了下羽莺,這個ibdata1实昨,連同ib_logfile0、ib_logfile1盐固,三個文件一起存儲著其他數(shù)據(jù)庫的內(nèi)容荒给,因為MySQL默認是innodb存儲丈挟,所以其他數(shù)據(jù)庫所對應的文件夾里存儲的只是表結構,真正的innodb數(shù)據(jù)全部在ibdata1里志电,所以這個東西曙咽,不能隨便刪!
那就很尷尬了溪北,我現(xiàn)在已經(jīng)drop那個最大的數(shù)據(jù)庫了桐绒,但是ibdata1仍然在,而且和其他數(shù)據(jù)庫的數(shù)據(jù)都捆綁在一起之拨,導致我無法暴力清除相應的數(shù)據(jù)茉继。
去網(wǎng)上找到了解決方案:
首先,備份你其他要用的全部數(shù)據(jù)庫蚀乔。這一步相當重要烁竭,一定要備份好你的數(shù)據(jù),不然出差錯了就什么都沒有了吉挣;
其次派撕,刪除掉除information_schema、performance_schema睬魂、mysql三個數(shù)據(jù)庫之外的其他全部數(shù)據(jù)庫终吼,其實也就是上面你已經(jīng)備份好的那些數(shù)據(jù)庫;
然后氯哮,停止MySQL服務际跪,我是ubuntu系統(tǒng),cd到/var/lib/mysql/喉钢,發(fā)現(xiàn)你的那些數(shù)據(jù)庫所對應的文件夾都不在了姆打,現(xiàn)在可以放心大膽地刪掉ibdata1、ib_logfile0和ib_logfile1肠虽;
接著幔戏,找到你的MySQL配置文件,我的是在/etc/mysql/my.cnf税课,在以下部分中添加一行闲延,使得每個數(shù)據(jù)庫使用單獨的innodb存儲。
最后韩玩,重啟MySQL服務垒玲,并且恢復你已備份好的全部數(shù)據(jù)庫,你會發(fā)現(xiàn)啸如,ibdata1的大小始終是18M左右。cd到每個數(shù)據(jù)庫所對應的文件夾中氮惯,數(shù)據(jù)庫里的每個表都包含frm和ibd兩個文件叮雳,分別存儲表結構和表數(shù)據(jù)想暗。這就是我們想要的結果了,所有數(shù)據(jù)不再共用ibdata1帘不,而是在自己的文件夾目錄下單獨存儲數(shù)據(jù)说莫。
再再再強調(diào)一次,折騰MySQL的時候寞焙,一定要把有用的數(shù)據(jù)庫全部備份好储狭,否則一旦出現(xiàn)意料之外的差錯,數(shù)據(jù)就再也找不回來了5方肌A杀贰!G荷刮萌!