Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/02/2011, 14h19   #1
Membre éclairé
 
Inscription : février 2005
Messages : 349
Détails du profil
Informations personnelles :
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : février 2005
Messages : 349
Points : 358
Points : 358
Par défaut mysql et bash

bonjour à tous.

J'espere que vous allez pouvoir m'aider car cela fait maintenant presque 20 heures perdu sur mon probleme. Je ne sais pas trop dans quelles catégories je devais poster : mysql ou bash. Si ce n'est pas bon, merci au modo pour la modif

Je dispose d'un réseau de réplication mysql assez important (3 serveurs en circulaire sous linux, 1 branche sous linux, et plusieurs feuilles sous windows pour chaque serveur de la circulaire). Nous mettons très souvent en production de nouvelles feuilles, qui ne sont pas des copies parfaites des serveurs de la circulaire.je fais de la replication selective sur plusieurs tables des mes bases de données (chaque base a la même structure), j'utilise donc le joker dans les instructions replicate-(wild)-(do|ignore)-table du fichier my .ini

Je suis en train de developper un script bash pour me permettre de dumper les tables non ignorés par la replication pour mettre plus facilement en production de nouvelles feuilles. Ce script réconcilie le maitre-esclave au niveau des fichier binaires de la replication. J'en suis bientot à la fin mais j'ai un problème dans l'une des fonctions les plus importantes du script: le dump lui même. Tout ce qui est interrogation des instructions de replication ect c'est tout fait.

J'en vient donc à mon problème. Dans ma fonction de dump , j'utilise une commande de la forme :

Code :
/usr/bin/mysqldump --host=<hote maitre> --user='<utilisateur full privileges>' --password='<password>' --port=3306 --opt -R --triggers '<database>' --tables '<table>' | /usr/bin/mysql --host=<hote esclave> --user='<utilisateur full privileges>' --password="<password>" --port=3306 -C '<database>'
Cette commande est execute sur le maitre de replication.
Si je lance cette commande en console pas de soucis; par contre lancé dans mon script le maitre me répond par un magnifique.
Code :
mysqldump: Got error: 1045: Access denied FOR user 'root'@'192.168.1.45' (USING password: YES) when trying TO connect
J'ai vérifié plusieurs fois mes utilisateurs et leur privileges. envoyer plusieurs fois Décomplexifier mon code, utiliser cette fonction dans un script mon gros. Je ne sais plus quoi vérifier.

Le maitre execute la version 5.0.67-log, et la feuille 5.1.37-community-log.

Quelqu'un a t'il deja était confronté à ce probleme ?
__________________
La connaissance s'accroit lorsqu'on la partage.
overider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h39   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
généralement ce probleme vient que ton user a des droits mais pas depuis la machine depuis il accède. root@123.123.123.123 c'est pas le même que root@456.456.456.456
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 17h55   #3
Membre éclairé
 
Inscription : février 2005
Messages : 349
Détails du profil
Informations personnelles :
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : février 2005
Messages : 349
Points : 358
Points : 358
merci pour ta remarque. Je viens de vérifier les accés, tout me semble ok. Ce qui est étonant c'est que j'arrive à faire d'autre accés au serveur mysql avec les mêmes info de connexion.
ex :
Code :
1
2
3
4
5
 
- SELECT version()
- SHOW master STATUS
- SHOW VARIABLES
....
Encore plus étonant, c'est que si j'execute la commande mysqldump depuis la console, ça marche.
seul mysqldump appeller depuis le script ne semble pas fonctionner. Quelq'un sait il s'il existe une différence d'implementation des primitives d'accés au service mysql entre mysqldump et le client mysql en ligne de commande?
__________________
La connaissance s'accroit lorsqu'on la partage.
overider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 08h31   #4
Membre éclairé
 
