數(shù)據(jù)庫(kù)丟失了最好的恢復(fù)方法是從備份中還原文件,數(shù)據(jù)庫(kù)的文件一般都會(huì)有備份。如果備份也損壞了,無(wú)法進(jìn)行還原,那就需要使用數(shù)據(jù)恢復(fù)軟件來(lái)恢復(fù)了。從網(wǎng)上找恢復(fù)軟件,然后掃描一下,看是否可以搜索到需要的文件。
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),循化企業(yè)網(wǎng)站建設(shè),循化品牌網(wǎng)站建設(shè),網(wǎng)站定制,循化網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,循化網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
因?yàn)榇疟P(pán)空間不足,我的一個(gè)虛擬機(jī)服務(wù)器崩潰了。結(jié)果數(shù)據(jù)庫(kù)服務(wù)器進(jìn)程無(wú)法啟動(dòng),數(shù)據(jù)也就無(wú)法導(dǎo)出。只能想辦法從數(shù)據(jù)庫(kù)原始文件 ibdata 和 frm 文件中恢復(fù)數(shù)據(jù)庫(kù)。
因?yàn)闆](méi)有經(jīng)驗(yàn),好不容易才找到了恢復(fù)方法。特此記錄,以備后用。
磁盤(pán)空間不足之后,mysqld 進(jìn)程無(wú)法啟動(dòng),提示“Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)”。這真是讓人無(wú)比頭大,數(shù)據(jù)庫(kù)根本連接不上。
目錄 Contents
1. 保存原始數(shù)據(jù)庫(kù)文件
2. 恢復(fù)方法
3. 參考資料:
1. 保存原始數(shù)據(jù)庫(kù)文件?
好在數(shù)據(jù)庫(kù)原始文件還在。在我的系統(tǒng)環(huán)境和配置情況下,這些文件位于 /var/lib/mysql/ 文件夾下面。假設(shè)數(shù)據(jù)庫(kù)名是 test,則這些文件表現(xiàn)為:
--mysql
|--test
|--1.frm
|--2.frm
|...
|--mysql
|...
|--ib_logfile0
|--ib_logfile1
|--ibdata1
|...
這些就是原始數(shù)據(jù)庫(kù)文件,可以用來(lái)恢復(fù)數(shù)據(jù)庫(kù)。將這些文件額外保存一份,以防萬(wàn)一。
2. 恢復(fù)方法?
我的原始虛擬機(jī)完全沒(méi)有磁盤(pán)空間而無(wú)法啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器進(jìn)程。雖然試著刪除一些不需要的文件,但是數(shù)據(jù)庫(kù)卻始終無(wú)法連接。于是我新建了一個(gè)幾乎一樣的虛擬機(jī)(當(dāng)然磁盤(pán)加大了),試圖將這些數(shù)據(jù)庫(kù)文件導(dǎo)入并恢復(fù)數(shù)據(jù)庫(kù)。
在經(jīng)歷了很多錯(cuò)誤之后,終于找到了正確的方法:
安裝完成新服務(wù)器之后,通過(guò)命令行新建了與原來(lái)一樣的數(shù)據(jù)庫(kù):數(shù)據(jù)庫(kù)名稱(chēng)、用戶名、密碼都一樣。如果有多個(gè)數(shù)據(jù)庫(kù)需要恢復(fù),就都給建好。(跟配置新服務(wù)器一樣,參見(jiàn)安裝和配置 MYSQL 數(shù)據(jù)庫(kù)服務(wù)器。)
停止 mysqld 進(jìn)程
service mysqld stop
將備份的原始數(shù)據(jù)庫(kù)文件中的所有 .frm 文件(保持原來(lái)的目錄結(jié)構(gòu))和 ibdata1 文件復(fù)制到新服務(wù)器的數(shù)據(jù)庫(kù)文件目錄中(如果新服務(wù)器操作系統(tǒng)和配置環(huán)境一樣,那么目錄結(jié)構(gòu)也一樣),其它文件不要。
使用 -innodb_force_recovery=6參數(shù)啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器進(jìn)程,這里是
/etc/init.d/mysqld start -defaults-file=/etc/my.cnf -standalone -console -innodb_force_recovery=6
OK,數(shù)據(jù)庫(kù)恢復(fù)完成。
提示是數(shù)據(jù)表ims_account_wechats出錯(cuò)
Unknown column ‘jsapi_ticket’in ‘field list翻譯成人話就是在ims_account_wechats這個(gè)表中缺少jsapi_ticket這個(gè)字段。
本著缺啥補(bǔ)啥的精神,我們要來(lái)看一看如何正確地補(bǔ)上這個(gè)字段
語(yǔ)句很簡(jiǎn)單
alter table+表名+add+字段名+數(shù)據(jù)類(lèi)型+默認(rèn)值
示例的解決方法
alter table ims_account_wechats add jsapi_ticket varchar(32) DEFAULT NULL其實(shí)對(duì)應(yīng)著錯(cuò)誤,把表名和缺的字段名填寫(xiě)上去就行,默認(rèn)值也就寫(xiě)DEFAULT NULL就可以,唯一麻煩的就是這個(gè)數(shù)據(jù)類(lèi)型了。如果有人告訴你,這個(gè)字段的數(shù)據(jù)類(lèi)型是什么,那就直接寫(xiě)上,如果實(shí)在確定不了,建議選用varchar這個(gè)字符類(lèi)型,上面示例解決方法里就是varchar(32),表示可以存儲(chǔ)32個(gè)字符,這個(gè)值自己寫(xiě)吧,最大支持255。然后扔到系統(tǒng)-數(shù)據(jù)庫(kù)-SQL里執(zhí)行一下或者直接在數(shù)據(jù)庫(kù)里執(zhí)行一下就可以了。