IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

trigger et dump, référence à root


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 131
    Par défaut trigger et dump, référence à root
    Bonsoir,

    J'ai deux serveurs mysql 5.0 configurés en mater/master, derrière une VIP avec tout le tralalala heartbeat et mon. Ce "cluster" est utilisé par deux autres machines. Voila pour la première archi

    J'ai dumpé une base sur le "cluster" via l'utilisateur root, depuis une machine du réseau (lamachine). J'ai donc un compte root@lamachine sur le "cluster". J'ai fait ça en root car je ne souhaitais pas donner le privilège SUPER à l'utilisateur, alors j'ai créé pour lui les trigger et procédures stockées.

    J'ai fait un dump de cette base via mysqldump. Bizarrement, sans spécifier --trigger, j'ai les triggers dans le dump, mais bon, je vais pas m'en plaindre.

    Voici mes options pour le dump:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    --add-drop-table --add-locks
    Lors de l'import de cette base, j'ai des messages d'erreurs qui remonte que l'utilisateur root@lamachine n'existe pas. Ce qui est normal ... Mais impossible de continuer l'import sans le rajouter ...

    Dans le dump, j'ai des lignes de ce type (une au hasard):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /*!50003 CREATE */ /*!50017 DEFINER=`root`@`lautremachine` */ /*!50003 TRIGGER `tabx_DateCreation` BEFORE INSERT ON `gestionnaire` FOR EACH ROW SET NEW.DateCreation = CURRENT_TIMESTAMP, NEW.DateMAJ = CURRENT_TIMESTAMP */;;
    Maintenant, sur un update d'une table qui a un trigger, j'ai la même erreur, il me dit que l'utilisateur n'existe pas pour root@lautremachine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR 1449 (HY000): There is no 'root'@'lautremachine' registered
    J'aimerais dans un premier temps comprendre pourquoi il y a une référence à l'utilisateur utilisé pour importer la base sur le "cluster". Mes connaissances sur les triggers mysql sont vraiment limités, et je n'ai pas trouvé d'information à ce sujet dans la documentation.

    J'ai l'impression que le premier import sur le "cluster" a été "mal fait" et que je vais être obligé d'ajouter le compte root@lautremachine pour que ça marche.

    Si quelqu'un a déjà rencontré le problème ou comprend ce qu'il se passe, son aide sera la bienvenue.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Pour ce qui est de mon expérience, le problème se pose y compris sur des config sans réplication, et quelle que soit la façon dont on fait le dump. La clause DEFINER= plante systématiquement ; la solution que j'ai utilisée consiste à supprimer cette clause à la main

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 131
    Par défaut
    Merci pour ton retour.

    Bon, mon dump n'est pas énorme, 250Mo, mais ca fait quand même chier, si je peux me permettre, d'en arriver là.

    Je fais faire quelques tests ce matin, j'ai eu quelques révélations cette nuit, si ça marche, j'en dirais plus

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Citation Envoyé par DjinnS Voir le message
    Bon, mon dump n'est pas énorme, 250Mo, mais ca fait quand même chier, si je peux me permettre, d'en arriver là.
    Une grosse chiasse ? Libérez-vous avec les regex !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 131
    Par défaut
    Sortir l'artillerie des regex pour importer une base de données, oui, ça fait chier Je trouve la méthode, pour ma part, bien violente.

    Voici les informations que j'ai pu tirer des mes recherches et les conclusions qui vont avec.

    Lorsque l'objet est créé, par exemple dans mon cas un trigger, la référence à l'utilisateur ayant créé l'objet est mémorisé via le paramètre DEFINER. Lors du dump, ce paramètre est exporté. A noté qu'il est écrit dans la donc qu'il faut un --trigger pour faire le dump sauf que par défaut il semble être actif.

    Lors de l'import, suivant les versions du moteur, ça pose ou non un problème. La solution que j'ai adopté consiste à ne pas modifier le dump mais à créer l'utilisateur en question. La modification du dump n'est pas une mauvaise solution, mais ça passe pour une base de 200Mo, ça sera peut être moins évident sur des grosses bases. En tout cas, cette solution ne me convient pas :p

    Si l'utilisateur est créé lors de l'import pour qu'il n'échoue pas, la suite ne posera pas de problème. Sinon, il faudra aussi le créer pour pouvoir utiliser le trigger, sous n'importe quel utilisateur. J'entends par cela les utilisateurs ayant le droit par exemple de faire un update sur la table ou il y a un trigger sur l'update (de la colonne en question, toujours par exemple).

    Une autre méthode consisterait à modifier le paramètre DEFINER du trigger. Mais comme il n'y a pas de ALTER TRIGGER sous la 5.0 (franchement, je sais pas ce qu'ils ont foutu les devs là ... mais bon ...), il faut le DROP et ensuite un CREATE. Lors du CREATE, pas besoin de spécifier le DEFINER, la valeur de l'utilisateur courant sera utilisé.

    Je veux pas dire, mais pourquoi il n'y a pas d'option dans mysqldump pour omettre le DEFINER ? Sachant que je n'ai pas forcement les mêmes utilisateurs sur les bases (par exemple, dev, prod ...) avoir le DEFINER en dur, c'est chiant.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Citation Envoyé par DjinnS Voir le message
    Sortir l'artillerie des regex pour importer une base de données, oui, ça fait chier Je trouve la méthode, pour ma part, bien violente.
    J'aime bien faire joujou avec les regex, donc ça ne me fait pas chier, mais sur le fond je suis d'accord sur l'usinagazitude du procédé.
    Citation Envoyé par DjinnS Voir le message
    (...)Lors de l'import, suivant les versions du moteur, ça pose ou non un problème. La solution que j'ai adopté consiste à ne pas modifier le dump mais à créer l'utilisateur en question. La modification du dump n'est pas une mauvaise solution, mais ça passe pour une base de 200Mo, ça sera peut être moins évident sur des grosses bases. En tout cas, cette solution ne me convient pas :p
    C'est marrant, dans les tests que j'avais fait, le DEFINER plantait systématiquement, que l'utilisation existe ou non. Il faudra que je re-teste.
    Citation Envoyé par DjinnS Voir le message
    (...)
    Une autre méthode consisterait à modifier le paramètre DEFINER du trigger. Mais comme il n'y a pas de ALTER TRIGGER sous la 5.0 (franchement, je sais pas ce qu'ils ont foutu les devs là ... mais bon ...), il faut le DROP et ensuite un CREATE.
    Pas de ALTER, même pas de CREATE OR REPLACE... je crois qu'ils étaient très pressés
    Citation Envoyé par DjinnS Voir le message

    Je veux pas dire, mais pourquoi il n'y a pas d'option dans mysqldump pour omettre le DEFINER ?
    Sans doute pour la même raison que l'absence d'ALTER...

Discussions similaires

  1. mySql : trigger sur une vue qui référence plusieurs tables
    Par charlesS dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 23/02/2012, 14h50
  2. Dump des triggers
    Par Invité dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 04/09/2008, 17h59
  3. "Trigger" sur une insertion : référence au nouveau tuple
    Par samworld dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/06/2007, 22h27
  4. [power designer et Sybase] trigger
    Par mr_qno dans le forum Sybase
    Réponses: 4
    Dernier message: 12/07/2006, 18h32
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo