記錄使用mysqlbinlog回滾日誌
這兩天線上資料被誤刪除為了回滾折騰了兩天終於搞定,其中用到了mysql的binlog以此記錄一下。
之前沒有搞過mysql的mysqlbinlog查看了很多文件但是多數為簡單的教程,雖然有用但是還是相對疑惑。因此自己記錄一下希望有用。
mysqlbinlog是mysql自帶的回滾資料的機制,預設是不開啟的需要手動開啟。
一、開啟mysql-binlog日誌
在mysql配置檔案my.cnf加上如下配置
[mysqld]
log-bin=mysql-bin
重啟mysql
service mysqld restart
這裡有一點有可能你是使用的阿里雲的rds服務,那樣的話應該是已經預設開啟了binlog,可以直接登入阿里雲平臺下載binlog檔案。不過也可以登入進行檢視到底是否已經開啟了。不過這個貌似只要你許可權夠用
二、顯示是否已經開啟了binlog命令
show variables like ‘log_bin’
顯示on表示已經開啟了binlog
三、獲取檔案進行恢復
1、直接進行恢復
mysqlbinlog /usr/local/mysql/data/binlog.123456 | mysql -u root -p
2、按位置進行恢復 主要引數[–stop-position –start-position]
mysqlbinlog –stop-position=368312 –start-position=368315 /usr/local/mysql/data/binlog.123456 | mysql -u root -p
這裡的位置可以通過讀取binlog檔案進行檢視,不過這個也必須自己知道進行了那些操作。後面說如果看到的檔案都是亂碼或者看不到真正sql的問題
3、按時間點進行恢復 主要引數 [–stop-datetime –start-datetime]
mysqlbinlog –stop-datetime=”2005-04-20 9:59:59” –start-datetime=”2005-04-20 10:01:00” /usr/local/mysql/data/binlog.123456 | mysql -u root -p
時間點恢復跟位置恢復道理一樣,也必須知道具體操作的時間和要恢復到什麼時間
4、不同的方式進行恢復
1、如果是登入到了mysql並且binlog也是在一臺伺服器上切一般binlog的目錄會在mysql安裝目錄下data檔案下那麼就可以直接進行恢復
這種情況可以直接在mysql下執行命令
2、如果是隻拿到了binlog檔案,並且是線下的伺服器需要先嚐試資料正確後再匯入生產的
這種情況可以先把binlog檔案輸出到你制定的sql檔案如:
mysqlbinlog /usr/local/mysql/data/binlog.123456 > /tmp/mysql.sql
這樣的輸出有可能是看不到任何有價值的sql如果想看到標準的sql可以使用
mysqlbinlog –base64-output=DECODE-ROWS -v /usr/local/mysql/data/binlog.123456 > /tmp/mysql.sql
上面的情況也可能得到的sql不是想要的需要進行替換,那麼如果資料量少手動替換@[email protected]就可以如果比較多建議使用開源工具mysql2binlog github地址:https://github.com/danfengcao/binlog2sql
最後一點線上資料一定要當心,雖然mysql有binlog機制,但還是希望人儘量少用它!