2009-11-03 6 views
2

Question Réécriture:mysql créer la base de données et script utilisateur

HOMEDIR="ftpuser" 
REMOTEIP="1.1.1.1" 
MYSQLPASS="password" 

Q1="DROP USER "$HOMEDIR"_shop;" 
Q2="DROP DATABASE "$HOMEDIR"_shop;" 
Q3="CREATE DATABASE IF NOT EXISTS "$HOMEDIR"_shop;" 
Q4="GRANT ALL ON "$HOMEDIR"_shop TO '"$HOMEDIR"_shop'@'localhost' IDENTIFIED BY '$MYSQLPASS';" 
Q5="GRANT ALL ON "$HOMEDIR"_shop TO '"$HOMEDIR"_shop'@'anotherip' IDENTIFIED BY '$MYSQLPASS';" 
# Need to grant permissions from another server as well 
Q6="FLUSH PRIVILEGES;" 
SQL="${Q1}${Q2}${Q3}${Q4}${Q5}${Q6}" 

echo $SQL 
echo " " 
ssh -p 8899 [email protected]$REMOTEIP "mysql -u root -p "$SQL"" 

Je lance alors:

/root/testing/migratesite.sh 

et obtenez:

bash: DROP: command not found 
bash: CREATE: command not found 
bash: GRANT: command not found 
bash: GRANT: command not found 
bash: FLUSH: command not found 

Qu'est-ce que je manque?

+0

Works pour moi, MySQL 5.0.51, 3.2.39 BASH. L'exécutez-vous dans un autre script? Est-ce que cela fonctionne si vous l'exécutez via la ligne de commande? –

+0

J'ai refait ma question pour expliquer exactement ce que je fais plutôt que ce sur quoi je me base! J'espère que cela pourra aider! – Lizard

+0

Je dirais que ce 'ssh -p 8899 root @ $ REMOTEIP" mysql -u root -p $ SQL "" 'ne peut pas fonctionner à cause des guillemets ... mais je n'ai pas de machine pour l'essayer encore en cours ... essayer d'échapper les guillemets autour de $ SQL – Bobby

Répondre

3

Vous êtes Guillemets manquants et une bonne ligne de commande client mysql:

ssh -p 8899 [email protected]$REMOTEIP "mysql -u root -p -e \"$SQL\"" 

Vous devez échapper aux guillemets autour de la variable SQL $ afin qu'ils sont transmis au shell distant, sinon ils sont interprétés par les autorités locales shell (c'est pourquoi vous obtenez DROP: commande non trouvée, le point-virgule est interprété par le shell.) De plus, pour que le client mysql puisse exécuter une commande, vous devez passer l'option de ligne de commande -e.

0

Avez-vous essayé ceci:

ssh -p 8899 [email protected]$REMOTEIP "echo \"$SQL\" | mysql -u root --password=$SQL_PASS" 
+0

Cela échouera aussi en raison de l'absence de citation.Cela a le problème supplémentaire que le client mysql interprétera le SQL comme le mot de passe –

+0

Ouais, aurait dû changer '- p' à '--password = $ PASS_VARIABLE' Corrigé – Pascal

+0

Tant que $ PASS_VARIABLE est lu à partir des arguments (et non stockés dans le script) cela devrait être bon. –

Questions connexes