作為一個(gè)PHP的程序員,用了好多年的mysql數(shù)據(jù)庫(kù),一般的數(shù)據(jù)表我們要么用InnoDB的表類型(Engine)或MyISAM的表類型居多。在創(chuàng)建數(shù)據(jù)庫(kù)表的時(shí)候,默認(rèn)是使用的表類型是InnoDB的,當(dāng)時(shí)也沒(méi)太在意,反正不影響數(shù)據(jù)庫(kù)的使用,今天我們不講InnoDB和MyISAM的區(qū)別(在使用事務(wù)時(shí),需要用到InnoDB表類型之類的),而是講下這兩種數(shù)據(jù)表的如何備份。
一般備份數(shù)據(jù)庫(kù)最簡(jiǎn)單的方法就是使用phpmyadmin網(wǎng)頁(yè)來(lái)導(dǎo)出保存為sql文件數(shù)據(jù)庫(kù)或Navicat使用軟件將所有的數(shù)據(jù)表全選后另存為sql文件。除了兩種方法外,還能通過(guò)備份msyql安裝目錄里的data文件夾里的數(shù)據(jù)庫(kù)文件來(lái)備份數(shù)據(jù)庫(kù),data路徑如下圖所示:
如果是表類型為MyISAM的數(shù)據(jù)庫(kù)則非常簡(jiǎn)單,只需要將數(shù)據(jù)表文件夾(如上圖所示的”xianda”)復(fù)制到data的目錄里就可以使用這個(gè)數(shù)據(jù)庫(kù)了?,F(xiàn)在重點(diǎn)講下如何快速恢復(fù)表類型為InnoDB的數(shù)據(jù)庫(kù),根據(jù)我的經(jīng)驗(yàn)而言(可能還有其他的辦法),想要恢復(fù)InnoDB的數(shù)據(jù)庫(kù)有一個(gè)必要條件,那就是你必須同時(shí)備份了上圖所示的ibdata1的文件,否則將無(wú)法備份InnoDB數(shù)據(jù)表。例如上圖里的”sgccmindb”就是innoDB的數(shù)據(jù)庫(kù),首先關(guān)閉mysql service,然后同時(shí)復(fù)制數(shù)據(jù)庫(kù)文件夾和ibdata1到data目錄里,如果data有其他數(shù)據(jù)庫(kù),請(qǐng)先備份,否則ibdata1文件替換原先的ibdata1文件后,原先的數(shù)據(jù)庫(kù)可能會(huì)無(wú)法使用,特別是表類型innoDB的數(shù)據(jù)庫(kù)肯定無(wú)法使用。
以前遇到的問(wèn)題:只復(fù)制數(shù)據(jù)庫(kù),并沒(méi)有復(fù)制ibdata1文件,造成的情況如下圖所示:
從navicat軟件里可以查看到數(shù)據(jù)表的數(shù)據(jù)長(zhǎng)度為0KB,并且表結(jié)構(gòu)也是無(wú)法保存,如果雙擊打開數(shù)據(jù)表,會(huì)彈出錯(cuò)誤如下圖所示:
即提示這個(gè)表是不存在的,從上面的兩個(gè)提示可以推斷,innoDB的數(shù)據(jù)庫(kù)是把所有的數(shù)據(jù)都保存在ibdata1文件了,而MyISAM的數(shù)據(jù)庫(kù)則直接把數(shù)據(jù)保存在表文件里的。
總結(jié):如果使用表類型為innoDB的數(shù)據(jù)庫(kù),在備份表文件的同時(shí),必須把對(duì)應(yīng)的ibdata1文件也備份了,不過(guò)還是建議備份sql文
如沒(méi)特殊注明,文章均為方維網(wǎng)絡(luò)原創(chuàng),轉(zhuǎn)載請(qǐng)注明來(lái)自http://pdcharm.com/news/5156.html