国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql 找回誤刪表的數據方法(必看)

2024-07-24 13:12:50
字體:
來源:轉載
供稿:網友

有備份的話很簡單,只需要生成一個最近備份的數據 然后用mysqlbinlog找回備份時間點之后的數據 再恢復到現網即可。

要是沒有備份 可能就會比較麻煩,找回數據的成本也是非常之高的.

下面介紹下 mysqlbinlog找回備份時間點之后的數據的辦法:

做個簡單的實驗,將mysql的表數據刪除之后,然后用mysqlbinlog 找回剛才刪除的表的數據。

app表的創建時間和數據的插入: 2013-02-04 10:00:00

原理: mysqlbinlog

前提: mysql開啟了bin log日志

測試刪除之前:

mysql> show tables;+-----------------------+| Tables_in_report_sina |+-----------------------+| app     || test     |+-----------------------+mysql> select now();+---------------------+| now()    |+---------------------+| 2013-02-04 11:45:44 |+---------------------+1 row in set (0.01 sec)mysql> select count(1) from app;+----------+| count(1) |+----------+|  10 |+----------+1 row in set (0.01 sec)

 

開始刪除數據:

mysql> delete from app where id =1;Query OK, 1 row affected (0.00 sec)mysql> mysql> delete from app where id <6;Query OK, 4 rows affected (0.01 sec)mysql> select count(1) from app;+----------+| count(1) |+----------+|  5 |+----------+1 row in set (0.00 sec) mysql> select now();+---------------------+| now()    |+---------------------+| 2013-02-04 12:08:45 |+---------------------+

開始找回數據:

1.找到bin log的位置:

/app/mysql/log-rw-rw---- 1 mysql mysql 17K Feb 4 11:43 alert.log-rw-rw---- 1 mysql mysql 1.0K Nov 1 14:52 master-bin.000001-rw-rw---- 1 mysql mysql 126 Dec 25 14:00 master-bin.000002-rw-rw---- 1 mysql mysql 126 Dec 25 14:02 master-bin.000003-rw-rw---- 1 mysql mysql 126 Dec 25 14:02 master-bin.000004-rw-rw---- 1 mysql mysql 107 Dec 25 14:02 master-bin.000005-rw-rw---- 1 mysql mysql 13K Feb 4 12:02 master-bin.000006

可以看到 最近被修改的bin log 只有 master-bin.000006

(要是誤刪除跨越了好幾個bin log 找回數據的時候就必須一個個的bin log日志去找回了)

將這一段時間所有執行的sql語句存入到 待恢復的 sql文件中。

mysqlbinlog --start-date='2013-02-04 10:00:00' --stop-date='2013-02-04 12:08:45' /app/mysql/log/master-bin.000006 >/app/mysql/mysql_restore_20130204.sql

當然在現網環境下 ,這個時間可能沒那么的準確,并且還有其他事務sql語句的干擾。

創建臨時數據庫

create database for_bak;

導出當前數據庫中被誤刪的表 app

mysqldump -uroot -ppwd my_db app > /app/mysql/app.sql

將現在的數據導入到臨時表:

mysql -root -ppwd for_bak < /app/mysql/app.sql

我們再來看下 /app/mysql/mysql_restore_20130204.sql的部分內容: (可以看到罪惡的delete 語句)

SET TIMESTAMP=1359949544/*!*/;BEGIN/*!*/;# at 12878#130204 11:45:44 server id 1 end_log_pos 12975 Query thread_id=5 exec_time=974 error_code=0SET TIMESTAMP=1359949544/*!*/;delete from app where id =1/*!*/;# at 12975#130204 11:45:44 server id 1 end_log_pos 13002 Xid = 106COMMIT/*!*/;# at 13002#130204 11:45:44 server id 1 end_log_pos 13077 Query thread_id=5 exec_time=1013 error_code=0SET TIMESTAMP=1359949544/*!*/;BEGIN/*!*/;# at 13077#130204 11:45:44 server id 1 end_log_pos 13175 Query thread_id=5 exec_time=1013 error_code=0SET TIMESTAMP=1359949544/*!*/;delete from app where id <6/*!*/;# at 13175#130204 11:45:44 server id 1 end_log_pos 13202 Xid = 107COMMIT/*!*/;DELIMITER ;# End of log file

可以看到 數據是什么時間點刪除的 。 具體的時間也可以用 select from_unixtime(1359949544); 來查詢

令人欣慰的是 create table app 語句和 insert 的語句也在這個文件之中。 在手工去掉 delete 語句之后 在臨時庫里面進行 source mysqlbinlog找回來的sql文件

就將app恢復到被刪除之前的狀態了。 然后將臨時庫的數據導入到現網數據(這個不是這篇文章的重點了)。

要是沒有備份,要找回所有app表相關的數據 那可能就非常的麻煩了 尤其是 binlog文件非常多 而且每個都比較的大。

那樣的話也只有從app的建立到現在 用mysqlbinlog來逐個的找回與app表相關dml操作的sql記錄,然后整合恢復數據。

我想這種情況一般比較的少。雖然麻煩,但是也不是不能恢復。

以上這篇mysql 找回誤刪表的數據方法(必看)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉树县| 东乡| 常熟市| 汪清县| 汨罗市| 台北市| 楚雄市| 成都市| 霍林郭勒市| 滕州市| 宜兰县| 南涧| 连山| 上饶县| 绵竹市| 沂南县| 台州市| 彰武县| 乌兰察布市| 石河子市| 崇礼县| 钟山县| 金平| 洞头县| 宣威市| 宝山区| 阳东县| 阜康市| 东海县| 德钦县| 肇州县| 万州区| 荃湾区| 白玉县| 抚顺市| 沙坪坝区| 涿鹿县| 滁州市| 商水县| 同江市| 诸暨市|