結合備份+binlog恢復數據。
場景:昨天晚上做了全備,今天上午用戶不小心誤刪除某張表。
解決方案:不建議在原生產環境直接恢復,建議在另一臺機器恢復全庫+日志,然后導入到生產環境。
1) 創建表
select?now();? create?table?itpuxfg1?( `id`?int(10)?unsigned?not?null?auto_increment, `name`?varchar(16)?not?null, `sex`?enum('m','w')?not?null?default?'m', `age`?tinyint(3)?unsigned?not?null, primary?key?(`id`) )?engine=innodb?default?charset=utf8; insert?into?itpux.itpuxfg1(`name`,`sex`,`age`)?values ('itpux1','w',21), ('itpux2','m',22), ('itpux3','w',23), ('itpux4','m',24), ('itpux5','w',25); commit; select?*?from?itpux.itpuxfg1;
2)做備份 邏輯備份
mysqldump?-uroot?-p?-F?-R?--all-databases?>?alldb_bak.sql
3)?模擬上午的業務操作
show?master?status;?--?154 select?now();?--?2018-04-27?06:27:40 update?itpux.itpuxfg1?set?name='itpux04'?where?id=4; commit; select?*?from?itpux.itpuxfg1; select?now();?--?2018-04-27?06:28:03 update?itpux.itpuxfg1?set?name='itpux05'?where?id=5; commit; select?*?from?itpux.itpuxfg1; show?master?status;?--?890
4) 中午的誤刪除
select?now();?--?2018-04-27?06:29:00 drop?table?itpuxfg1; select?*?from?itpux.itpuxfg1; show?master?status;?--?1078
5) 在另一臺機器恢復(我的案例在本地,生產不要在本地)
show master status;通過這個文件名,向前備份需要的binlog
–記得拷貝binlog日志
show binlog events in ‘itpuxdb-binlog.000003’;
mysqlbinlog itpuxdb-binlog.000003 |grep “DROP TABLE”
mysqlbinlog itpuxdb-binlog.000003 |grep “itpuxfg1″(注意日志 兩個不同的版本 請區分)
演示:
把itpux 庫刪除drop database itpux;
恢復:
先創建數據庫:
mysql> create database itpux default character set utf8; — 如果不清楚條件,建議在原庫查詢show create database mysql;
mysql -uroot -p -o itpux
— 恢復后,查不到今天上午更新的記錄
mysql> show tables;
— 通過binlog 日志增量恢復表刪除之前
[root@mysqldb binlog]# mysqlbinlog??-vv –start-position=219??–stop-position=913 –database=itpux itpuxdb-binlog.000001 >sa.sql
— 恢復這張表到原庫里面
先從另外的庫里備份這張表
mysqldump -uroot -p itpux itpuxfg1 > sa.sql
再把生產庫,直接恢復(原來的庫中的表是已經被刪除掉了)
mysql -uroot -p itpux
mysql> select * from itpuxfg1;
1)恢復到這張表到源庫里
mysqldump -uroot -p itpux itpuxfg1 >sa.sql
?相關推薦: