在使用binlog2sql过程中发现在linux系统中还是很简单的,但是在windows中还是有不少问题让人非常困惑,这篇文章主要是为了做个总结。
一、执行命令如下:
1.进入数据库日志文件所在目录,使用如下命令查看需要回滚的sql语句。
D:\MySQL\MySQL Server 5.6\data>python D:\tool1\binlog2sql\binlog2sql\binlog2sql.py -h 127.0.0.1 -P 3306 -u root -p password -d schema -t tablename
--start-file=mysql-bin.000452 --start-datetime="2022-06-16 08:15:31" --stop-datetime="2022-06-16 18:16:00"
2.使用如下命令生成回滚所需要的执行的语句,后面多了-B参数。
D:\MySQL\MySQL Server 5.6\data>python D:\tool1\binlog2sql\binlog2sql\binlog2sql.py -h 127.0.0.1 -P 3306 -u root -p password -d schema -t tablename
--start-file=mysql-bin.000452 --start-datetime="2022-06-16 08:15:31" --stop-datetime="2022-06-16 18:16:00" -B
3.把sql语句导出到指定sql文件。
D:\MySQL\MySQL Server 5.6\data>python D:\tool1\binlog2sql\binlog2sql\binlog2sql.py -h 127.0.0.1 -P 3306 -u root -p password -d schema -t tablename
--start-file=mysql-bin.000452 --start-datetime="2022-06-16 08:15:31" --stop-datetime="2022-06-16 18:16:00" -B > d:\my.sql
4.执行my.sql中的语句即可回滚数据。
二、注意事项
1.注意在windows中--start-file 引号可有可无,--start-datetime和--stop-datetime一定要用双引号。
2.另外如果执行2或者3中语句出现编码报错请修改binglog2sql_util.py文件中
block = block.decode("utf-8")为block = block.decode("gbk") 效果如下:
def reversed_lines(fin):
"""Generate the lines of file in reverse order."""
part = ''
for block in reversed_blocks(fin):
if PY3PLUS:
block = block.decode("gbk")
for c in reversed(block):
if c == '\n' and part:
yield part[::-1]
part = ''
part += c
if part:
yield part[::-1]
3.如果不是通过sql语句进行的操作,比如在DBeaver中直接对表进行操作,那么将无法生成回滚语句。