Я пытаюсь использовать mysqldump
для копирования данных с одного сервера на другой. На целевом сервере была установлена предыдущая версия той же базы данных, поэтому все объекты, на которые имеются ссылки, уже существуют. Я проверил вывод из mysqldump
, и он включает в себя соответствующие инструкции: (1) отключить проверку внешнего ключа во время отдыха и (2) удалить старые таблицы. Отредактированный отрывок выглядит следующим образом:
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
...
DROP TABLE IF EXISTS `bins`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `bins` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`site` int(11) NOT NULL,
`type` varchar(255) NOT NULL,
`capacity` varchar(255) NOT NULL,
`quantity` int(11) NOT NULL,
`cost` decimal(9,2) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `sites_bins_idx` (`site`),
CONSTRAINT `sites_bins` FOREIGN KEY (`site`) REFERENCES `sites` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=457 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
Я понимаю синтаксис /*!nnnnn ... */
как условный синтаксис, который выполняется только в том случае, если версия сервера выше, чем номер, включенный в число (это моя версия 5.0), поэтому все включенные инструкции SET должны выполняться.
Я запустил файл script, сгенерированный при запуске mysql -p < dump.sql
, но получил следующую ошибку:
ERROR 1005 (HY000) at line 27: Can't create table './myschema/bins.frm' (errno: 121)
Запуск запроса show innodb status
содержит следующую дополнительную информацию:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
140420 13:15:07 Error in foreign key constraint creation for table `myschema/bins`.
A foreign key constraint of name `myschema/sites_bins` already exists.
Однако, как может существовать ограничение, когда таблица (ы), на которую он ссылается, была отброшена?
mysql> show tables;
Empty set (0.00 sec)
mysql> SELECT constraint_name, table_name FROM information_schema.table_constraints WHERE constraint_type = 'FOREIGN KEY' AND table_schema = DATABASE() ORDER BY constraint_name;
+--------------------------+------------------+
| constraint_name | table_name |
+--------------------------+------------------+
| clients_sites | sites |
| client_contacts | contacts |
| scheduledvisit_site | scheduled_visits |
| sites_bins | bins |
| sites_visits | site_visits |
| sitevisit_sitevisitentry | site_visit_entry |
+--------------------------+------------------+
6 rows in set (0.00 sec)
Я даже пробовал drop database myschema
, но ограничения по-прежнему остаются позади даже после этого.
Как эти ограничения были оставлены после того, как их таблицы были удалены? И как мне избавиться от них, чтобы я мог воссоздать их соответствующие таблицы?