我使用mysql-python-replicator从mysql转储特定数据库的数据,所以我可以创建一个只带参数的BinglogStream:schema:
stream = BinLogStreamReader(connection_settings=mysql_settings,
server_id=1,only_schemas='tpch',
log_file='mysql-bin.000001',log_pos=1
)
我有参数log_file='mysql-bin.000001'
和log_pos=1
,因为我不知道事件位置从哪里开始,所以有什么想法在mysql-binlog中找到数据库的开始事件位置?
答案 0 :(得分:0)
猜测第一个binlog位置是行不通的。此文件和位置可能不存在于服务器上,因为Mysql会根据其配置自动轮换这些日志。
库内部知道如何从头开始。只需省略恢复所需的3个参数(或将它们设置为False / None):
if binlog_filename is None or binlog_position is None:
# Connecting to MySQL binlog (from beginning)...
binlog_stream = BinLogStreamReader(
connection_settings=mysql_settings,
server_id=1,
blocking=True
)
else:
# Continuing from binlog_filename and binlog_position
binlog_stream = BinLogStreamReader(
connection_settings=mysql_settings,
server_id=1,
resume_stream=True,
blocking=True,
log_file=binlog_filename,
log_pos=binlog_position
)
答案 1 :(得分:0)
首先,您可以从resume_stream=False,log_file=None,log_pos=None,blocking=False
开始,它大概将从头开始读取binLogEvents。在随后的迭代中,您应该以某种方式(在数据库或内存中)记录最新的log_file和log_pos,您可以从BinLogStreamReader
对象中读取它们。由于blocking
参数设置为False
,binlog文件将在事件结束后或您手动关闭时关闭,您可以重新创建它,但是现在使用从记录位置读取的不同参数。