MySQL 誤操作 數據恢復

binlog介紹

  1. binlog,即二進制日誌,它記錄了數據庫上的所有改變.
  2. SQL語句執行結束時,將在binlog的末尾寫入一條記錄,同時通知語句解析器,語句執行完畢.
  3. binlog格式
  • 基於語句,無法保證所有語句都在從庫執行成功,比如update … limit 1;
  • 基於行,將每一次改動記爲binlog中的一行.在執行一個特別複雜的update或者delete操作時,基於行的格式會有優勢.

是否啓用了日誌
mysql>show variables like ‘log_bin’;

當前的日誌
mysql> show master status;

看二進制日誌文件用mysqlbinlog
shell>mysqlbinlog -v mail-bin.000001
或者shell>mysqlbinlog -v mail-bin.000001 | tail

binglog的類型

binlog的格式有三種,這也反應了mysql的複製技術:基於SQL語句的複製(statement-based replication, SBR),基於行的複製(row-based replication, RBR),混合模式複製(mixed-based replication, MBR)。相應地,binlog的格式也有三種:STATEMENT,ROW,MIXED。

mysql>showvariables like ‘binlog_format’    #查看binlog的格式

mysqlbinlog 恢復

不同的mysql mysqlbinlog版本不一樣,需要獲取到進程自身的mysqlbinlog

  1. 只查看第一個binlog文件的內容
    show binlog events;
  2. 查看指定binlog文件的內容
    show binlog events in 'mysql-bin.000002';
  3. 查看當前正在寫入的binlog文件(當前數據庫使用的binlog)
    show master status;
  4. 獲取binlog文件列表
    show binary logs;
  5. 查看所有binlog日誌列表
    show master logs;
  6. 清空binlog日誌文件
    reset master
  7. 刷新 log 日誌,重新生成一個新編號的 binlog 日誌文件
    flush logs;

導出 binlog

mysqlbinlog -v binlog.000003 > /home/ryan_binlog.sql

記得要加上 -v,不然導出時,無法看到修改的SQL語句,也就無法進行定位,

-v 選項可以從行事件中重建僞 SQL 語句。

導入 binlog,恢復數據

基於開始/結束時間

mysqlbinlog binlog.000003 --start-datetime=2021-01-20 10:00:00 --stop-datetime=2021-01-23 10:00:00 -v | mysql -uroot -p

基於 pos 位點

mysqlbinlog binlog.000003 --start-position=528 --stop-position=1778 -v | mysql -uroot -p

 

https://dev.mysql.com/doc/internals/en/binary-log.html
https://www.jianshu.com/p/c16686b35807
http://www.ttlsa.com/mysql/super-useful-mysqlbinlog-command/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章