1. 程式人生 > >phpmyadmin誤刪表後的恢復過程(心驚膽跳啊)

phpmyadmin誤刪表後的恢復過程(心驚膽跳啊)

話說今天不知道是抽風了還是失魂了,在用phpmyadmin刪除測試資料時,竟然將整個表刪除了:

等程式執行出錯時,才出現整個表都沒有了,而且之前也沒有備份好!這下蛋疼了,這個可是production伺服器,裡面的資料可不能丟啊! 伺服器是linux的,我不是很熟悉,也不知道mysql裝在哪。 無奈之下,google,發現有不少人也有像我一樣犯傻的一回,但是幾乎沒有看到具體的解決方法(有說用硬碟軟體找回,也有說用二進位制檔案找回),但是我本身對伺服器不大懂,覺得好糾結,那邊又在催說資料怎麼沒有了,還說一定得找回來。 這下我更急了,晚飯都沒心情吃。 這時,我找到了一些專門幫人恢復資料的技術人員。 他問了我資料量,資料庫引擎,當我說是‘myisam’時,他來了句:那無解了。。 當時我一下子懵了。 情急之下,我想到了,之前在testing伺服器裡面有一個副本資料庫,但是那裡的資料已經有些時日了,根本沒有最新一個月的資料。 這根本無法解救我! 這裡我在phpmyadmin中看到了這個:
腦裡出來了google上說的用二進位制恢復,就點開看一下。結果大喜!OMG,伺服器開通了日誌! 裡面有資料庫的操作日誌,而且還是sql格式的!!! 我之前沒有接觸過這個東西,但這時它就是我的救命稻草。 我瀏覽了一下,裡面有近一個月的更新記錄,已經足夠了。不過有一個問題,在phpmyadmin裡面看,只能顯示其中一小部份內容,面對10幾w的資料行,想要一個個找出被刪表的資料,太難了。 這時,我想到了可以從伺服器中下載這些檔案,然後得到其中的資料。 說幹就幹,我登入伺服器,搜尋這些二進位制檔案: 上圖中紅圈的就是了 然後將這些檔案一個個匯出成可以閱讀的sql: 這樣將這些二進位制檔案一個個輸出成了正常的sql檔案。 這時,就是要從這些檔案中找到被刪表相關的資料了,於是我寫了個java程式幫我做這個事情:
package com.nerve.sql.reload;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
 
import org.nerve.util.NumberUtil;
 
/**
 * @project: cloudOffice_swing
 * @file: ReloadWorker.java
 * @package: com.nerve.sql.reload
 * @description:
 *    將二進位制日誌匯出的檔案中相應表的操作記錄提出出來
 * @author: 整合顯示卡    
[email protected]
* @date&time: Jan 23, 2014 * @change log: */ public class ReloadWorker { public void read(List<String> orgF, String targetF, String table) throws Exception{ BufferedWriter bw = new BufferedWriter(new FileWriter(targetF, true)); for(String or:orgF){ BufferedReader br = new BufferedReader(new FileReader(or)); String t = null; String t2 = null; table = table.toUpperCase(); while((t=br.readLine())!=null){ t2 = t.toUpperCase(); /* * 如果是update操作,直接提出 */ if(t2.startsWith("UPDATE "+table)){ bw.append(t+";\n"); } /* * 如果是insert語句,因為有一些舊伺服器的資料 * 所以要先執行delete操作 */ else if(t2.startsWith("INSERT INTO "+table)){ String ids = t2.substring(t2.lastIndexOf(",")); bw.append("delete from "+table+" where id="+NumberUtil.toDigital(ids)+";\n"); bw.append(t+";\n"); } /* * sql語句後面都要加 ; ,因為原來沒有,不加的話,在匯入到資料庫時,出錯 */ } br.close(); } bw.flush(); bw.close(); } public static void main(String[] args) throws Exception{ long sd = System.currentTimeMillis(); ReloadWorker w = new ReloadWorker(); List<String> orgs = new ArrayList<String>(); orgs.add("C:/Users/IBM_ADMIN/Desktop/000015.txt"); orgs.add("C:/Users/IBM_ADMIN/Desktop/000016.txt"); orgs.add("C:/Users/IBM_ADMIN/Desktop/000017.txt"); orgs.add("C:/Users/IBM_ADMIN/Desktop/000018.txt"); orgs.add("C:/Users/IBM_ADMIN/Desktop/000019.txt"); String targetS = "C:/Users/IBM_ADMIN/Desktop/000017_sql.txt"; w.read(orgs, targetS, "task"); System.out.println("DONE, on " +(System.currentTimeMillis() - sd)/1000+" s"); } }
得到了彙總的sql檔案後,就匯入到資料庫中。 最後,出一個執行圖:   終於鬆了一口氣。(雖然這次匯入花了5分鐘。。) 最後提醒大家,一定要常備份,謹慎操作啊! ----------------------------------------------------------- 轉載請註明出處:http://blog.csdn.net/ssrc0604hx/article/details/18717983

