zoukankan      html  css  js  c++  java
  • MySQL在线更改binlog格式

      今天变更jboss报错如下:

    SQLWarning ignored: SQL state 'HY000', error code '1592', message [Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.]

    提示:警告,从另一个表中选择一个具有自动增量列的表的语句是不安全的,因为检索行的顺序决定了将写入哪些行(如果有的话)。这个命令是无法预测的,会使主从的数据不一致。

    于是修改主库和从库的binglog格式由statement改为ROW格式。

    方法:

    1、先修改从库

    mysql> show global variables like "binlog%";
    +-----------------------------------------+--------------+
    | Variable_name                           | Value        |
    +-----------------------------------------+--------------+
    | binlog_cache_size                       | 32768        |
    | binlog_checksum                         | CRC32        |
    | binlog_direct_non_transactional_updates | OFF          |
    | binlog_error_action                     | IGNORE_ERROR |
    | binlog_format                           | MIXED        |
    | binlog_gtid_simple_recovery             | OFF          |
    | binlog_max_flush_queue_time             | 0            |
    | binlog_order_commits                    | ON           |
    | binlog_row_image                        | FULL         |
    | binlog_rows_query_log_events            | OFF          |
    | binlog_stmt_cache_size                  | 32768        |
    | binlogging_impossible_mode              | IGNORE_ERROR |
    +-----------------------------------------+--------------+
    12 rows in set (0.00 sec)
    mysql> set global binlog_format=ROW;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show global variables like "binlog_format";
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | binlog_format | ROW   |
    +---------------+-------+
    1 row in set (0.00 sec)

    2、在修改主库的

    mysql> set global binlog_format=ROW;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show global variables like "binlog_format";
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | binlog_format | ROW   |
    +---------------+-------+
    1 row in set (0.00 sec)

    3、修改配置文件my.cnf

    binlog_format=ROW

    如果先修改主库,可能会有以下报错。

    slave报错信息如下:
    Last_SQL_Errno: 1666
                   Last_SQL_Error: Error executing row event: 'Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT.'

    欢迎转载,请注明出处!

  • 相关阅读:
    +7白盒测试与黑盒测试的定义与区别
    对于逆序数组,,选择排序 和 插入排序 那个更快?
    +1.1向量 链表 数组
    3.2 二十三种设计模式全解析
    3.1软件体系结构风格
    Mysql: 强制走索引:mysql between 日期索引 索引问题-日期索引使用
    php: xampp安装对应的phalcon版本(3.2.2-php5.6):比如redis-php5.6, php_igbinary-5.6
    京东自营,你TM太坑了。
    php:微信公众平台上传多媒体接口 41005错误
    php:如何使用PHP排序, key为字母+数字的数组(多维数组)
  • 原文地址:https://www.cnblogs.com/paul8339/p/8965115.html
Copyright © 2011-2022 走看看