一、环境设置
1.mysql配置中首先要开启binlog,如没开启,在my.conf 下配置如下参数:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 100M
binlog-format = row
ps:另外需保持日志目录权限mysql:mysql权限可写,不然配置重新mysql后会报错
2.安装开源工具binlog2sql。binlog2sql是一款简单易用的binlog解析工具,其中一个功能就是生成回滚SQL。
git clone https://github.com/danfengcao/binlog2sql.git
pip install -r requirements.txt
运行pip命令报错的:
请运行命令安装:
apt-get install python-pip
成功后再运行
pip install -r requirements.txt
这样,环境已经设置成功了。
二、恢复数据
1.我在2017年1月23号11点左右误删数据库test中的整个表tags的数据。
2.登录mysql,查看目前的binlog文件
最新的binlog文件是mysql-bin.000001,我们再定位误操作SQL的binlog位置。误操作人只能知道大致的误操作时间,我们根据大致时间过滤数据。运行命令:
sudo python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'root' -dtest -ttags --start-file='mysql-bin.000001' --start-datetime='2017-01-23 11:00:00' --stop-datetime='2017-01-23 11:50:00'
结果输出:
3.然后我们得到要恢复的数据是在日志的4-365行,实际情况根据自己需要恢复那一伙,运行命令:
sudo sh -c "python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'root' -dtest -ttags --start-file='mysql-bin.000001' --start-position=4 --stop-position=365 -B > rollback1.sql | cat"
最后,我打开生成后的rollback1.sql文件看看:
sql恢复成功!