恢复 Mysql 转储文件时出现以下错误。
ERROR 1665 (HY000): Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.
Query OK, 0 rows affected (0.00 sec)
复制配置如下。
我的cnf
复制配置:
server-id = 33
max_binlog_size=40M
log_bin=/MySql_5.5.8/log/my-bin
log-bin-index=/MySql_5.5.8/log/log/mysql_rpllg/my-bin.index
答案1
您很可能需要将其设置为混合格式,以便服务器可以决定。
binlog 格式=MIXED
语句格式并不总是有效,特别是当语句包含诸如 CURRENT_TIMESTAMP 之类的变量时。您可以在此处阅读有关此内容的信息:https://mariadb.com/kb/en/mariadb/mariadb-documentation/log-files/binary-log/binary-log-formats/- 克拉克·维拉
答案2
首先,您必须了解每种格式的作用,这样您才可以选择更适合您的格式。
基于行:记录影响单个表行的事件。
基于语句:记录所有对表的数据或结构进行更改的 SQL 语句。
混合将把两个世界结合在一起,但是 MariaDB 或 MySQL 更喜欢 STATEMENT 而不是 ROW。
@Clark Vera 的答案有文档更多细节。
基于行的结构具有少量需要记录和复制的查询,因此可以记录和复制每一行中的每个更改。
另一方面,基于语句的日志为您带来更简洁的日志和更有效的大容量数据库复制,但可能会丢失一些不重要或未改变结构的数据。
此后,您必须让两个复制服务器都使用相同的日志方法,一切就绪了。
我建议您使用 MIXED 日志,正如@Clark Vera 所说,或者您可以在会话中将其设置为 ROW,当您重新启动 bd 时,它将自动成为基于 STATEMENT 的日志。
答案3
尝试在 my.cnf 中设置此项,然后重试
binlog-format=STATEMENT