Mysql實現基於時間點的恢復

前提:
mysql必須打開二進制日誌功能
二進制日誌會記錄 DML DCL DDL

[mysqld]
log-bin=/data/mysql-bin

時間點1 Thu Dec 16 13:53:54 CST 2010
建立一個表
插入一些數據
mysql> use test;
mysql> create table upl (id int , user varchar(16));
mysql> insert into upl values (1,’tom’),(2,’mary’),(3,’bean’);

時間點2 Thu Dec 16 13:55:47 CST 2010
刪除一些數據(誤操作)
mysql> delete from upl where id=2;

時間3 Thu Dec 16 13:56:26 CST 2010
增加一些新數據
mysql> insert into upl values (4,’moto’),(5,’nokia’);

恢復需求:保留所有的數據,包括時間1,2,3的數據

強烈建議:做任何恢復之前都給數據庫做一個完整備份

開始恢復之前刷新日誌
mysql> flush logs;

mysql> show master status \G;
*************************** 1. row ***************************
File: mysql-bin.000002 《--表示數據庫使用該日誌文件記錄
Position: 106
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

模擬實驗就可以直接把原來的數據表刪除,真實情況一般都是把要恢復的數據恢復到一個臨時的數據庫
mysql> drop table upl;

讀取誤操作之前的語句
# /usr/local/mysql/bin/mysqlbinlog –stop-date=’2010-12-16 13:55:47′ /data/mysql-bin.000001 | mysql -u root -p123 -S /data/mysql.sock

跳過誤操作的時間點,讀取二進制日誌文件 提取時間3的語句
# /usr/local/mysql/bin/mysqlbinlog –start-date=’2010-12-16 13:56:26′ /data/mysql-bin.000001 | mysql -u root -p123 -S /data/mysql.sock

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章