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.'

 

欢迎转载,请注明出处!

 

posted @   paul_hch  阅读(3097)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2016-04-27 iptables详解--转
点击右上角即可分享
微信分享提示