web-dev-qa-db-fra.com

problèmes avec mysqldump avec une erreur de restauration: 'SVP, JETER le tablespace avant IMPORT'

Je lance une sauvegarde quotidienne mysqldump de la base de données de production (mysql version 5.1.66):

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

Je fais aussi une restauration quotidienne de cette base de données sur ma machine de développement (mysql version 5.6.12)

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

J'ai l'erreur: ERREUR 1813 (HY000) à la ligne 25: l'espace de table pour la table 'databasename.tablename' existe. S'il vous plaît, jetez l'espace de table avant IMPORT.

Ma lecture indique que c’est parce que la base de données mysql innodb requiert la commande:

 ALTER TABLE tbl_name DISCARD TABLESPACE;

à exécuter avant que la table ne soit supprimée - il semble que l’abandon de la table ne soit pas suffisant 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' car je pourrais potentiellement avoir des données dans ma base de développement qui ont été supprimées de la base de production.

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

La question est donc la suivante: existe-t-il une option de vidage mysql permettant de résoudre ce problème, ou existe-t-il un autre moyen d'importer les données permettant d'éviter l'erreur?

merci d'avance pour la lecture.

20
pgee70

On dirait que vous avez un tablename.ibd mais pas un tablename.frm.

Vérifier:

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

    nom de la table. *

    Vous devriez voir deux fichiers: 

     tablename.ibd 
     tablename.frm 
    

    Mais je suppose que vous ne voyez pas 

    nom_table.ibd

Pour vous réparer, vous avez quelques options:

  1. Ajoutez ce qui suit à mysqldump, ce qui entraînera l’abandon de la base de données, le nettoyage du répertoire de données, avant la restauration.
    --add-drop-database
  2. Copiez le tablename.frm de prod sur dev, puis lancez une instruction delete table.

Également:

  • Pas besoin d'utiliser net_buffer_length = 5000 lorsque vous effectuez un basculement vers un fichier sur localhost.
  • Autres solutions de sauvegarde - Percona Xtrabackup
38
Dave

J'ai trouvé que le moyen le plus simple d'éviter ce problème était de modifier manuellement le vidage de la base de données phpmyadmin et de modifier/changer la table qui posait des problèmes pour autre chose que INNODB. J'ai changé la table des problèmes en ENGINE=MyISAM et le tour est joué. L'importation a fonctionné.

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 ;
7
SamTzu

J'ai également rencontré ce problème lors de la suppression d'un schéma et de sa création. J'ai surmonté ce problème en allant à C:\ProgramData\MySQL\MySQL Server 5.6\data\my_database_name et en supprimant les tables restantes de la création de la base de données précédente. Vous pouvez également supprimer toute la base de données, si vous le souhaitez.

3
ÖMER TAŞCI

si vous utilisez XAMPP alors d'abord ("stop") MySQL Ensuite, allez dans C:\xampp\mysql\data\dnb où dans mon cas dnb est le dossier de mon nom de base de données .. donc ouvrez-le et supprimez le fichier .ibd. Par conséquent, vous ne pouvez le supprimer que lorsque vous avez déjà arrêté MYsql . puis accédez à phpmyadmin 1 cliquez sur phpmyadmin . 2 cliquez sur les bases de données qui apparaissent ci-dessous (server.127.0.0.1 dans case my be change) 3 puis vérifiez votre base de données que vous voulez supprimer, puis cliquez sur drop . 4 vous pouvez alors créer une base de données avec le même nom et importer votre base de données avec succès . ici vous pouvez voir déposer la base de données de phpmyadmin

0
Noman Hassan