我們開發階段,經常要有一些測試數據在我們測試相關功能的時候,是十分必要的.後期由於引入了正式的數據,但是測試數據並沒有被及時清理.這個時候由於一個誤刪除,導致一些正式的數據被刪除,由此,一場追找數據的過程就開始了…
解決方案:
- 通過每天備份的日誌進行查找,但是很不幸的是,我們由於沒有正式上線,所以數據庫的備份腳本一直沒有執行中,故此路不通
- 藉助強大的mysqlbinlog工具了
一、binlog 介紹
服務器的二進制日誌記錄着該數據庫的所有增刪改的操作日誌(前提是要在自己的服務器上開啓binlog),還包括了這些操作的執行時間。爲了顯示這些二進制內容,我們可以使用mysqlbinlog命令來查看。
用途:
- 恢復數據庫
- 主從同步
mysqlbinlog 命令的語法格式:
mysqlbinlog mysql-bin.0000xx | mysql -u用戶名 -p密碼 數據庫名
#常用參數選項解釋:
--start-position=875 起始pos點
--stop-position=954 結束pos點
--start-datetime="2016-9-25 22:01:08" 起始時間點
--stop-datetime="2019-9-25 22:09:46" 結束時間點
--database=zyyshop 指定只恢復zyyshop數據庫(一臺主機上往往有多個數據庫,只限本地log日誌)
--------------------------------------------------------
不常用選項:
-u --user=name 連接到遠程主機的用戶名
-p --password[=name] 連接到遠程主機的密碼
-h --host=name 從遠程主機上獲取binlog日誌
--read-from-remote-server 從某個MySQL服務器上讀取binlog日誌
二、備份恢復
第一步: 保證mysql已經開啓binlog,查看binklog是否開啓
show variables like '%log_bin%';
值爲OFF,需開啓,值爲ON,已開啓。
如果沒有開啓binlog,也沒有預先生成回滾SQL,那可能真的無法快速回滾了。對存放重要業務數據的MySQL,強烈建議開啓binlog。
查看binlog存放日誌文件目錄
show variables like '%datadir%';
第二步: 進入binlog文件目錄,找出日誌文件
第三步: 切換到mysqlbinlog目錄(具體位置在mysql安裝目錄**/mysql/bin/下)
第四步: 通過mysqlbinlog工具命令查看數據庫增刪改查記錄(必須切換到mysqlbinlog目錄纔有效)
#查詢2020-01-01 08:00:00到2020-01-09 20:00:00 數據庫爲 dataweb 的操作日誌,輸入如下命令將數據寫入到一個備用的txt文件中
mysqlbinlog --no-defaults --database=dataweb --start-datetime="2020-01-01 08:00:00" --stop-datetime="2020-01-09 20:00:00" /data/mysql/mysql-bin.000008 > dataweb.txt
#查詢2020-01-01 08:00:00到2020-01-09 20:00:00 數據庫爲 dataweb 的操作日誌,並輸出到屏幕上
mysqlbinlog --no-defaults --database=dataweb --start-datetime="2020-01-01 08:00:00" --stop-datetime="2020-01-09 20:00:00" /data/mysql/mysql-bin.000008 |more
#查詢2020-01-01 08:00:00到2020-01-09 20:00:00 數據庫爲 dataweb 的操作日誌,並且過濾出 只包括 rf_classify 表數據的操作記錄 ,輸入如下命令將數據寫入到一個備用的txt文件中
mysqlbinlog --no-defaults --database=youxi --start-datetime="2020-01-01 08:00:00" --stop-datetime="2020-01-09 20:00:00" /data/mysql/mysql-bin.000008 | grep rf_classify > classify.txt
第五步: 利用第四步輸出的sql語句或者txt文本進行語句過濾,重新插入數據或更新數據