binlog2sql 工具安装使用及问题汇总

1、环境准备(版本是我安装的版本,供参考):

        Git
        Python 3.9.5
        Pip 22.0.4

2、下载binlog2sql源码:

       git clone https://github.com/danfengcao/binlog2sql.git

3、安装工具需要的依赖:

       cd binlog2sql  //进入下载的源码目录里

       pip install -r requirements.txt

 4、使用demo

binlog2sql一般是在mysql回滚的时候使用,本篇文章主要介绍该工具的安装和排错,如果想了解具体的回滚流程,可以参考这篇文章:https://blog.csdn.net/Interest1_wyt/article/details/115028429

生成回滚sql命令demo:

python E:\IdeaProjects\binlog2sql\binlog2sql\binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'123456' -d test -t t1  --start-file E:\Program Files (x86)\mysql-8.0.23-winx64\data\binlog.000069 --start-position 1105 --stop-position 1343 -B

更多用法可以参考binlog2sql源码中的readme.md文件

5、安装使用中遇到的问题汇总

问题一:Access denied for user 'root'@'localhost' (using password:YES)

这个问题是因为我的root账户只能本地访问,所以这里需要修改下root账户可以远程访问:

update user set host = '%' where user = 'root';

flush privileges;

注:如果使用其它账户,要确保使用的mysql账户信息要有SELECT, REPLICATION SLAVE, REPLICATION CLIENT等权限

问题二:python 连接 mysql 数据库出现 keyerror: 255

