|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : avril 2003 Messages : 131 ![]() |
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: 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 :
/*!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 */;; Code :
ERROR 1449 (HY000): There IS no 'root'@'lautremachine' registered 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. |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
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
|
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : avril 2003 Messages : 131 ![]() |
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 |
|
|
00
|
|
|
#4 | |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Citation:
|
|
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Inscription : avril 2003 Messages : 131 ![]() |
Sortir l'artillerie des regex pour importer une base de données, oui, ça fait chier
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. |
|
|
00
|
|
|
#6 | ||||
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Citation:
Citation:
Citation:
![]() Citation:
|
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com