导入数据库转储时挂起mysql

我们的生产数据库中有一个数据库转储导入脚本,可用于重建沙箱数据库.我们为此使用的语法是mysql -u uname -ppass dbname< prod_db_export.sql.该脚本继续创建第一个表,然后执行以下操作:

LOCK TABLES `ad` WRITE;
/*!40000 ALTER TABLE `ad` DISABLE KEYS */;
/*!40000 ALTER TABLE `ad` ENABLE KEYS */;
UNLOCK TABLES;

表格广告中没有数据,因此DISABLE KEYS行之后没有import语句.无论如何,导入此时就挂起了,当我们使用processlist查询数据库时,会看到如下输出:

| 5116 | uname     | localhost | dbname     | Field List |   85 | Waiting for table |                        | 
| 5121 | uname     | localhost | dbname     | Query      |   44 | Waiting for table | LOCK TABLES `ad` WRITE | 
| 5126 | uname     | localhost | dbname     | Field List |   23 | Waiting for table |                        | 

有人知道会导致这种情况发生的原因吗?更好的是,如何解决呢?

我们的SA根本不希望重新启动mysql,因为他担心它将无法重新启动(这是上次发生类似情况时发生的情况,他不得不重建整个数据库,包括所有沙箱的数据库. ,来自备份).

随后,我们创建了一个新数据库dbname2,并且能够在processlist中没有挂起,没有表锁定消息的情况下成功运行导入.

解决方法:

作为此问题中引用的SA,我想指出一些事情:

>在删除数据库之前,已为该数据库删除了ibdata文件(我们使用表每个idb)
>然后删除数据库并重新创建
>导入时,第一个表是ad,它似乎已经被锁定.

对我来说,这意味着在InnoDB元数据中仍然存储有锁定信息,该信息保存在共享ibdata文件中.
上次我遇到InnoDB元数据与单个表ibdata文件不同步的问题时,我删除了所有内容并重新导入.当我尝试重新启动时,MySQL拒绝了,因为它无法找到已删除但仍在元数据中的表ibd文件.

这里的持久性问题是通过命令行除去ibd文件,而不是删除数据库.
佩布卡茨.

上一篇:超出MySQL锁等待超时


下一篇:mysql – 删除行会导致锁定超时