Inscription : février 2005
Messages : 349
Détails du profil
Informations personnelles :
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : février 2005
Messages : 349
Points : 358
Points : 358
je vous envoie le code de ma fonction ainsi que mon script bash de test. Il ne s'agit pas du script final (celui ci faisant environ 1000 lignes)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
#!/bin/ksh
# file sce-bash-mysql.sh
FUNCTION dodump
{
typeset -rt a_localconnectorstr=$1
typeset -rt a_remoteconnectorstr=$2
typeset -rt databasetable=$3
typeset -rt alterdump=$4
typeset -rt constraint=$5
 
typeset  a_localconnector=(${a_localconnectorstr})
 
eval listindex=\(\${!$a_localconnector[@]}\)
eval listvalue=\(\${$a_localconnector[@]}\)
i=0
# je detruit la variable qui a le nom du tableau passe en parametre
unset a_localconnector
# puis je le recree cette fois en vrai tableau associatif
typeset -A a_localconnector
 
# je reparse mes infos de connexion
FOR INDEX IN ${listindex[@]} ;do
        a_localconnector[$index]=${listvalue[$i]}
        i=$((i+1))
done
 
typeset  a_remoteconnector=(${a_remoteconnectorstr})
 
eval listindex=\(\${!$a_remoteconnector[@]}\)
eval listvalue=\(\${$a_remoteconnector[@]}\)
i=0
# je detruit la variable qui a le nom du tableau passe en parametre
unset a_remoteconnector
# puis je le recree cette fois en vrai tableau associatif
typeset -A a_remoteconnector
# je reparse mes infos de connexion
FOR INDEX IN ${listindex[@]} ;do
        a_remoteconnector[$index]=${listvalue[$i]}
        i=$((i+1))
done
 
DATABASE=`echo $databasetable | cut -d'|' -f1`
TABLE=`echo $databasetable | cut -d'|' -f2`
echo "LOCAL"
FOR KEY IN ${!a_localconnector[@]};do
        echo "$key : ${a_localconnector[$key]}"
done
echo "REMOTE"
FOR KEY IN ${!a_remoteconnector[@]};do
        echo "$key :  ${a_remoteconnector[$key]}"
done
echo "database table"
echo $database $table
echo "OTHER"
echo $alterdump $constraint
MYSQLDUMPBIN=`which mysqldump`
MYSQLBIN=`which mysql`
 
FOR eachhost IN `echo ${a_localconnector["MultiHostDB"]} | awk '{n=split($0,host,",")} {for (i=1;i<=n;i++) printf host[i] "\n" } '`;do
        MYSQLDUMPCMD="$MYSQLDUMPBIN --host=$eachhost --user='${a_localconnector["UserDB"]}' --password='${a_localconnector["PwdDB"]}' --port=${a_localconnector["PortDB"]} --opt -R --triggers  $alterdump $constraint $database --tables $table"
        #MYSQLDUMPCMD="$MYSQLDUMPBIN --host=$eachhost --user='root' --password='galileo' --port=${a_localconnector["PortDB"]} --opt -R --triggers  $alterdump $constraint '$database' --tables '$table'"
        echo $MYSQLDUMPCMD
        $($MYSQLDUMPCMD)
        MYSQLDUMPCMD="$MYSQLDUMPCMD | $MYSQLBIN --host=${a_remoteconnector["MultiHostDB"]} --user='${a_remoteconnector["UserDB"]}' --password=\"${a_remoteconnector["PwdDB"]}\" --port=${a_remoteconnector["PortDB"]} -C '$database'"
        echo "blop"
        break
done
        echo $MYSQLDUMPCMD
        READ blop
        `$MYSQLDUMPCMD`
        RETURN $?
 
}
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/ksh
INCLUDE=~/dir_eni/dev/gnu/cms/bash/sce-bash-mysql.sh
 
IF [ -e $INCLUDE ];then
        . ${INCLUDE}
else
        echo "Cannot include $INCLUDE"
fi
typeset -A LocalHostMonConnector RemoteHostMonConnector
 
typeset -rA a_localcnctmapping=( [1]="MultiHostDB" [2]="databaseDB" [3]="UserDB" [4]="PwdDB" [5]="PortDB" )
 
 
LocalHostMonConnector[${a_localcnctmapping[1]}]='dev0102'
LocalHostMonConnector[${a_localcnctmapping[2]}]='central'
LocalHostMonConnector[${a_localcnctmapping[3]}]='root'
LocalHostMonConnector[${a_localcnctmapping[4]}]='mdp_root'
LocalHostMonConnector[${a_localcnctmapping[5]}]=3306
 
RemoteHostMonConnector[${a_localcnctmapping[1]}]='di0198'
RemoteHostMonConnector[${a_localcnctmapping[2]}]='digital_seven'
RemoteHostMonConnector[${a_localcnctmapping[3]}]='monitoring'
RemoteHostMonConnector[${a_localcnctmapping[4]}]='mon;itor74'
RemoteHostMonConnector[${a_localcnctmapping[5]}]=3306
 
