MySQL InnoDB разблокировать строку - PullRequest
3 голосов
/ 11 августа 2010

Я получаю тайм-аут блокировки при обновлении определенной строки в базе данных.Другие строки обновляются в порядке.

#1205 - Lock wait timeout exceeded; try restarting transaction

Как разблокировать эту конкретную строку?

Вот две связанные таблицы.Я пытаюсь обновить адрес электронной почты пользователя.Я не думаю, что арендатор должен вызывать какие-либо проблемы.

CREATE  TABLE IF NOT EXISTS `mydb`.`user` (
  `username` VARCHAR(45) NOT NULL ,
  `email` VARCHAR(60) NOT NULL ,
  `password` VARCHAR(45) NOT NULL ,
  `created` TIMESTAMP NULL DEFAULT NULL ,
  `last_login` TIMESTAMP NULL ,
  PRIMARY KEY (`username`) )

ENGINE = InnoDB;


CREATE  TABLE IF NOT EXISTS `mydb`.`tenant` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `username` VARCHAR(45) NOT NULL ,
  `address` VARCHAR(90) NULL ,
  `company` VARCHAR(45) NULL ,
  `phone` VARCHAR(25) NOT NULL ,
  `fax` VARCHAR(25) NULL ,
  `notes` TEXT NULL ,
  `contacts` TEXT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_tenant_user1` (`username` ASC) ,
  CONSTRAINT `fk_tenant_user1`
    FOREIGN KEY (`username` )
    REFERENCES `mydb`.`user` (`username` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Ответы [ 3 ]

5 голосов
/ 11 августа 2010

Я только что запустил FLUSH TABLE user, и теперь все нормально.

3 голосов
/ 11 августа 2010

Попробуйте запустить следующее в интерактивном клиенте mysql:

SHOW ENGINE INNODB STATUS\G

И посмотрите на текущие открытые транзакции. Посмотрите, не блокирует ли один из них строку.

0 голосов
/ 19 января 2017

В моем случае MySql исправился через 6-7 часов. (Когда я проснулся, чтобы решить эту проблему. Она ушла)

...