在生产中使用 MySQL 复制之前,我们正在对其进行测试。在我们的案例中,MySQL 是由 Puppet 设置的,我注意到 master 和 slave 之间的 binlog_format 设置不同。
在主人上:
mysql> show variables like 'binlog_format' \G
*************************** 1. row ***************************
Variable_name: binlog_format
Value: ROW
Run Code Online (Sandbox Code Playgroud)
在奴隶上:
mysql> show variables like 'binlog_format' \G
*************************** 1. row ***************************
Variable_name: binlog_format
Value: STATEMENT
Run Code Online (Sandbox Code Playgroud)
有时,复制会中断并显示类似于以下内容的错误:
Last_SQL_Error:无法在表 test.pruning 上执行 Delete_rows 事件;在“修剪”中找不到记录,错误代码:1032;处理程序错误 HA_ERR_KEY_NOT_FOUND; 事件的主日志 mysql-bin.000002, end_log_pos 1448
不知道是不是master和slave的binlog_format设置不同导致的。
上述错误可能是由这种不一致的设置引起的吗?我应该将奴隶更改为基于“行”的格式吗?很难重现该错误,因此我正在寻找我们应该遵循的最佳实践,而且我们对 MySQL 非常陌生。