最近我注意到主从复制中从服务器错误日志中出现以下错误。即使复制没有问题,从属也按照主属准时进行。实际上,我在从属设备上执行了一些繁重的报告查询,并将其结果插入到临时/虚拟(不是临时表)表中。我需要社区帮助来解决我的以下两个疑问。如果有人在这方面帮助我,我将非常感激。
[ERROR] Slave SQL: Could not execute Update_rows event on table DBname.tablename; Lock wait timeout exceeded; try restarting transaction,
Error_code: 1205; handler error HA_ERR_LOCK_WAIT_TIMEOUT; the event's master log mysql-bin.******, end_log_pos *******, Error_code: 1205
Run Code Online (Sandbox Code Playgroud)
根据我的理解,当我获取报告(从生产表中获取并插入虚拟表)时,会发生此错误,因为 mysql 无法获得锁定,并且由于锁定可用于 mysql,因此更新语句将成功执行意味着我的数据将会更新迄今为止在奴隶上。
我们知道 select 语句不会锁定表,所以会发生这种情况,因为我在从生产表获取数据的同时将数据插入到另一个表中。
提前致谢。
只要查询运行,在从属服务器上运行查询就会在基础表上设置隐式锁定。与此同时,来自主服务器的并发查询必须被搁置。由于您的查询持续时间可能超过(或接近)innodb_lock_wait_timeout,复制超时。
发生这种情况时,您所需要做的就是使用简单的START SLAVE;.
为了完全避免该问题,您可以STOP SLAVE在运行报告查询之前显式暂停复制 ( ),然后在完成后恢复复制。
作为解决方法,您还可以增加slave_transaction_retries.
| 归档时间: |
|
| 查看次数: |
4798 次 |
| 最近记录: |