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;
表 ad
中没有数据,因此在 DISABLE KEYS
行后没有导入语句。无论如何,此时导入已经挂起,当我们使用 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,并成功地运行了导入操作,没有挂起,也没有在进程列表中出现表锁信息。