mysql cria banco de dados e script de usuário

1

Pergunta reescrita:

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 root@$REMOTEIP "mysql -u root -p "$SQL""

Eu então corro:

/root/testing/migratesite.sh

E obtenha:

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

O que estou perdendo?

    
por icelizard 03.11.2009 / 13:11

3 respostas

1

Você está faltando aspas e uma linha de comando do cliente mysql:

ssh -p 8899 root@$REMOTEIP "mysql -u root -p -e \"$SQL\""

Você precisa escapar as aspas da variável $ SQL para que elas sejam passadas para o shell remoto, senão elas são interpretadas pelo shell local (é por isso que você obtém o comando DROP: não encontrado, o ponto e vírgula é interpretado pelo shell .) Além disso, para que o cliente mysql execute um comando, você precisa passar a opção de linha de comando -e.

    
por 03.11.2009 / 13:28
1

Você já incluiu as $ VARIABLES entre aspas (o que é uma boa prática e considera espaços em variáveis / nomes de arquivos), mas você as abre e fecha em toda a linha - isso funciona bem (embora não recomendado) para atribuição de variável BASH , mas quando você chegar ao comando remoto SSH, ele falhará ao tentar executar a variável, e não citar a string anexada que você forneceu. O comando SSH correto seria:

ssh -p 8899 root@$REMOTEIP "mysql -u root -p $SQL"

como a variável já está "citada" pelas aspas para passar o argumento.

    
por 03.11.2009 / 13:18
0

Pode ser mais fácil substituir perl e DBI por bash - não há necessidade de bifurcar o mysql, pouco mais controle. Também t'internets está repleta de tutoriais e exemplos sobre "como fazer" - nenhum ponto nadando na maré;)

    
por 03.11.2009 / 14:12