mysql-python-replicator binlog为特定模式启动pos

时间:2016-11-17 14:15:20

标签: python mysql

我使用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中找到数据库的开始事件位置?

2 个答案:

答案 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文件将在事件结束后或您手动关闭时关闭,您可以重新创建它,但是现在使用从记录位置读取的不同参数。