超过锁定等待超时;尝试使用python更新mysql表时尝试重新启动事务'错误

时间:2014-02-25 08:33:11

标签: python mysql

我正在使用python在mysql中调用表并执行查询。我收到一个错误:

_mysql_exceptions.OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')

tbl_1是我必须更新isprocessed列的表。

cursor.execute('UPDATE tbl_1 SET isprocessed=1 where name='+body)
cursor.close()
cursor1 = db.cursor()
cursor1.execute('SELECT name,height,age,weight from tbl_1 where name='+body)

正在消息队列中取值。如果我在没有UPDATE的情况下运行代码,则查询其运行正常。我以为cursor.close会解决问题,但事实并非如此。我也重启了mysql。我已经经历了类似的问题,但没有一个能解决我的问题。任何帮助都表示赞赏。

我已将innodb_lock_wait_timeout设置为50到63000

1 个答案:

答案 0 :(得分:0)

由于种种原因,这是一个常见的问题。

  1. 运行程序(或文件)时,请勿在其他终端中打开MYSQL。这可能会导致读写冲突。
  2. 如果您正在使用django以及MYSQL直接执行(使用游标),请确保使用以下命令提交事务:{your_connection_object}.commit()。例如:self.conn.commit()
  3. 要调试的命令如下(如果您不熟悉,请阅读更多关于它们的信息):

    INNODB MONITOR OUTPUT:

    SHOW ENGINE INNODB STATUS\G
    

    当前正在运行的流程:

    Show processlist;
    

    杀死某个特定流程:

    kill *process_id*;
    

    目前正在运行的交易:

    SELECT * FROM `information_schema`.`innodb_trx` ORDER BY `trx_started`;