恢復mysql數據庫誤刪數據


前言

某一天,天朗氣清;突然傳來消息:數據庫被刪庫了!這簡直不亞於8級大地震呀;一找原因,服務器宕機造成了數據庫數據丟失。於是,通過日志恢復數據的救援開始了。

正文

在數據庫開啟binlog功能

找到/etc/my.cnf並編輯(沒有my.cnf的時候就找my.ini);添加
 log-bin=mysql-bin 
 expire_logs_days=7(日志保留天數)
然后重啟mysql

注意:log_bin是生成的bin-log的文件名,后綴則是6位數字的自增編碼,從000001開始:

mysql_bin.000001 
mysql_bin.000002 
...... 

操作日志

1、查看日志文件:
mysql> show master logs;
+------------------+--------------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 | 120 |
| mysql-bin.000002 | 4249 |
| mysql-bin.000003 | 1110 |
+------------------+--------------+

2、查看最后一個binlog日志的編號名稱(就是最后一個操作事件的值):
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      1110 | | | |
+------------------+----------+--------------+------------------+-------------------+

3、產生一個新的日志文件
mysql> flush logs; 
Query OK, 0 rows affected (0.01 sec)
mysql> show master status;
+--------------+---------------+
|  Log_name   | File_size |
+--------------+---------------+
| mysql-bin.000004 |      106 |
+-----------------+------------+
4 rows in set (0.01 sec)

4、刪除所有binlog日志,重新記錄
mysql> reset master;
Query OK, 0 rows affected (0.01 sec)
mysql> show master status;
+--------------+---------------+
|  Log_name   | File_size |
+--------------+---------------+
| mysql-bin.000001 |      106 |
+-----------------+------------+
1 rows in set (0.01 sec)

恢復數據

恢復數據的方式有很多種,可以根據自己具體的情況來選擇用哪種。

1、如果想全部恢復,先執行之前的備份恢復,再執行自備份后產生的二進制日志文件
    mysql localhost mysql-bin.000001 | mysql -uroot -p( 這樣數據庫就可以恢復到刪除數據前的狀態)

2、根據時間點來恢復,如果確認被刪的時間點為2019-03-25 09:00:00,那么就可以如下
     mysqlbinlog --stop-date='2019-03-25 8:59:59' mysql-bin.000001 | mysql -uroot -p  然后跳過數據被刪的時間點,繼續執行后面的binlog  # mysqlbinlog --start-date='2019-03-25 09:01:00' mysql-bin.000001 | mysql -uroot -p  
     其中--stop-date='2019-03-25 08:59:59' 和--start-date='2019-03-25 09:01:00' 

3、如果知道兩個時間點,就按如下操作
   mysqlbinlog --start-datetime="2019-03-25 10:30:30" --stop-datetime="2019-03-25 11:10:10" mysql-bin.000001 | mysql -u root -p

4、通過查看日志文件信息確認(假如操作點為6200-6300)
    mysqlbinlog --stop-position=6200 mysql-bin.000001 | mysql -uroot -p 
    mysqlbinlog --start-position=6300 mysql-bin.000001 | mysql -uroot -p

注意

因為mysql的binlog是二進制文件,一定要用mysqlbinlog命令才可以操作。

> 舉例,導出sql文件:# mysqlbinlog  mysql-bin.000001 >test.sql 

后續

通過這一次經歷,知道了以后一定要做好數據庫的備份;這很重要!


免責聲明!

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



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