mysql如何找回誤刪除數據

mysql找回誤刪除數據的方法:首先找到binlog中錯誤的語句;然后恢復binlog日志;最后恢復到數據庫,代碼為【# mysql -uroot -p -f ids

mysql如何找回誤刪除數據

mysql找回誤刪除數據的方法:

1、找到binlog

恢復數據的前提是必須開啟Mysql的binlog日志,如果binlog日志沒開啟,請忽略此篇文檔。binlog日志是否開啟可以查看Mysql配置文件。日志位置一般在/var/lib/mysql目錄或者編譯安裝的date目錄下。也可登錄Mysql用命令查看。

#?cat?/etc/my.cnf log_bin=mysql-bin #?mysql?-uroot?-p Enter?password: mysql>?show?variables?like'log_bin%'; +---------------------------------+--------------------------------------------------+ |?Variable_name???????????????????|?Value????????????????????????????????????????????| +---------------------------------+--------------------------------------------------+ |?log_bin?????????????????????????|?ON???????????????????????????????????????????????| |?log_bin_basename????????????????|?/home/programs/mysql-5.6.26/data/mysql-bin???????| |?log_bin_index???????????????????|?/home/programs/mysql-5.6.26/data/mysql-bin.index?| |?log_bin_trust_function_creators?|?OFF??????????????????????????????????????????????| |?log_bin_use_v1_row_events???????|?OFF??????????????????????????????????????????????| +---------------------------------+--------------------------------------------------+ 5?rows?in?set?(0.00?sec) #?ll?/home/programs/mysql-5.6.26/data/mysql-bin* -rw-rw----?1?mysql?mysql?343629748?Oct?13?22:09?/home/programs/mysql-5.6.26/data/mysql-bin.000001 -rw-rw----?1?mysql?mysql????????19?Sep?23?17:11?/home/programs/mysql-5.6.26/data/mysql-bin.index

如果有多個binlog日志也可以在Mysql命令行下查看當前binlog、切割binlog日志。切割完成binlog再次查看就會看到新的日志寫入到新的binlog文件中。

mysql>?show?master?status; +------------------+-----------+--------------+------------------+-------------------+ |?File?????????????|?Position??|?Binlog_Do_DB?|?Binlog_Ignore_DB?|?Executed_Gtid_Set?| +------------------+-----------+--------------+------------------+-------------------+ |?mysql-bin.000001?|?343629748?|??????????????|??????????????????|???????????????????| +------------------+-----------+--------------+------------------+-------------------+ 1?row?in?set?(0.00?sec) mysql>?flush?logs; Query?OK,?0?rows?affected?(0.01?sec)

2、找到binlog中錯誤的語句

可以binlog日志中找到錯誤語句執行的時間點,分別恢復錯誤語句前后的binlog日志為sql。也可以跳過此步,直接恢復整個binlog日志為sql,然后打開sql文件,刪除錯誤語句。

#?sudo?mysqlbinlog?--base64-output=DECODE-ROWS?-v?-d?ids?mysql-bin.000001?|?grep?--ignore-case?-A3?-B4?'錯誤的sql語句'

3、恢復binlog日志

通過mysqlbinlog命令直接恢復binlog日志為sql腳本,可以指定開始和結束時間。如果從上次備份(建議備份的同時刷新binlog日志)截至到恢復時間產生多個binlog日志,按從小到大的順序分別導出成sql再順序導入到數據庫。

#?sudo?mysqlbinlog?--base64-output=DECODE-ROWS?-v?-d?ids?--start-datetime?'2016-10-11?15:22:53'?mysql-bin.000001?>?/home/stack/data.sql

上面命令中用-d ids指定要恢復數據庫,如果要恢復表級別的數據,導出成sql后再進行過濾grep即可。

#?more?data.sql?|?grep?--ignore-case?-E?'insert|update|delete'?|?grep?table

4、恢復到數據庫

恢復數據時,可能會有重復數據的報錯,建議用-f參數忽略。

#?mysql?-uroot?-p?-f?ids?<blockquote><p><strong>更多相關免費學習推薦:</strong><a href="https://www.php.cn/course/list/51.html" target="_blank"><strong>mysql教程</strong></a><strong>(視頻)</strong></p></blockquote>

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享