Mysql 的復原操作測試(使用工具binlog2sql):
復原操作:
- 對于 delete 操作,我們從 binlog 提取出 delete 資訊,反向生成 insert 復原語句;
- 對于 insert 操作,反向生成 delete 復原語句;
- 對于 update 操作,根據資訊生成反向的 update 語句;
Mysql的配置要開啟以下選項:
[mysqld]
server_id = 1
log_bin = /usr/local/mysql/data/mysql-bin.log
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full
在閃回的時候必須啟動 MySQL 服務,因為它是通過 BINLOG_DUMP 協定來擷取 binlog 内容,需要讀取server端 information_schema.COLUMNS 表,來擷取表結構的元資訊,才能拼接成 SQL 語句。是以需要給使用者提供的最小權限如下
測試中發現,flashback 模式隻支援 DML,DDL 不會輸出;而且 flashback 模式下,一次性處理的 binlog 不宜過大,不能超過記憶體大小(有待優化)。
DDL 語句,在整個測試過程中都是無法被復原的
解析出标準的SQL:
python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'123456' -d test --start-file='mysql-bin.000019'
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCM581dvRWYoNHLwEzX5xCMx8FesU2cfdGLwATMfRHLGZkRGZkRfJ3bs92YskmNhVTYykVNQJVMRhXVEF1X0hXZ0xiNx8VZ6l2cssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4IzM3UTMyEDO0QTNwQTNx8CX2IDMxgTMwIzLcNXZnFWbp9CXvwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
根據标準的SQL語句中的pos點,解析出自己所需的復原SQL。
python binlog2sql.py --flashback -h127.0.0.1 -P3306 -uroot -p'123456' -dtest --start-file='mysql-bin.000021' --start-position=94591569 --stop-position=94591993