mysql數(shù)據(jù)庫(kù)不小心還原了需要按照以下步驟恢復(fù)。
我們提供的服務(wù)有:網(wǎng)站建設(shè)、成都做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、射洪ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的射洪網(wǎng)站制作公司
1、先確認(rèn)mysql有沒(méi)有啟用bin日志 ,就是看下mysql.ini(my點(diǎn)吸煙 f)里的log-bin=mysql-bin, 可以 自定義一個(gè)目錄和前綴名,比如/data/log/mylog這樣。
2、然后在數(shù)據(jù)庫(kù)文件存放的data目錄就能看到mysql-bin.00000x這樣的文件,這就是二進(jìn)制日志了,可以導(dǎo)出成txt格式的,里面其實(shí)就是對(duì)數(shù)據(jù)庫(kù)的各種操作sql語(yǔ)句。
3、導(dǎo)出txt文件:
e:\wamp\bin\mysql\mysql5.6.12\binmysqlbinlog
--database=testdatabase
e:\wamp\bin\mysql\mysql5.6.12\data\mysql-bin.000312
c:\\test1.txt
這是windows下的導(dǎo)出,linux也是類(lèi)似的。
database=數(shù)據(jù)庫(kù)名
從最早的日志還始還原
linux下可以很方便的 mysql-bin.000*
可以加參數(shù)開(kāi)始時(shí)間和結(jié)束時(shí)間,就是你執(zhí)行那條sql語(yǔ)句的時(shí)間
start-datetime="2014-12-04
11:25:56"
--stop-datetime="2014-12-04
13:23:50"
4、恢復(fù)數(shù)據(jù):
e:\wamp\bin\mysql\mysql5.6.12\binmysqlbinlog
--database=yundongchao
e:\wamp\bin\mysql\mysql5.6.12\data\mysql-bin.000179
|
mysql
-u
root
-p
------------------------------------------------
1 找個(gè)別的機(jī)器安裝個(gè)同版本的mysql或從已安裝同版本的其他機(jī)器上(非同版本的也可以試下):
拷貝 mysql/data/mysql 目錄到你的mysql/data/ 下吧
2 試著啟動(dòng)mysql服務(wù),如果能啟動(dòng)了,理論上應(yīng)該丟失的只有用戶(hù)、授權(quán)等一些系統(tǒng)信息,不影響你的使用的數(shù)據(jù);
如果不能啟動(dòng),看錯(cuò)誤日志,爭(zhēng)取啟動(dòng)了。
3 趕緊把數(shù)據(jù)備份一份出來(lái),重新把所有庫(kù)(只是你后來(lái)創(chuàng)建的業(yè)務(wù)相關(guān)的庫(kù),不包括mysql庫(kù))都刪了,重新導(dǎo)入一遍。理論上不這樣也可以,但只是非生產(chǎn)重要的環(huán)境下。
4 重新做用戶(hù)授權(quán)。
在解決的過(guò)程中,以下幾種嘗試:
1.如果開(kāi)啟了日志,直接mysqlbinlog 使用日志恢復(fù)即可。
2.如果不是刪除了一個(gè)表的部分?jǐn)?shù)據(jù),而是刪除整個(gè)表,那么可以在刪除后馬上用磁盤(pán)數(shù)據(jù)恢復(fù)軟件嘗試恢復(fù)。(因?yàn)閯h除表后會(huì)有文件被刪除,而刪除表的部分?jǐn)?shù)據(jù),文件還是存在)
3.找數(shù)據(jù)恢復(fù)的公司,使用工具分析ibdata1(分析過(guò)程參考一頁(yè)一頁(yè)查看有沒(méi)有歷史記錄存在,使用ibdata1恢復(fù)數(shù)據(jù),應(yīng)該是在了解數(shù)據(jù)表結(jié)構(gòu)的前提下,數(shù)據(jù)庫(kù)除ibdata1外其他數(shù)據(jù)受損不能正常使用數(shù)據(jù)庫(kù)時(shí)嘗試,而不是刪了表數(shù)據(jù)后恢復(fù)什么的。(事實(shí)上,這個(gè)文件是存儲(chǔ)現(xiàn)有表數(shù)據(jù)的,其實(shí)也可以設(shè)置成每個(gè)表一個(gè)文件。)
4.mysql下有ib_logfile0和ib_logfile1兩個(gè)文件,其實(shí)這兩個(gè)文件里,記錄了Mysql的一些事物日志,用于事務(wù)的前滾后滾,是Mysql自身使用的,這個(gè)文件用文本工具打開(kāi)后,有很多亂碼,但卻可以查找到被刪除的少量數(shù)據(jù)的insert記錄,極少數(shù)的亂碼通過(guò)前后語(yǔ)句找出了原文,最終通過(guò)事物日志恢復(fù)了刪除的文件。
注:用事物日志恢復(fù),需要幾個(gè)前提。
1:知道被刪除數(shù)據(jù)的大概位置,不要這邊查找,那邊又不斷有新數(shù)據(jù)插入。
2:因?yàn)橛泻芏鄟y碼,適用于查找少量數(shù)據(jù),而不是用作大量數(shù)據(jù)的恢復(fù),浪費(fèi)體力。
3:如果二進(jìn)制日志沒(méi)開(kāi),沒(méi)有備份,那么只能用這種方法恢復(fù)了。
1.第一步,查詢(xún)語(yǔ)句:select*fromtable_name;或select*fromtable_namewhere條件,如下圖。
2.第二步,增加語(yǔ)句或插入數(shù)據(jù)insertintotable_name(clus...)values(values...)實(shí)例如圖
3.修改數(shù)據(jù):updatetablenamesetxx=xx,xxx=xxwherexxx=xxxandxxx=xxx,如下圖。
4.第四步,刪除語(yǔ)句deletetable_namewhere條件實(shí)例如圖。