问题是mysql在我们服务器上的CPU上运行很高,持续了大约15分钟。在那个时候,一些进入服务器的数据没有插入到数据库中,而是提交了事务。
重新启动mysql问题后解决了。
所以这意味着即使提交了事务,表中也没有新行。这方面的证据是自动递增的主键,应该如下所示:
100
101
102
但目前是这样的:
100
102
所以记录101丢失了,它被忽略了。
现在我需要找到该记录的某种日志(如果存在)。
我试过mysqldump log
,但那里没有记录。记录101仍然缺失。
我需要找到一种方法来重新创建该事务并再次执行。
有没有人有类似的问题?
代码看起来基本上是这样的:
$db->autocommit(FALSE);
$sql = "INSERT INTO t (amount, datetime) VALUES ($amount, '$datetime')";
$db->query($sql);
$id = $db->insert_id;
$sql = "INSERT INTO tr (id, log) VALUES ($id, '$log')";
$db->query($sql);
$db->autocommit(TRUE);
答案 0 :(得分:1)
在序列已经增加之后,事务很可能被中止。从数据库的角度来看,这不是问题:自动递增列不需要在那里按顺序包含所有ID。从代码/用户的角度来看,这也应该不是问题。如果您的代码需要连续的ID(可以说是出于审计目的),那么您必须自己实现一个系统。如果您不需要,那么只需再次运行该事务。然后,这将创建id 103(在您的情况下)。