В моем случае проблема заключалась в том, что было представление с тем же именем, что и у моей таблицы, поэтому мне пришлось отбросить представление, чтобы разрешить импорт.
drop view `my-view-that-has-same-name-as-table`;
Автоматизированное решение, которое сработало для меня, заключается в замене обычной таблицы перетаскивания этим sed во время дампа, чтобы также отбрасывать любые существующие представления:
mysqldump my-db \
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/\0 DROP VIEW IF EXISTS\1/g' \
| mysql my-other-db
Или, если вы предпочитаете печатать в файл для резервного копирования
mysqldump my-db \
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/\0 DROP VIEW IF EXISTS\1/g' \
> my-db.dump.sql
Или, если вы получили дамп-файл и импортируете его в свою базу данных
cat my-db.dump.sql \
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/\0 DROP VIEW IF EXISTS\1/g' \
| mysql my-other-db
Вы поняли идею
Примечание: важно добавить ^
в начале регулярного выражения замены, потому что в дампах есть другие типы команд DROP TABLE IF EXISTS
, которые вы не хотите трогать.
У вас не получается что-то вроде этого:
--
-- Table structure for table `my_table`
--
DROP TABLE IF EXISTS `my_table`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `my_table` (
...
Чтобы иметь что-то вроде этого:
--
-- Table structure for table `my_table`
--
DROP TABLE IF EXISTS `my_table`; DROP VIEW IF EXISTS `my_table`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `my_table` (
...