binlog介紹
- binlog,即二進制日誌,它記錄了數據庫上的所有改變.
- SQL語句執行結束時,將在binlog的末尾寫入一條記錄,同時通知語句解析器,語句執行完畢.
- 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
- 只查看第一個binlog文件的內容
show binlog events; - 查看指定binlog文件的內容
show binlog events in 'mysql-bin.000002'
; - 查看當前正在寫入的binlog文件(當前數據庫使用的binlog)
show master status
; - 獲取binlog文件列表
show binary logs
; - 查看所有binlog日誌列表
show master logs; - 清空binlog日誌文件
reset master - 刷新 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/