Подтвердить что ты не робот

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, которая поможет исправить эту проблему или есть другой способ импортировать данные, которые предотвратят ошибку?

заблаговременно зачитывать.

4b9b3361

Ответ 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