mysql修改log_bin_MySQL在线更改binlog格式

在遇到SQL警告提示unsafe statement写入binlog时,为了保证主从数据一致性,需要将binlog_format从STATEMENT改为ROW。本文介绍了如何在线修改MySQL从库和主库的binlog_format为ROW格式,并提及了可能遇到的问题及解决方法。

今天变更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.00sec)

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.00sec)

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:1666Last_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.'

欢迎转载,请注明出处!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值