赞
踩
binlog2sql是大众点评开源的一个 MySQL 闪回工具。可以实现数据的回滚。
开始之前,先说说闪回。我们都知道 MySQL binlog 以 event 为单位,记录数据库的变更信息,这些信息能够帮助我们重现这之间的所有变化,也就是所谓的闪回。
binlog 有三种可选的格式:
利用 binlog 做闪回,需要将 binlog 格式设置为 row,因为我们需要最详尽的信息来确定操作之后数据不会出错。
既然 binlog 以 event 形式记录了所有的变更信息,那么我们把需要回滚的 event,从后往前回滚回去即可。
回滚操作:
- git clone https://github.com/danfengcao/binlog2sql.git
- cd binlog2sql
- pip install -r requirements.txt
- MySQL server必须设置以下参数:
- [mysqld]
- server_id = 1
- log_bin =mysql-bin.log
- max_binlog_size = 1G
- binlog_format = row
- binlog_row_image = full
案例:先删除mysql库下test表的数据,然后通过回滚还原。
需要创建一个闪回用户,该用户的最小权限如下:
- GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO
-
- #select:需要读取server端information_schema.COLUMNS表,获取表结构的元信息,拼接成可视化的sql语句
- #replication client:两个权限都可以,需要执行'SHOW MASTER STATUS', 获取server端的binlog列表
- #replication slave:通过BINLOG_DUMP协议获取binlog内容的权限
然后就可以恢复了,首先确认使用的哪一个binlog文件
show master status;
解析标准sql
python binlog2sql.py -P3306 -utest -p123456 -dmysql -ttest --start-file='mysql-bin.000002'
解析回滚sql
python binlog2sql.py -P3306 -utest -p123456 -dmysql -ttest --start-file='mysql-bin.000002' --start-position=4 --stop-position=433 -B > test_rollback.sql
最后应用回滚sql,完成恢复。
mysql>source /usr/local/bin/binlog2sql/binlog2sql/test_rollback.sql
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。