Traceback (most recent call last):
  File "E:\IdeaProjects\binlog2sql\binlog2sql\binlog2sql.py", line 145, in <module>
    binlog2sql = Binlog2sql(connection_settings=conn_setting, start_file=args.start_file, start_pos=args.start_pos,
  File "E:\IdeaProjects\binlog2sql\binlog2sql\binlog2sql.py", line 46, in __init__
    self.connection = pymysql.connect(**self.conn_setting)
  File "E:\Program Files\PYTHON3.9.5\lib\site-packages\pymysql\__init__.py", line 90, in Connect
    return Connection(*args, **kwargs)
  File "E:\Program Files\PYTHON3.9.5\lib\site-packages\pymysql\connections.py", line 706, in __init__
    self.connect()
  File "E:\Program Files\PYTHON3.9.5\lib\site-packages\pymysql\connections.py", line 931, in connect
    self._get_server_information()
  File "E:\Program Files\PYTHON3.9.5\lib\site-packages\pymysql\connections.py", line 1269, in _get_server_information
    self.server_charset = charset_by_id(lang).name
  File "E:\Program Files\PYTHON3.9.5\lib\site-packages\pymysql\charset.py", line 38, in by_id
    return self._by_id[id]
KeyError: 255

该问题主要原因是MySQL8.0更新了很多字符集,但是这些字符集长度超过255了,所以旧版的PyMySQL不支持长度超过255的字符。解决方法是更新该工具包:

pip install --upgrade PyMySQL

问题三:ModuleNotFoundError: No module named 'pymysql.util'

这是因为没有'pymysql ,这里我们防止本地有包冲突,所以先卸载再安装:

PS E:\Program Files (x86)\mysql-8.0.23-winx64\data> pip uninstall pymsql
WARNING: Skipping pymsql as it is not installed.
PS E:\Program Files (x86)\mysql-8.0.23-winx64\data> pip install pymysql==0.9.3
Collecting pymysql==0.9.3
  Downloading PyMySQL-0.9.3-py2.py3-none-any.whl (47 kB)
     ---------------------------------------- 47.7/47.7 KB 480.7 kB/s eta 0:00:00
Installing collected packages: pymysql
  Attempting uninstall: pymysql
    Found existing installation: PyMySQL 1.0.2
    Uninstalling PyMySQL-1.0.2:
      Successfully uninstalled PyMySQL-1.0.2
Successfully installed pymysql-0.9.3

问题四:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 39: invalid start byte

E:\Program Files\PYTHON3.9.5\lib\site-packages\pymysql\cursors.py:170: Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 1")

  result = self._query(query)

Traceback (most recent call last):

  File "E:\IdeaProjects\binlog2sql\binlog2sql\binlog2sql.py", line 150, in <module>

    binlog2sql.process_binlog()

  File "E:\IdeaProjects\binlog2sql\binlog2sql\binlog2sql.py", line 121, in process_binlog

    self.print_rollback_sql(filename=tmp_file)

  File "E:\IdeaProjects\binlog2sql\binlog2sql\binlog2sql.py", line 129, in print_rollback_sql

    for line in reversed_lines(f_tmp):

  File "E:\IdeaProjects\binlog2sql\binlog2sql\binlog2sql_util.py", line 249, in reversed_lines

    block = block.decode("utf-8")

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 39: invalid start byte

根据报错信息可以知道,这个跟binlog2sql工具里的binlog2sql.py代码有关,网上有好几种解决方案,这里贴一种我使用没问题的方案:即修改binlog2sql源码中的binlog2sql_util.py指定字符编码的代码(注意有好几行都涉及到编码,但是我们不用全修改,仔细对照下图,千万别改错了),修改的内容如下图:

参考链接:

https://blog.csdn.net/Evan_Hsu/article/details/80182679

https://blog.csdn.net/weixin_43288999/article/details/119104027

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: binlog2sql是一种工具,用于将MySQLbinlog日志文件转换为可读的SQL语句,以便进行离线分析和查看。binlogMySQL数据库中的事务日志,记录了数据库中发生的所有数据变更操作。binlog2sql可以将这些变更操作还原成SQL语句,方便用户了解数据库的历史变更情况。 离线指的是在数据库不处于活动状态下进行操作,即在数据库停止或者不可用的情况下使用binlog2sql工具进行分析。这种方式可以避免对数据库正常运行造成影响,并且可以随时进行回溯和查询。 使用binlog2sql离线可以实现一些重要的功能。首先,可以恢复误删数据。当我们误删了一些重要的数据时,通过binlog2sql工具可以还原出删除数据的SQL语句,然后再执行这些SQL语句,就能够将数据恢复回来。其次,可以查看历史变更记录。通过解析binlog日志文件,可以得到所有数据的变更操作,包括插入、更新和删除等操作的SQL语句,方便我们了解数据库的演进和变化。最后,可以进行数据库迁移和同步。通过解析源数据库的binlog日志文件,可以生成对应的SQL语句,然后将这些SQL语句执行在目标数据库上,从而实现数据库的迁移和同步。 总之,binlog2sql离线是一种方便的工具,可以帮助我们对数据库进行离线分析和查看。无论是恢复误删的数据、查看历史变更记录还是进行数据库迁移和同步,binlog2sql都可以帮助我们完成这些任务。 ### 回答2: binlog2sql 离线的意思是指在没有网络连接的情况下使用 binlog2sql 工具进行操作。 binlog2sql 是一个用于将 MySQL 数据库的 binlog 转化为 SQL 语句的工具,可以用于实时同步 MySQL 数据库的变更或者回放数据库的历史操作。一般情况下,binlog2sql 工具是在线工作的,即在数据库正常运行时实时监听 binlog,并将其转化为 SQL 语句。 然而,当没有网络连接时,我们仍然可以使用 binlog2sql 工具。这种情况下,我们需要手动将 MySQL 数据库的 binlog 文件复制到离线的环境中,并使用 binlog2sql 工具对这些离线的 binlog 文件进行解析和分析。这样,我们就可以获得离线环境下的 SQL 语句,用于还原数据库的操作历史。 离线使用 binlog2sql 的一个常见应用场景是进行数据库备份和恢复。我们可以将线上数据库的 binlog 文件复制到离线环境,使用 binlog2sql 工具解析生成对应的 SQL 语句,并创建一个新的数据库来还原原始数据库的状态。这对于故障恢复、数据迁移以及数据库版本升级等场景都非常有用。 总结起来,binlog2sql 离线的含义是指在没有网络连接的情况下,手动复制和解析 MySQL 数据库的 binlog 文件,使用 binlog2sql 工具生成 SQL 语句,从而进行数据库的备份、还原和迁移等操作。 ### 回答3: binlog2sql是一个用于将MySQL二进制日志(binlog)转换为SQL语句的工具。它可以在离线环境中使用,意味着可以在没有网络连接的情况下进行转换操作。 通过binlog2sql,我们可以将MySQL的二进制日志文件转换成可以被理解和查询的SQL语句文件。这对于分析数据库操作记录、恢复数据等任务非常有用。通常情况下,binlog文件是MySQL服务器在执行每个事务时记录的二进制日志文件,它包含了对数据库的所有更改操作。而binlog2sql可以将这些操作转化为SQL语句,以便我们进行进一步的分析和处理。 在离线环境中使用binlog2sql有几个好处。首先,离线环境意味着我们不需要与网络连接,可以在没有外部干扰的情况下进行转换工作。这可以提高转换的速度和准确性。其次,离线环境还可以提供更高的安全性,因为我们不需要将敏感的数据库信息传输到网络上。最后,离线环境也可以方便我们在本地进行数据恢复和分析工作。 总之,binlog2sql是一个功能强大的工具,它可以在离线环境中使用,将MySQL的二进制日志转换为SQL语句,方便我们进行数据分析和恢复工作。它的离线特性使得我们可以在没有网络连接的环境下进行转换操作,提高了效率和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值