MySQL誤操作刪除后,怎么恢復數據?


MySQL誤操作刪除后,怎么恢復數據?
登陸查數據庫
mysql> select * from abc.stad;
+----+-----------+
| id | name |
+----+-----------+
| 1 | abc1 |
| 2 | abc2 |
+----+-----------+

0點全量備份
[root@M ~]# mkdir /opt/backup
[root@M ~]# mysqldump -uroot -p123456 -F -B --master-data=2 abc|gzip >/opt/backup/quanbei_$(date +%F).sql.gz
[root@M ~]# ll /opt/backup/quanbei_2018-11-20.sql.gz
-rw-r--r--. 1 root root 942 Nov 20 11:08 /opt/backup/quanbei_2018-11-20.sql.gz

寫入數據
mysql> insert into abc.stad(name) values('abc123');
mysql> insert into abc.stad(name) values('abc134');
mysql> select * from stad;
+----+-----------+
| id | name |
+----+-----------+
| 1 | abc1 |
| 2 | abc2 |
| 3 | abc123 |
| 4 | abc134 |
+----+-----------+

模擬誤操作,把庫刪除
mysql> drop database abc;

發現故障,排查問題檢查全備份
[root@M ~]# ll /opt/backup/quanbei_2018-11-20.sql.gz
-rw-r--r--. 1 root root 942 Nov 20 11:08 /opt/backup/quanbei_2018-11-20.sql.gz
[root@M ~]# cd /opt/backup/
[root@M backup]# gzip -d quanbei_2018-11-20.sql.gz
[root@M backup]# ll
-rw-r--r--. 1 root root 2776 Nov 20 11:08 quanbei_2018-11-20.sql
[root@M backup]# grep -i "CHANGE" quanbei_2018-11-20.sql #檢查mysqlbinlog確認
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000017', MASTER_LOG_POS=120;

檢查增量的binlog
[root@M backup]# ll /var/lib/mysql/mysql-bin.000017
-rw-rw----. 1 mysql mysql 789 Nov 20 11:13 /var/lib/mysql/mysql-bin.000017

刷新binlog,可以確認恢復的目標,只需要回復mysql-bin.000017即可!
[root@M ~]# mysqladmin -uroot -p123456 flush-logs;
[root@M backup]# ll /var/lib/mysql/
-rw-rw----. 1 mysql mysql 656137 Nov 20 11:06 mysql-bin.000015
-rw-rw----. 1 mysql mysql 167 Nov 20 11:08 mysql-bin.000016
-rw-rw----. 1 mysql mysql 836 Nov 20 11:22 mysql-bin.000017
-rw-rw----. 1 mysql mysql 120 Nov 20 11:22 mysql-bin.000018

把binlog拷貝至其他地方,方便操作,保留binlog
[root@M backup]# cp /var/lib/mysql/mysql-bin.000017 /opt/backup/
[root@M backup]# ll /opt/backup/
total 8
-rw-r-----. 1 root root 836 Nov 20 11:24 mysql-bin.000017
-rw-r--r--. 1 root root 2776 Nov 20 11:08 quanbei_2018-11-20.sql

整理匯總binlog,刪除不需要的sql語句
[root@M backup]# mysqlbinlog /var/lib/mysql/mysql-bin.000017 >bin.sql
[root@M backup]# vim bin.sql
drop database abc #把這一行的數據刪除,不然就白恢復了

對外不寫入的情況下:
[root@M backup]# mysql -uroot -p123456 <quanbei_2018-11-20.sql #恢復全備份
[root@M backup]# mysql -uroot -p123456 abc <bin.sql #恢復增量備份

查看數據是否恢復成功!
mysql> select * from abc.stad;
+----+-----------+
| id | name |
+----+-----------+
| 1 | abc1 |
| 2 | abc2 |
| 3 | abc123 |
| 4 | abc134 |
+----+-----------+

 確認完畢,恢復成功!!!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM