binlog2sql 默认的requirements中的依赖包版本比较低,不适合mysql8,
需要用如下的几个包:
$ cat ../requirements.txt
PyMySQL==0.9.3
wheel==0.29.0
mysql-replication==0.21
此外,为了防止遇到乱码问题,还需要改下 binlog2sql_util.py 里面
def reversed_lines(fin):
"""Generate the lines of file in reverse order."""
part = ''
for block in reversed_blocks(fin):
if PY3PLUS:
block = block.decode("utf-8","ignore") # 修改后的写法
#block = block.decode("utf-8") # 原先是这个写法
for c in reversed(block):
if c == '\n' and part:
yield part[::-1]
part = ''
part += c
if part:
yield part[::-1]
其它可以做的改动(非必须)
vim binlog2sql.py 修改下里面的取server_id的逻辑,以便支持多个binlog2sql同时处于--stop-never模式运行
import random
cursor.execute("SELECT @@server_id")
#self.server_id = cursor.fetchone()[0]
self.server_id = random.randint(1024,4294967295) # 随机造一个server_id连到主库去
if not self.server_id:
raise ValueError('missing server_id in %s:%s' % (self.conn_setting['host'], self.conn_setting['port']))