相關推薦

phpmyadmin恢復過程心驚

話說今天不知道是抽風了還是失魂了,在用phpmyadmin刪除測試資料時,竟然將整個表刪除了: 等程式執行出錯時,才出現整個表都沒有了,而且之前也沒有備份好!這下蛋疼了,這個可是production伺服器,裡面的資料可不能丟啊! 伺服器是linux的,我不是很熟悉,也

利用plsql工具恢復恢復資料

一、恢復誤刪表     1.執行以下sql語句,找到被自己誤刪的資料表對應的object_name;         select * from user_recyclebin t;--檢視被刪掉

一次心驚肉跳的伺服器檔案的恢復過程【轉載、收藏】 一次心驚肉跳的伺服器檔案的恢復過程

一次心驚肉跳的伺服器誤刪檔案的恢復過程 經歷了兩天不懈努力,終於恢復了一次誤操作刪除的生產伺服器資料。對本次事故過程和解決辦法記錄在此,警醒自己,也提示別人莫犯此錯。也希望遇到問題的朋友能找到一絲靈感解決問題。 事故背景 安排一個妹子在一臺生產伺服器上安裝Oracle,妹子

ORACLE 資料恢復

最近在工作中使用ORACLE,一個失誤刪錯了表,當時心急如焚,因為接觸ORACLE時間不長,也不清楚ORACLE的功能, 同事就去找了下恢復的解決辦法,發現ORACLE刪除表後,是換了個名字,躺到了ORALCE的回收站中。         記錄一下使用的語句,以便以後遇到

MongoDB恢復

mongodb mongorestore oplog一、場景描述 公司某工程師執行db.giveget_card.drop(),誤將線上表刪除。 幸好每天都有做備份,這個時候就體現了備份的重要性了,哈哈哈。。。二、模擬故障過程: 備份數據大小:rs_test01:PRIMARY> us

mysqlroot如何恢復root賬戶

mysql誤刪除root後恢復roo賬戶系統:CentOS release 6.5 (Final)內核:2.6.32-431.el6.x86_64MySQL版本:5.5.28-log Source distribution操作步驟:1.停止mysql服務#service mysqld stop2.以安全模式進

SQL Server恢復

watermark orm rop max ack ntc 記錄 exists color SQL Server 完全恢復模式 下恢復誤刪除的表,進行 精準 恢復1. 找出被刪除的表名(無schema,能找到schema的分享下)、object_id、表所在數據庫、刪除人

Oracle資料閃回恢復

今天在做測試時誤刪了一條資料,因為有關聯的原因,所以要想辦法恢復這條資料,在網上找到了這種方法。 1.首先確定要恢復的時間點 select * from XXX      AS OF TIMESTAMP TO_TIMESTAMP('2018-11-13 15:01:37'

oracle資料delete

轉:http://www.cnblogs.com/hqbhonker/p/3977200.html 1.開啟Flash儲存的許可權ALTER TABLE tableName ENABLE row movement ; 2.找到這個表在這個時間點的資料 select * from tabl

Oracle資料庫,怎樣恢復結構和資料

誤刪Oracle資料庫表,恢復表結構及資料 必要條件:Oracle版本必須在10G以上 操作如下: 1.先找到原有表還在資料庫的時間 select timestamp_to_scn(to_timestamp('2017-02-21 09:00',              

小米手機短信怎麽恢復

安卓 ref 模式 get 軟件 三種 看看吧 pan 手機短信 隨著智能機的普及之後,如今的用戶都在使用社交軟件進行信息間的傳遞,很少人再去使用短信了,但並不表示短信就沒有使用,依然有很多重要的信息會通過短信傳遞,如果將那些重要的短信刪除的話要怎麽恢復呢? 

惠普U盤文件了能恢復

  在生活中,我們為了方便數據的儲存,經常會使用到U盤,因為U盤小巧、方便易攜帶,但是U盤的內存也是有限的,每當U盤的空間快滿時,我們就會清理U盤,來釋放空間,有時會不小心誤刪了文件,又是特別重要的文件,怎麽找回呢? 關於恢復U盤中丟失的文件,我建議大家使用專業的數據恢復軟件,比如互盾U盤數據恢復軟件。

安卓手機下載的視頻文件怎麽恢復 手機數據恢復方法

手機現在是越來越普及,功能越來越強大。除了通訊之外現在更多人會用手機來觀看視頻,電影等。在有WiFi的情況下一般都是在線觀看,如果是沒有網的條件下呢?比如在火車上無聊的時候也會有人想到看電視,那麽他們一般都是事先下載好的。有時候會發現下載好的視頻文件誤刪除了,沒有了那該怎麽辦呢?有沒有簡單方法能恢復的?

U盤文件怎麽恢復

U盤文件誤刪怎麽恢復  當我們需要儲存數據的時候,有時候會直接用網盤儲存,有時候會使用到U盤來儲存文件,使用的時候有時會因為直接拔出U盤導致文件丟失,文件丟失怎麽辦呢 當我們不小心將U盤裏的弄丟時,我們可以使用專業的數據恢復軟件對我們U盤刪除的文件恢復,這款軟件就是強力數據恢復軟件。我們只需要使用這款軟

索尼電腦硬盤文件還能恢復

  電腦硬盤中的數據資料被誤刪了,其實也不用擔心,因為現在可以用數據恢復軟件來恢復了,但是有很多人都會說,數據恢復軟件不回復用呀,現在小編來教你吧 想要找回硬盤裏丟失的數據,除了到數據恢復中心外,我們還可以利用數據恢復軟件幫助恢復。經過一段成熟期,現在也有很多專業的數據恢復軟件提供給我們使用,比如:強力

怎麽恢復安卓手機中被清空的照片? 手機照片怎麽恢復

在安卓手機卡頓或下載不了軟件顯示內存不夠的時候,我們大多數人的做法就是將安卓手機還原成出廠設置。這就意味著手機中的照片被全部清空了,那被清空的手機照片還能恢復嗎?我們該怎麽恢復手機中被清空的照片? 借助互盾照片恢復軟件免費版,能有效的恢復安卓手機中被誤清理的照片。操作簡單,電

iPhone手機短信怎麽恢復

多用戶 nes 如果 .html 軟件下載 nbsp line data- 簡單 如今智能手機已經成為我們最離不開的工具了,隨著微信等即時通訊應用的發展普及,似乎手機固有的打電話、短信功能越來越少用了。可是在沒有網的情況下,手機短信的功能就非常強大了。很多用戶就會

利用binlog回復和庫

mysql binlog 利用binlog回復誤刪表和庫查看某個binlog日誌內容,常用有兩種方式:1、 # /usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.0000132、 mysql> sh

raid-6磁盤陣列損壞導致數據丟失的恢復過程圖文教程

服務器 磁盤陣列 raid6 數據恢復 服務器數據恢復 一、故障描述機房突然斷電導致整個存儲癱瘓,加電後存儲依然無法使用。經過用戶方工程師診斷後認為是斷電導致存儲陣列損壞。整個存儲是由12塊日立硬盤(3T SAS硬盤)組成的RAID-6磁盤陣列,被分成一個卷,分配給幾臺Vmware的ESX

mysql資料快速回滾

binlog2sql快速回滾 首先,確認你的MySQL server開啟了binlog,設定了以下引數: [mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log max_binlog_size = 1000M binlog-