在主服务器上恢复转储时,使用mysql 5.5.8的复制问题。

在还原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) 

复制configuration如下。

my.cnf中

复制configuration:

  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 

您很可能需要将其设置为混合格式,以便服务器可以决定。

二进制日志格式= MIXED

语句格式不总是工作,特别是如果语句包含variables如CURRENT_TIMESTAMP。 你可以在这里阅读: https : //mariadb.com/kb/en/mariadb/mariadb-documentation/log-files/binary-log/binary-log-formats/ – 克拉克维拉

首先,你必须明白每种格式都给出了什么,所以你可以select哪一个更适合你。

基于行:logging影响单个表行的事件。

基于语句logging对表的数据或结构进行更改的所有SQL语句。

Mixed将把两个世界结合在一起,但是MariaDB或者MySQL会比ROW更喜欢STATEMENT。

@Clark维拉答案有更多的细节文件 。

基于行的结构只有很less的需要logging和复制的查询,因此每一行中的每个更改都可以被logging和复制。

另一方面,基于语句的日志会为您提供更简洁的日志和更高效的高容量数据库复制,但可能会丢失一些不重要的数据或不会更改结构。

之后,你必须保持你的复制服务器使用相同的日志方法,你会很好去。

我build议你使用MIXED日志,就像@Clark Vera所说的那样,或者你可以在你的会话中将它设置为ROW,当你重新启动你的bd时,它会自动成为基于STATEMENT的日志。

尝试在my.cnf中设置,然后重新尝试

 binlog-format=STATEMENT