{MySQL} mysqldump - option pour déplacer CONSTRAIN

Résolu/Fermé
perassia Messages postés 6 Date d'inscription mercredi 22 juillet 2009 Statut Membre Dernière intervention 21 mai 2012 - 22 juil. 2009 à 14:17
perassia Messages postés 6 Date d'inscription mercredi 22 juillet 2009 Statut Membre Dernière intervention 21 mai 2012 - 23 juil. 2009 à 08:45
Bonjour,

J'utilise mysqldump pour faire des sauvegardes de mes bases. J'ai remarqué que j'avais aléatoirement un problème de foreign key lorsque je remontait ces sauvegardes (ERROR 1005 (HY000))

J'ai remarqué que dans les dumps que je fesait, la commande 'constraint' se trouvait au niveau de la création de la table. Exemple :

CREATE TABLE `abonnement` (
`abonn_id` int(11) NOT NULL default '0',
`abonn_id_four` int(11) default NULL,
PRIMARY KEY (`abonn_id`),
KEY `abonn_id_four` (`abonn_id_four`),
CONSTRAINT `abonnement_ibfk_1` FOREIGN KEY (`abonn_id_four`) REFERENCES `fournisseur` (`four_id`) ON DELETE SET NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Cependant, j'ai vu que si je fesait le dump depuis PhpMyadmin 3.11, j'obtenais ça :

CREATE TABLE `abonnement` (
`abonn_id` int(11) NOT NULL DEFAULT '0',
`abonn_id_four` int(11) DEFAULT NULL,
PRIMARY KEY (`abonn_id`),
KEY `abonn_id_four` (`abonn_id_four`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

ALTER TABLE `abonnement`
ADD CONSTRAINT `abonnement_ibfk_1` FOREIGN KEY (`abonn_id_four`) REFERENCES `fournisseur` (`four_id`) ON DELETE SET NULL;

Comme je pense que PhpMyAdmin utilise mysqldump, quelle est l'option de mysqldump qui permet de faire sortir le constraint du create table ?

Merci par avance à ceux qui répondront.
A voir également:

1 réponse

perassia Messages postés 6 Date d'inscription mercredi 22 juillet 2009 Statut Membre Dernière intervention 21 mai 2012
23 juil. 2009 à 08:45
Bon, auto réponse.

Après une heure de recherche sur le net, c'est à priori impossible.

La solution serait d'enlever la gestion des foreign keys lors de la restauration de la sauvegarde avec les commandes suivantes

(
echo "SET AUTOCOMMIT=0;"
echo "SET FOREIGN_KEY_CHECKS=0;"
cat databasedump.sql
echo "SET FOREIGN_KEY_CHECKS=1;"
echo "COMMIT;"
echo "SET AUTOCOMMIT=1;"
) | mysql --user=username --password=password database

Pas encore testé, mais à priori devrai marché tout seul
0