mysql bin日志模式用于自动增量

时间:2012-10-02 06:18:25

标签: mysql auto-increment database-replication mysqlbinlog

目前我们有一个数据库,其中STATEMENT bin日志格式正常工作 现在我们添加一个具有自动增量值的新表 此自动增量列对于业务逻辑没有用处 我们已将此添加为主键的一部分。
这里offer_expiry_time是主键的第一部分,因为我们将所有查询作为基于到期时间范围的范围查询。

假设我们的表与此类似:

CREATE TABLE offer_expiry_info  
    offer_expiry_time BIGINT UNSIGNED NOT NULL null,  
    purchase_id INT UNSIGNED auto_increment,
    PRIMARY KEY (offer_expiry_time, purchase_id),
    KEY idx_purchase_id (purchase_id)
)ENGINE = INNOBB;

现在我们关注的是:

  1. STATEMENT级别bin日志格式是否适用于此表? (即使我们对复制中的自动增量列的值不同也没问题)。 STATEMENT级别基本上会工作吗?

  2. 如果它可以解决启动失败的数据库计算机时可能出现的问题?

  3. 如果STATEMENT模式不起作用,那么我们可以单独为此表使用特定(MIXED)复制模式吗?同一数据库中的其余表可以具有STATEMENT模式吗?

  4. 这可能是一个非常愚蠢的问题,因为我不知道mysql如何处理复制。是否可以根据查询类型指定复制模式? (对于插入查询,请执行ROW级别复制,对于DELETE查询执行STATEMENT级别复制)

    问题4是因为我们确实基于基于范围的删除执行删除,因此如果我们可以对删除查询进行STATEMENT复制,则会有更好的性能。

  5. DELETE FROM order_expiry_info WHERE offer_expiry_time "LESS THAN" SOME TIME
    

    由于我们进行批量插入,因此STATEMENT级复制将对我们有所帮助 是否可以使具有自动增量列的表具有STATEMENT级别的bin日志格式?

    [编辑] 此外,我们还有另一个与事务隔离级别有关的问题 错误:“获取错误无法进行二进制日志记录。消息:事务级别'REA InnoDB中的D-UNCOMMITTED'对于binlog模式'STATEMENT'“

    是不安全的

    任何建议都会非常有用吗?

1 个答案:

答案 0 :(得分:1)

是的,这些场景可以使用语句binlogs正常工作。

如果您可以访问日志,您将看到在每个语句之前记录某些值,以确保正确保留时间戳和自动增量值等内容。

我多年来一直在使用基于语句的复制,而在任何这些方面都没有问题。我建议坚持使用它,只考虑基于行或混合复制的情况,如果出现可能需要它们的特定性能情况。

请注意,某些类型的使用对于基于语句的复制是不安全的,但简单的自动增量使用不是其中之一。