備份
有時(shí)候服務(wù)器突發(fā)故障咽弦,平時(shí)運(yùn)維不到位徒蟆,還沒(méi)來(lái)來(lái)得急備份服務(wù)就掛了,那么數(shù)據(jù)庫(kù)怎么辦呢型型?只能先備份下原始文件了段审。在 innodb 引擎中,每個(gè)庫(kù)是一個(gè)文件夾闹蒜,每個(gè)表都有一個(gè) .frm
和 .idb
文件寺枉。但是光備份這兩個(gè)然后還原是不行的,因?yàn)樾枰?idb 文件中的 tablespace id
與 ibdata1
中的一致才可以绷落。
既然知道了原因那么也就有解決方案了姥闪,就是連同 ibdata1
文件一起備份。
還原
那么如何正確還原呢砌烁?
為了能讓 mysql 正確識(shí)別我們的表筐喳,需要將舊的 ibdata1
文件恢復(fù)。但同時(shí)又不能影響新的數(shù)據(jù)函喉,因此先將現(xiàn)在的 ibdata1
文件再次備份避归。
然后就可以還原 frm
、idb
以及 ibdata1
了管呵。為了保險(xiǎn)起見(jiàn)重啟下數(shù)據(jù)庫(kù):
service mysql restart
這時(shí)候就發(fā)現(xiàn)數(shù)據(jù)都已經(jīng)恢復(fù)過(guò)來(lái)了梳毙。那么就趕緊轉(zhuǎn)儲(chǔ)吧:
mysqldump -u[用戶名] [數(shù)據(jù)庫(kù)名] > [文件名]
mysqldump -u root demo > demo.sql
現(xiàn)在我們已經(jīng)拿到了 sql 文件,之前恢復(fù)的數(shù)據(jù)可以刪除了撇寞,最后再把 ibdata1
恢復(fù)回來(lái)《偬欤現(xiàn)在新創(chuàng)建一個(gè)庫(kù),導(dǎo)入 .sql
即可~
注意下文件權(quán)限問(wèn)題蔑担。如果數(shù)據(jù)庫(kù)用的是單獨(dú)用戶牌废,恢復(fù)的備份文件可能需要
chown
改變一下用戶組。否則 MySql 會(huì)無(wú)法啟動(dòng)啤握,具體可以看錯(cuò)誤日志鸟缕。