我们的生产数据库中有一个数据库转储导入脚本,可用于重建沙箱数据库.我们为此使用的语法是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中没有挂起,没有表锁定消息的情况下成功运行导入.