Mysqldump проблемы с ошибкой восстановления: "Пожалуйста, ОТКРЫВАЙТЕ табличное пространство перед IMPORT"
Я запускаю ежедневную резервную копию mysqldump производственной базы данных (mysql version 5.1.66):
mysqldump --user=username --password=secret -C -e --create-options --hex-blob --net_buffer_length=5000 databasename > file
Я также ежедневно восстанавливаю эту базу данных на своей машине разработки (mysql версия 5.6.12)
mysql --user=username --password=secret databasename < file
Я получаю ошибку:
ОШИБКА 1813 (HY000) в строке 25: существует табличное пространство для таблицы 'databasename
. tablename
'. Пожалуйста, ОТКРЫВАЙТЕ табличное пространство до ИМПОРТА.
Мое чтение указывает на то, что для базы данных innodb mysql требуется команда:
ALTER TABLE tbl_name DISCARD TABLESPACE;
который должен быть запущен до того, как таблица будет отброшена - кажется, что сбросить таблицу недостаточно, чтобы избавиться от своих индексов.
(мой сервер разработки использует параметр innodb_file_per_table)
Я не хочу использовать параметр "заменить", потому что я могу потенциально иметь данные в моей базе данных разработки, которые были удалены в производственной базе данных.
btw после ошибки таблицы не читаются, но перезапуск mysqld исправляет его.
Итак, вопрос в том, есть ли какая-либо опция mysql dump, которая поможет исправить эту проблему или есть другой способ импортировать данные, которые предотвратят ошибку?
заблаговременно зачитывать.
Ответы
Ответ 1
Похоже, что у вас есть tablename.ibd, но нет tablename.frm.
Чтобы проверить:
- cd в каталог данных mysql, затем имя базы данных.
cd /var/lib/mysql/database_name
-
Найдите имя таблицы, которое дает ошибку.
ls tablename.*
Вы должны увидеть два файла:
tablename.ibd
tablename.frm
Но я предполагаю, что вы этого не делаете, и видите только
tablename.ibd
Чтобы исправить, у вас есть несколько вариантов:
- Добавьте следующее в mysqldump, который приведет к удалению базы данных, очистке каталога данных до восстановления.
--add-drop-database
- Скопируйте tablename.frm из prod в dev и затем выпустите инструкцию таблицы.
также:
- Не нужно использовать net_buffer_length = 5000, когда вы отправляете файл на локальном хостинге.
- Другие решения для резервного копирования - Percona Xtrabackup
Ответ 2
Я нашел самый простой способ пропустить эту проблему: вручную изменить дамп базы данных phpmyadmin и отредактировать/изменить таблицу, у которой были проблемы с чем-то еще, чем INNODB
. Я изменил таблицу проблем на ENGINE=MyISAM
и вуаля. Импорт выполнен.
CREATE TABLE IF NOT EXISTS `home3_acymailing_tag` (
`tagid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(250) NOT NULL,
`userid` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`tagid`),
KEY `useridindex` (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Ответ 3
Я также столкнулся с этой проблемой, оставив схему и снова создав ее. Я преодолел эту проблему, перейдя C:\ProgramData\MySQL\MySQL Server 5.6\data\my_database_name
и удалив таблицы, оставшиеся от предыдущего создания базы данных. Вы также можете удалить всю базу данных, если хотите.
Ответ 4
если вы используете XAMPP, тогда сначала ( "stop" ) MySQL
Затем перейдите к C:\xampp\mysql\data\dnb
где в моем случае dnb - это моя папка с именем базы данных.
поэтому откройте его и удалите файл .ibd, поэтому его можно удалить только после остановки MYsql.
затем перейдите к phpmyadmin
1 щелкните по phpmyadmin.
2 нажмите на базы данных, которые отображаются ниже (server.127.0.0.1 в вашем случае, я буду изменен)
3 затем проверьте свою базу данных, которую вы хотите удалить, и нажмите "Отбросить".
4, вы можете создать базу данных с тем же именем и успешно импортировать свою базу данных. здесь вы можете увидеть, как вы отбрасываете базу данных из phpmyadmin