由于出现以下警告mysqld.log:
[警告]由于BINLOG_FORMAT = STATEMENT,因此使用语句格式将不安全的语句写入二进制日志。该语句不安全,因为它使用LIMIT子句。这是不安全的,因为无法预测其中包含的行集。
我想将复制格式切换为MIXED。
但是根据MySQL文档:
不存在任何临时表时,建议不要在运行时切换复制格式,因为临时表仅在使用基于语句的复制时才记录,而在基于行的复制中则不记录。
因此,问题是如何确定是否存在任何临时表来安全地切换二进制日志格式?
由于出现以下警告mysqld.log:
[警告]由于BINLOG_FORMAT = STATEMENT,因此使用语句格式将不安全的语句写入二进制日志。该语句不安全,因为它使用LIMIT子句。这是不安全的,因为无法预测其中包含的行集。
我想将复制格式切换为MIXED。
但是根据MySQL文档:
不存在任何临时表时,建议不要在运行时切换复制格式,因为临时表仅在使用基于语句的复制时才记录,而在基于行的复制中则不记录。
因此,问题是如何确定是否存在任何临时表来安全地切换二进制日志格式?
Answers:
由于执行此操作时二进制日志将具有特定格式,因此尽管MySQL(eh Oracle [仍然无法摆脱我的声音])构建了此功能,但您可能决定不一起使用这两种格式。
要完全安全地播放它而无需重新启动mysql,请尝试以下操作:
FLUSH TABLES WITH READ LOCK;
FLUSH LOGS;
SET GLOBAL binlog_format = 'MIXED';
FLUSH LOGS;
UNLOCK TABLES;
这将以“ MIXED”格式保留最后一个binlog。倒数第二个(紧随其后的)二进制日志的存在仅是关闭前一个格式的最后一个二进制日志。
FLUSH LOGS;一旦UNLOCK TABLES;执行,第一个之前的所有现有会话将开始写入最后一个二进制日志。
试试看 !!!
警告
在应得的信贷额度上给予信贷,我的答案真的是@带@Jonathan的答案。我只是关闭并打开二进制日志。他因首先提出来而获得+1。
更新美国东部时间2011-10-12 13:58
如果您对活动的主服务器执行此操作,并且从该主服务器复制了一个或多个从服务器,则需要注意中继日志也采用新格式。您可以执行以下操作:
在从站上,运行 STOP SLAVE;
在Master上运行以下命令:
FLUSH TABLES WITH READ LOCK;
FLUSH LOGS;
SET GLOBAL binlog_format = 'MIXED';
FLUSH LOGS;
UNLOCK TABLES;
在从站上,运行 START SLAVE;
运行STOP SLAVE;并START SLAVE;轮换中继日志,并导致新条目被复制到任何格式。您可能还希望在从属服务器中应用binlog_format更改。