les problèmes mysqldump avec restore error: 'please DISCARD the tablespace before IMPORT'

je lance un backup quotidien le dump de sauvegarde de la production de la base de données (mysql version 5.1.66):

mysqldump --user=username --password=secret -C -e --create-options --hex-blob --net_buffer_length=5000 databasename > file

je fais également un quotidien de la restauration de la base de données sur ma machine de développement (version de mysql 5.6.12)

mysql --user=username --password=secret databasename < file

j'obtiens l'erreur: L'ERREUR 1813 (HY000) à la ligne 25: Espace de table pour la table 'databasename.tablename' existe. Veuillez jeter la tablespace avant L'importation.

ma lecture indique que c'est parce que la base de données MySQL innodb nécessite commande:

 ALTER TABLE tbl_name DISCARD TABLESPACE;

pour être exécuté avant que la table soit abandonnée -- il semble que la suppression de la table ne soit pas suffisante pour se débarrasser de ses index. (mon serveur de développement utilise l'option innodb_file_per_table)

Je ne veux pas utiliser l'option "Remplacer" parce que je pourrais potentiellement avoir des données dans ma base de données de développement qui ont été supprimées sur la base de données de production.

btw après l'erreur les tables ne sont pas lisibles, mais redémarrer mysqld les corrige.

Donc la question Est, y a-t-il une option de dump mysql qui aidera à corriger ce problème, ou y a-t-il une autre façon d'importer les données qui empêchera l'erreur?

merci d'avance pour la lecture.

19
demandé sur pgee70 2013-07-29 04:30:54

4 réponses

on dirait que vous avez un nom de table.mici, mais aucun nom de la table.frm.

À vérifier:

  1. cd à votre répertoire de données mysql puis le nom de la base de données.
    cd /var/lib/mysql/database_name
  2. rechercher le nom de la table qui donne l'erreur.

    ls tablename.*

    Vous devriez voir deux fichiers:

    tablename.ibd
    tablename.frm
    

    Mais je devine que vous n'avez pas et ne vois

    tablename.ibd

Pour corriger, vous avez plusieurs options:

  1. ajouter ce qui suit à mysqldump, ce qui causera l'abandon de la base de données, le nettoyage du répertoire de données, avant la restauration.
    --add-drop-database
  2. Copier le nom de la table.frm de prod sur À dev et ensuite émettre une déclaration de suppression de table.

Aussi:

  • pas besoin d'utiliser net_buffer_length=5000 lorsque vous videz un fichier sur localhost.
  • autres solutions de sauvegarde - Percona Xtrabackup
38
répondu Dave 2013-07-29 02:29:53

j'ai trouvé la façon la plus facile de sauter ce problème était d'éditer manuellement le dump de la base de données phpmyadmin et éditer/changer la table qui avait des problèmes à autre chose que INNODB. J'ai modifié la table de problème ENGINE=MyISAM et le tour est joué. Importation travaillé.

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 ;
5
répondu SamTzu 2016-12-16 15:28:41

j'ai aussi rencontré ce problème en abandonnant un schéma et en le créant à nouveau. - Je surmonter ce problème en allant C:\ProgramData\MySQL\MySQL Server 5.6\data\my_database_name et de supprimer les tables qui sont restées de la création de base de données précédente. Vous pouvez également supprimer la base de données entière, si vous le souhaitez.

3
répondu ÖMER TAŞCI 2015-06-12 08:59:58

si vous utilisez XAMPP alors D'abord ("stop") MySQL Alors, allez à C:\xampp\mysql\data\dnb où dans mon cas dnb est mon nom de base de données de dossier. alors l'ouvrir et de le supprimer .fichier ibd par conséquent, vous ne pouvez le supprimer que lorsque vous arrêtez déjà MYsql . puis allez à phpmyadmin 1 cliquez sur phpmyadmin . 2 Cliquez sur les bases de données qui apparaissent ci-dessous (server.127.0.0.1 dans votre cas, mon être changer) 3 Ensuite, vérifiez votre base de données que vous voulez laisser tomber,et cliquez sur Laisser tomber. 4 alors vous pouvez créer la base de données avec le même nom et importer votre base de données avec succès .ici vous pouvez voir comment vous déposez base de données de phpmyadmin

0
répondu Noman Hassan 2016-01-20 23:15:12