У нас есть сценарий импорта дампа базы данных из нашей производственной базы данных, который мы используем для восстановления нашей базы данных песочницы. Синтаксис, который мы используем для этого, 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, если это вообще возможно, потому что он обеспокоен, что перезапустить не удастся (что случилось с нами в прошлый раз, когда у нас была похожая ситуация, и ему пришлось перестроить весь БД, включая все dbs песочниц, из бэкапа).
Впоследствии мы создали новую базу данных dbname2 и смогли успешно выполнить импорт без зависаний и сообщений о блокировке таблицы в списке процессов.