echo "LOCAL"
echo ${a_localcnctmapping[@]}
echo ${LocalHostMonConnector[@]}
echo "REMOTE"
echo ${a_localcnctmapping[@]}
echo ${RemoteHostMonConnector[@]}
dodump LocalHostMonConnector RemoteHostMonConnector '<database>|<table>' '' '
__________________
La connaissance s'accroit lorsqu'on la partage.
overider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 13h07   #5
Membre éclairé
 
Inscription : février 2005
Messages : 349
Détails du profil
Informations personnelles :
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : février 2005
Messages : 349
Points : 358
Points : 358
Si cela interresse quelqu'un voici a quoi ressemble ma fonction dodump maintenant.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
FUNCTION dodump
{
typeset -rt a_localconnectorstr=$1
typeset -rt a_remoteconnectorstr=$2
typeset -rt databasetable=$3
typeset -rt alterdump=$4
typeset -rt constraint=$5
 
typeset  a_localconnector=(${a_localconnectorstr})
 
eval listindex=\(\${!$a_localconnector[@]}\)
eval listvalue=\(\${$a_localconnector[@]}\)
i=0
# je detruit la variable qui a le nom du tableau passe en parametre
unset a_localconnector
# puis je le recree cette fois en vrai tableau associatif
typeset -A a_localconnector
 
# je reparse mes infos de connexion
FOR INDEX IN ${listindex[@]} ;do
        a_localconnector[$index]=${listvalue[$i]}
        i=$((i+1))
done
 
typeset  a_remoteconnector=(${a_remoteconnectorstr})
 
eval listindex=\(\${!$a_remoteconnector[@]}\)
eval listvalue=\(\${$a_remoteconnector[@]}\)
i=0
# je detruit la variable qui a le nom du tableau passe en parametre
unset a_remoteconnector
# puis je le recree cette fois en vrai tableau associatif
typeset -A a_remoteconnector
# je reparse mes infos de connexion
FOR INDEX IN ${listindex[@]} ;do
        a_remoteconnector[$index]=${listvalue[$i]}
        i=$((i+1))
done
 
DATABASE=`echo $databasetable | cut -d'|' -f1`
TABLE=`echo $databasetable | cut -d'|' -f2`
#echo "LOCAL"
#for key in ${!a_localconnector[@]};do
#       echo "$key : ${a_localconnector[$key]}"
#done
#echo "REMOTE"
#for key in ${!a_remoteconnector[@]};do
#       echo "$key :  ${a_remoteconnector[$key]}"
#done
#echo "database table"
#echo $database $table
#echo "OTHER"
#echo $alterdump $constraint
MYSQLDUMPBIN=`which mysqldump`
MYSQLBIN=`which mysql`
 
FOR eachhost IN `echo ${a_localconnector["MultiHostDB"]} | awk '{n=split($0,host,",")} {for (i=1;i<=n;i++) printf host[i] "\n" } '`;do
        #MYSQLDUMPCMD="$MYSQLDUMPBIN -h$eachhost -u'${a_localconnector["UserDB"]}' -p'${a_localconnector["PwdDB"]}' -P${a_localconnector["PortDB"]} $database $table"
        #MYSQLDUMPCMD="$MYSQLDUMPBIN --host="$eachhost" --user="${a_localconnector["UserDB"]}" --password="${a_localconnector["PwdDB"]}" --port=${a_localconnector["PortDB"]} --opt -R --triggers "$alterdump" "$constraint" "$database" "$table""
        MYSQLDUMPCMD="$MYSQLDUMPBIN \
                        -h"$eachhost" \
                        -u"${a_localconnector["UserDB"]}" \
                        -p"${a_localconnector["PwdDB"]}" \
                        -P${a_localconnector["PortDB"]} \
                        --opt -R --triggers \
                        "$alterdump" \
                        "$constraint" \
                        $database $table      "
        #echo $MYSQLDUMPCMD
        #$MYSQLDUMPCMD
        MYSQLBINCMD="$MYSQLBIN \
                        -h"${a_remoteconnector["MultiHostDB"]}" \
-u"${a_remoteconnector["UserDB"]}"
                        -p"${a_remoteconnector["PwdDB"]}"
                        -P${a_remoteconnector["PortDB"]} \
                        -C "$database""
 
        #echo $MYSQLBINCMD
        break
done
        $MYSQLDUMPCMD | $MYSQLBINCMD
        RETURN $?
 
}
Je pense que bash avait des problemes avec l'interpretation des argument avec --
__________________
La connaissance s'accroit lorsqu'on la partage.
overider est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h55.


 
 
 
 
Partenaires

Hébergement Web